1 |
commit: 0029d15a96b5777f12503e7298a92bccfc8571ff |
2 |
Author: James Le Cuirot <chewi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Dec 5 17:23:15 2015 +0000 |
4 |
Commit: James Le Cuirot <chewi <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Dec 5 17:24:03 2015 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0029d15a |
7 |
|
8 |
dev-java/antlr: Version bump for SLOT 3, should fix #567560 |
9 |
|
10 |
I initially wanted to add 3.3 but despite it being less disruptive |
11 |
than 3.4, I found compatibility issues with the revdeps. We will |
12 |
hopefully never need 3.3. |
13 |
|
14 |
This is a total rewrite from the previous version, which uses the new |
15 |
simplified antlr-2 ebuild and adds a very large test suite that is |
16 |
passing with a little patching. |
17 |
|
18 |
Package-Manager: portage-2.2.26 |
19 |
|
20 |
dev-java/antlr/Manifest | 2 + |
21 |
dev-java/antlr/antlr-3.2.ebuild | 96 ++++++++++++ |
22 |
dev-java/antlr/files/3.2-java-8.patch | 32 ++++ |
23 |
dev-java/antlr/files/3.2-test-fixes.patch | 249 ++++++++++++++++++++++++++++++ |
24 |
4 files changed, 379 insertions(+) |
25 |
|
26 |
diff --git a/dev-java/antlr/Manifest b/dev-java/antlr/Manifest |
27 |
index 9bce4f8..7c1dfc3 100644 |
28 |
--- a/dev-java/antlr/Manifest |
29 |
+++ b/dev-java/antlr/Manifest |
30 |
@@ -2,5 +2,7 @@ DIST 4.4.zip 1107695 SHA256 68a79e4accae4dfd9d45a8292fe9b2812c6a3ec1d903412e205a |
31 |
DIST antlr-2.7.7.tar.gz 1816180 SHA256 853aeb021aef7586bda29e74a6b03006bcb565a755c86b66032d8ec31b67dbb9 SHA512 faa72d2ddcba434ef1233e70c1549e63eba67c00793966322e821cf7f015cccb804448cb92d8fbef0429f59928fad65ec954f8ffbda0acbb8e983de0806d349d WHIRLPOOL def5ac0ddfe5a65f9f7d5489d039048c5d630b46cd5626593bd12e9b393d5ec26884f90b013bcdf58511e26abbf06e0d7b3789a11298b017f7e70af2ec8dde4a |
32 |
DIST antlr-3.1.3-generated.tar.bz2 47167 SHA256 ed326de0f1f92dd72e8d9644e8eaf59d02b9725b4b5218f5c54e12100f8d05f4 SHA512 4ea01ad0d5fc99607ffa445fb99ae424648b713dca293d05ff4ec064cac0a0fe5073df3834f9b6990e99f3cefc5cdd191a1ee3c3951d97615908b94630070bba WHIRLPOOL 61f7829811251a35528c322952830dc5a6e82e23e36f664af179b41955734e771aaad070298666a15be0f41982dbb8b19955b5967987582c6b666e602384d060 |
33 |
DIST antlr-3.1.3.tar.gz 10743515 SHA256 1fca0fc7304140807e64ec263a58d93ef1b380cfb6407084e6909f8220bc1039 SHA512 6814b970740bd61e6727f81b1a2fb4249f8f029e756694d852224eee54e0231540f8e23d2fa8f78eef234d6497f5fa1411e76020ffaed737d8c1a5178321a062 WHIRLPOOL 9d9a1caf39595dbb9b300f730091cfa38a12ab10b8a59d58c7bdd9ba4674bce9f49bc21b5b170129216ff9d880dbf5f0bdb5bfe614b003a4ffe948948b5413c9 |
34 |
+DIST antlr-3.2.jar 1928009 SHA256 4c8737014e7ca0d2c85171edf37f5a26b2d8d8237c283357b81a3269b6848d38 SHA512 25a61404c4b41e48eeaed49d41122f9400092248a10eb776d75ce3513295870eca1acc4b06c74925284a27cc64ca0506e34de39fb91996f09727cc5cc72dd9a6 WHIRLPOOL 19d99c9f50339ee9ef31e9458ac3a44ce52aa89ed84f96be905d626e3a53d5e2bbdb2e8eb4c5ca16413e7493499b141f940dd200658f8e60e9ecbd777f83a84b |
35 |
+DIST antlr-3.2.tar.gz 837320 SHA256 01548fa03ef1f0ed05a93f0749b65db8a35a191ad7ad34e1e6a6a2529ca2ef45 SHA512 8984221cd89253c033a4596dd56cd51b297393a53b4682f5ab401172745d343371bf0d45417fa286ce972add1b4e474f1f3091fa1345158dbfc040702d61607c WHIRLPOOL 40080efc13c88312aaa318cde097f240e711b477e264739ea71b6c246ede29ac48f42eccd55365af531eb428f1ca1d89386d7e5753b6bc35cad9bf937b70e6de |
36 |
DIST antlr-3.5.2-complete-no-st3.jar 1862097 SHA256 46531814ba9739cdf20c6c1789c252d3d95b68932813d79fb8bbfdf8d5840417 SHA512 227f56edfb8d1935fc0f5bd69a730a2230b173f38baa7837b6dac9b4a10c5d4a9b2eb806416b21bed2621bb0b8e0fb98a6f48da2660b326728326f078bc28ea9 WHIRLPOOL 5c5285894e2d4182650a8a573ae83996e1f463d6ce866ddcff43959b16cf1070c3042b21d80c9350865716a6719d15fcd42b7370b4af69b6eca863d26ffcc325 |
37 |
DIST antlr-4.3-complete.jar 1340431 SHA256 da9afec193edcc4d8080a4897e77e1e2f6a0c0bc265fccb8c44ae10660f7a8f0 SHA512 669cc21ef72ec899509181b1ec77d918fce9dba3db165d9d7429e0058c58a9d716cbf274d7a54b6bd9143d95d9a902d82acfa5bcb5e6c805c4e9fdf90b83349e WHIRLPOOL f665a200850d294ee0f8c3127bb918a9c9625098a97a960afe08b3a3940ba2c2ad54099e34c82fab5058b668a721b3ed5621a85820d0aca0e16af2f81627c723 |
38 |
|
39 |
diff --git a/dev-java/antlr/antlr-3.2.ebuild b/dev-java/antlr/antlr-3.2.ebuild |
40 |
new file mode 100644 |
41 |
index 0000000..13b7623 |
42 |
--- /dev/null |
43 |
+++ b/dev-java/antlr/antlr-3.2.ebuild |
44 |
@@ -0,0 +1,96 @@ |
45 |
+# Copyright 1999-2015 Gentoo Foundation |
46 |
+# Distributed under the terms of the GNU General Public License v2 |
47 |
+# $Id$ |
48 |
+ |
49 |
+EAPI="5" |
50 |
+ |
51 |
+inherit eutils java-pkg-2 java-pkg-simple |
52 |
+ |
53 |
+DESCRIPTION="A parser generator for many languages" |
54 |
+HOMEPAGE="http://www.antlr3.org/" |
55 |
+SRC_URI="http://www.antlr3.org/download/${P}.tar.gz |
56 |
+ http://www.antlr3.org/download/${P}.jar" # Prebuilt version needed. |
57 |
+LICENSE="BSD" |
58 |
+SLOT="3" |
59 |
+KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~x64-freebsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" |
60 |
+IUSE="doc test" |
61 |
+ |
62 |
+CDEPEND=">=dev-java/antlr-2.7.7-r7:0 |
63 |
+ dev-java/stringtemplate:0" |
64 |
+ |
65 |
+RDEPEND="${CDEPEND} |
66 |
+ >=virtual/jre-1.6" |
67 |
+ |
68 |
+DEPEND="${CDEPEND} |
69 |
+ >=virtual/jdk-1.6 |
70 |
+ test? ( dev-java/junit:4 )" |
71 |
+ |
72 |
+S="${WORKDIR}/${P}" |
73 |
+JAVA_GENTOO_CLASSPATH_EXTRA="${S}/${PN}-runtime.jar" |
74 |
+JAVA_GENTOO_CLASSPATH="antlr,stringtemplate" |
75 |
+ |
76 |
+src_unpack() { |
77 |
+ unpack ${P}.tar.gz |
78 |
+} |
79 |
+ |
80 |
+java_prepare() { |
81 |
+ java-pkg_clean |
82 |
+ |
83 |
+ # These fixes have been applied in 3.5. |
84 |
+ epatch "${FILESDIR}/${PV}-test-fixes.patch" |
85 |
+ epatch "${FILESDIR}/${PV}-java-8.patch" |
86 |
+ |
87 |
+ # Some tests fail under Java 8 in ways that probably aren't limited |
88 |
+ # to the tests. This is bad but upstream is never going to update |
89 |
+ # 3.2 even though other projects still rely on it. If any issues |
90 |
+ # arise, we can only put pressure on those projects to upgrade. |
91 |
+ if java-pkg_is-vm-version-ge 1.8; then |
92 |
+ rm -v tool/src/test/java/org/antlr/test/Test{DFAConversion,SemanticPredicates,TopologicalSort}.java || die |
93 |
+ fi |
94 |
+ |
95 |
+ # 3.2 has strange hidden files. |
96 |
+ find -type f -name "._*.*" -delete || die |
97 |
+} |
98 |
+ |
99 |
+src_compile() { |
100 |
+ cd "${S}/runtime/Java/src/main" || die |
101 |
+ JAVA_JAR_FILENAME="${S}/${PN}-runtime.jar" JAVA_PKG_IUSE="doc" java-pkg-simple_src_compile |
102 |
+ |
103 |
+ cd "${S}/tool/src/main" || die |
104 |
+ |
105 |
+ local G; for G in antlr codegen antlr.print assign.types buildnfa define; do # from pom.xml |
106 |
+ antlr -o antlr2/org/antlr/grammar/v2/{,${G}.g} || die |
107 |
+ done |
108 |
+ |
109 |
+ # We have applied a patch to fix this version under Java 8. Trouble |
110 |
+ # is that we need to run a prebuilt version before we can build our |
111 |
+ # own and that version doesn't have the fix applied. We work around |
112 |
+ # this by building just the offending class against the prebuilt |
113 |
+ # version and then putting them together in the classpath. That |
114 |
+ # isn't all. Due to a compiler limitation that Chewi doesn't fully |
115 |
+ # understand, this class cannot be compiled by itself without a |
116 |
+ # couple of tweaks that have been applied in the Java 8 patch. |
117 |
+ ejavac -classpath "${DISTDIR}/${P}.jar" java/org/antlr/tool/CompositeGrammar.java |
118 |
+ |
119 |
+ java -classpath "java:${DISTDIR}/${P}.jar" org.antlr.Tool $(find antlr3 -name "*.g") || die |
120 |
+ JAVA_JAR_FILENAME="${S}/${PN}-tool.jar" java-pkg-simple_src_compile |
121 |
+ java-pkg_addres "${S}/${PN}-tool.jar" resources |
122 |
+} |
123 |
+ |
124 |
+src_install() { |
125 |
+ java-pkg_dojar ${PN}-{runtime,tool}.jar |
126 |
+ java-pkg_dolauncher ${PN}${SLOT} --main org.antlr.Tool |
127 |
+ use doc && java-pkg_dojavadoc runtime/Java/src/main/target/api |
128 |
+} |
129 |
+ |
130 |
+src_test() { |
131 |
+ cd tool/src/test/java || die |
132 |
+ local CP=".:${S}/${PN}-runtime.jar:${S}/${PN}-tool.jar:$(java-pkg_getjars junit-4,${JAVA_GENTOO_CLASSPATH})" |
133 |
+ |
134 |
+ local TESTS=$(find * -name "Test*.java") |
135 |
+ TESTS="${TESTS//.java}" |
136 |
+ TESTS="${TESTS//\//.}" |
137 |
+ |
138 |
+ ejavac -classpath "${CP}" $(find -name "*.java") |
139 |
+ ejunit4 -classpath "${CP}" ${TESTS} |
140 |
+} |
141 |
|
142 |
diff --git a/dev-java/antlr/files/3.2-java-8.patch b/dev-java/antlr/files/3.2-java-8.patch |
143 |
new file mode 100644 |
144 |
index 0000000..662abfe |
145 |
--- /dev/null |
146 |
+++ b/dev-java/antlr/files/3.2-java-8.patch |
147 |
@@ -0,0 +1,32 @@ |
148 |
+diff -Naur antlr-3.3.orig/tool/src/main/java/org/antlr/tool/CompositeGrammar.java antlr-3.3/tool/src/main/java/org/antlr/tool/CompositeGrammar.java |
149 |
+--- antlr-3.3.orig/tool/src/main/java/org/antlr/tool/CompositeGrammar.java 2010-11-30 01:54:04.000000000 +0000 |
150 |
++++ antlr-3.3/tool/src/main/java/org/antlr/tool/CompositeGrammar.java 2015-10-03 14:28:50.063497181 +0100 |
151 |
+@@ -219,7 +219,9 @@ |
152 |
+ public List<Grammar> getIndirectDelegates(Grammar g) { |
153 |
+ List<Grammar> direct = getDirectDelegates(g); |
154 |
+ List<Grammar> delegates = getDelegates(g); |
155 |
+- delegates.removeAll(direct); |
156 |
++ if (direct != null) { |
157 |
++ delegates.removeAll(direct); |
158 |
++ } |
159 |
+ return delegates; |
160 |
+ } |
161 |
+ |
162 |
+@@ -389,7 +391,7 @@ |
163 |
+ Set<String> localRuleDefs = new HashSet<String>(); |
164 |
+ Set<String> overrides = new HashSet<String>(); |
165 |
+ // compute set of non-overridden rules for this delegate |
166 |
+- for (Rule r : p.grammar.getRules()) { |
167 |
++ for (Rule r : (Collection<Rule>) p.grammar.getRules()) { |
168 |
+ if ( !ruleDefs.contains(r.name) ) { |
169 |
+ localRuleDefs.add(r.name); |
170 |
+ } |
171 |
+@@ -409,7 +411,7 @@ |
172 |
+ |
173 |
+ // pass larger set of defined rules to delegates |
174 |
+ if ( p.children!=null ) { |
175 |
+- for (CompositeGrammarTree delegate : p.children) { |
176 |
++ for (CompositeGrammarTree delegate : (List<CompositeGrammarTree>) p.children) { |
177 |
+ _minimizeRuleSet(ruleDefs, delegate); |
178 |
+ } |
179 |
+ } |
180 |
|
181 |
diff --git a/dev-java/antlr/files/3.2-test-fixes.patch b/dev-java/antlr/files/3.2-test-fixes.patch |
182 |
new file mode 100644 |
183 |
index 0000000..0544b70 |
184 |
--- /dev/null |
185 |
+++ b/dev-java/antlr/files/3.2-test-fixes.patch |
186 |
@@ -0,0 +1,249 @@ |
187 |
+--- tool/src/test/java/org/antlr/test/BaseTest.java.orig 2010-11-30 01:54:04.000000000 +0000 |
188 |
++++ tool/src/test/java/org/antlr/test/BaseTest.java 2015-09-24 22:25:36.872191194 +0100 |
189 |
+@@ -130,8 +130,8 @@ |
190 |
+ try { |
191 |
+ Process process = |
192 |
+ Runtime.getRuntime().exec(args, null, outputDir); |
193 |
+- StreamVacuum stdout = new StreamVacuum(process.getInputStream()); |
194 |
+- StreamVacuum stderr = new StreamVacuum(process.getErrorStream()); |
195 |
++ StreamVacuum stdout = new StreamVacuum(process.getInputStream(), tmpdir+"/"+fileName); |
196 |
++ StreamVacuum stderr = new StreamVacuum(process.getErrorStream(), tmpdir+"/"+fileName); |
197 |
+ stdout.start(); |
198 |
+ stderr.start(); |
199 |
+ process.waitFor(); |
200 |
+@@ -406,8 +406,8 @@ |
201 |
+ //System.out.println("execParser: "+cmdLine); |
202 |
+ Process process = |
203 |
+ Runtime.getRuntime().exec(args, null, new File(tmpdir)); |
204 |
+- StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); |
205 |
+- StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); |
206 |
++ StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream(), tmpdir+"/input"); |
207 |
++ StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream(), tmpdir+"/input"); |
208 |
+ stdoutVacuum.start(); |
209 |
+ stderrVacuum.start(); |
210 |
+ process.waitFor(); |
211 |
+@@ -499,8 +499,10 @@ |
212 |
+ StringBuffer buf = new StringBuffer(); |
213 |
+ BufferedReader in; |
214 |
+ Thread sucker; |
215 |
+- public StreamVacuum(InputStream in) { |
216 |
++ String inputFile; |
217 |
++ public StreamVacuum(InputStream in, String inputFile) { |
218 |
+ this.in = new BufferedReader( new InputStreamReader(in) ); |
219 |
++ this.inputFile = inputFile; |
220 |
+ } |
221 |
+ public void start() { |
222 |
+ sucker = new Thread(this); |
223 |
+@@ -510,6 +512,8 @@ |
224 |
+ try { |
225 |
+ String line = in.readLine(); |
226 |
+ while (line!=null) { |
227 |
++ if (line.startsWith(inputFile)) |
228 |
++ line = line.substring(inputFile.length()+1); |
229 |
+ buf.append(line); |
230 |
+ buf.append('\n'); |
231 |
+ line = in.readLine(); |
232 |
+--- tool/src/test/java/org/antlr/test/TestTopologicalSort.java.orig 2009-09-23 19:36:14.000000000 +0100 |
233 |
++++ tool/src/test/java/org/antlr/test/TestTopologicalSort.java 2010-11-30 01:54:04.000000000 +0000 |
234 |
+@@ -49,7 +49,7 @@ |
235 |
+ g.addEdge("F", "H"); |
236 |
+ g.addEdge("E", "F"); |
237 |
+ |
238 |
+- String expecting = "[H, F, E, D, A, G, B, C]"; |
239 |
++ String expecting = "[H, F, E, D, G, A, B, C]"; |
240 |
+ List nodes = g.sort(); |
241 |
+ String result = nodes.toString(); |
242 |
+ assertEquals(expecting, result); |
243 |
+@@ -91,7 +91,7 @@ |
244 |
+ g.addEdge("Def.g", "Java.tokens"); // walkers feed off generated tokens |
245 |
+ g.addEdge("Ref.g", "Java.tokens"); |
246 |
+ |
247 |
+- String expecting = "[MyJava.tokens, Java.g, Java.tokens, Def.g, Ref.g]"; |
248 |
++ String expecting = "[MyJava.tokens, Java.g, Java.tokens, Ref.g, Def.g]"; |
249 |
+ List nodes = g.sort(); |
250 |
+ String result = nodes.toString(); |
251 |
+ assertEquals(expecting, result); |
252 |
+@@ -105,7 +105,7 @@ |
253 |
+ g.addEdge("Def.g", "JavaLexer.tokens"); |
254 |
+ g.addEdge("Ref.g", "JavaLexer.tokens"); |
255 |
+ |
256 |
+- String expecting = "[JavaLexer.g, JavaLexer.tokens, JavaParser.g, Def.g, Ref.g]"; |
257 |
++ String expecting = "[JavaLexer.g, JavaLexer.tokens, JavaParser.g, Ref.g, Def.g]"; |
258 |
+ List nodes = g.sort(); |
259 |
+ String result = nodes.toString(); |
260 |
+ assertEquals(expecting, result); |
261 |
+--- tool/src/test/java/org/antlr/test/TestSemanticPredicates.java.orig 2009-09-23 19:36:12.000000000 +0100 |
262 |
++++ tool/src/test/java/org/antlr/test/TestSemanticPredicates.java 2015-12-05 13:52:05.923411552 +0000 |
263 |
+@@ -731,19 +731,23 @@ |
264 |
+ "c : a\n" + |
265 |
+ " | b\n" + |
266 |
+ " ;\n"); |
267 |
+- String expecting = |
268 |
+- ".s0-X->.s1\n" + |
269 |
+- ".s1-{((a&&c)||(b&&c))}?->:s2=>1\n" + |
270 |
+- ".s1-{c}?->:s3=>2\n"; |
271 |
+- int[] unreachableAlts = null; |
272 |
+- int[] nonDetAlts = null; |
273 |
+- String ambigInput = null; |
274 |
+- int[] insufficientPredAlts = null; |
275 |
+- int[] danglingAlts = null; |
276 |
+- int numWarnings = 0; |
277 |
+- checkDecision(g, 3, expecting, unreachableAlts, |
278 |
+- nonDetAlts, ambigInput, insufficientPredAlts, |
279 |
+- danglingAlts, numWarnings, false); |
280 |
++ try { |
281 |
++ String expecting = |
282 |
++ ".s0-X->.s1\n" + |
283 |
++ ".s1-{((a&&c)||(b&&c))}?->:s2=>1\n" + |
284 |
++ ".s1-{c}?->:s3=>2\n"; |
285 |
++ checkDecision(g, 3, expecting, null, |
286 |
++ null, null, null, |
287 |
++ null, 0, false); |
288 |
++ } catch (org.junit.ComparisonFailure e) { |
289 |
++ String expecting = |
290 |
++ ".s0-X->.s1\n" + |
291 |
++ ".s1-{((b&&c)||(a&&c))}?->:s2=>1\n" + |
292 |
++ ".s1-{c}?->:s3=>2\n"; |
293 |
++ checkDecision(g, 3, expecting, null, |
294 |
++ null, null, null, |
295 |
++ null, 0, false); |
296 |
++ } |
297 |
+ } |
298 |
+ |
299 |
+ @Test |
300 |
+--- tool/src/test/java/org/antlr/test/TestAttributes.java.orig 2015-12-05 13:55:55.392843185 +0000 |
301 |
++++ tool/src/test/java/org/antlr/test/TestAttributes.java 2015-12-05 14:04:38.120599871 +0000 |
302 |
+@@ -439,20 +439,15 @@ |
303 |
+ ErrorManager.setErrorListener(equeue); |
304 |
+ Grammar g = new Grammar( |
305 |
+ "parser grammar t;\n"+ |
306 |
+- "a : x=b {"+action+"} ;\n" + |
307 |
++ "a : x=b {###"+action+"!!!} ;\n" + |
308 |
+ "b : B ;\n"); |
309 |
+ Tool antlr = newTool(); |
310 |
+ CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); |
311 |
+ g.setCodeGenerator(generator); |
312 |
+- generator.genRecognizer(); // forces load of templates |
313 |
+- ActionTranslator translator = new ActionTranslator(generator,"a", |
314 |
+- new antlr.CommonToken(ANTLRParser.ACTION,action),1); |
315 |
+- String rawTranslation = |
316 |
+- translator.translate(); |
317 |
+- StringTemplateGroup templates = |
318 |
+- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); |
319 |
+- StringTemplate actionST = new StringTemplate(templates, rawTranslation); |
320 |
+- String found = actionST.toString(); |
321 |
++ generator.genRecognizer(); // codegen phase sets some vars we need |
322 |
++ StringTemplate codeST = generator.getRecognizerST(); |
323 |
++ String code = codeST.toString(); |
324 |
++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); |
325 |
+ assertEquals(expecting, found); |
326 |
+ |
327 |
+ assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); |
328 |
+@@ -1771,20 +1766,15 @@ |
329 |
+ Grammar g = new Grammar( |
330 |
+ "parser grammar t;\n" + |
331 |
+ "options {output=template;}\n"+ |
332 |
+- "a : {"+action+"}\n" + |
333 |
++ "a : {###"+action+"!!!}\n" + |
334 |
+ " ;\n"); |
335 |
+ Tool antlr = newTool(); |
336 |
+ CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); |
337 |
+ g.setCodeGenerator(generator); |
338 |
+- generator.genRecognizer(); // forces load of templates |
339 |
+- ActionTranslator translator = new ActionTranslator(generator,"a", |
340 |
+- new antlr.CommonToken(ANTLRParser.ACTION,action),1); |
341 |
+- String rawTranslation = |
342 |
+- translator.translate(); |
343 |
+- StringTemplateGroup templates = |
344 |
+- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); |
345 |
+- StringTemplate actionST = new StringTemplate(templates, rawTranslation); |
346 |
+- String found = actionST.toString(); |
347 |
++ generator.genRecognizer(); // codegen phase sets some vars we need |
348 |
++ StringTemplate codeST = generator.getRecognizerST(); |
349 |
++ String code = codeST.toString(); |
350 |
++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); |
351 |
+ assertEquals(expecting, found); |
352 |
+ |
353 |
+ assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); |
354 |
+@@ -1869,35 +1859,21 @@ |
355 |
+ ErrorManager.setErrorListener(equeue); |
356 |
+ Grammar g = new Grammar( |
357 |
+ "grammar t;\n"+ |
358 |
+- "a : b {"+action+"}\n" + |
359 |
+- " | c {"+action2+"}\n" + |
360 |
++ "a : b {###"+action+"!!!}\n" + |
361 |
++ " | c {^^^"+action2+"&&&}\n" + |
362 |
+ " ;\n" + |
363 |
+ "b : 'a';\n" + |
364 |
+ "c : '0';\n"); |
365 |
+ Tool antlr = newTool(); |
366 |
+ CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); |
367 |
+ g.setCodeGenerator(generator); |
368 |
+- generator.genRecognizer(); // forces load of templates |
369 |
+- ActionTranslator translator = new ActionTranslator(generator,"a", |
370 |
+- new antlr.CommonToken(ANTLRParser.ACTION,action),1); |
371 |
+- String rawTranslation = |
372 |
+- translator.translate(); |
373 |
+- StringTemplateGroup templates = |
374 |
+- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); |
375 |
+- StringTemplate actionST = new StringTemplate(templates, rawTranslation); |
376 |
+- String found = actionST.toString(); |
377 |
++ generator.genRecognizer(); // codegen phase sets some vars we need |
378 |
++ StringTemplate codeST = generator.getRecognizerST(); |
379 |
++ String code = codeST.toString(); |
380 |
++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); |
381 |
+ assertEquals(expecting, found); |
382 |
+ |
383 |
+- assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); |
384 |
+- translator = new ActionTranslator(generator, |
385 |
+- "a", |
386 |
+- new antlr.CommonToken(ANTLRParser.ACTION,action2),2); |
387 |
+- rawTranslation = |
388 |
+- translator.translate(); |
389 |
+- templates = |
390 |
+- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); |
391 |
+- actionST = new StringTemplate(templates, rawTranslation); |
392 |
+- found = actionST.toString(); |
393 |
++ found = code.substring(code.indexOf("^^^")+3,code.indexOf("&&&")); |
394 |
+ |
395 |
+ assertEquals(expecting2, found); |
396 |
+ |
397 |
+@@ -3208,7 +3184,7 @@ |
398 |
+ |
399 |
+ @Test public void testAssignToTreeNodeAttribute() throws Exception { |
400 |
+ String action = "$tree.scope = localScope;"; |
401 |
+- String expecting = "(()retval.tree).scope = localScope;"; |
402 |
++ String expecting = "((Object)retval.tree).scope = localScope;"; |
403 |
+ ErrorQueue equeue = new ErrorQueue(); |
404 |
+ ErrorManager.setErrorListener(equeue); |
405 |
+ Grammar g = new Grammar( |
406 |
+@@ -3219,24 +3195,17 @@ |
407 |
+ " Scope localScope=null;\n" + |
408 |
+ "}\n" + |
409 |
+ "@after {\n" + |
410 |
+- " $tree.scope = localScope;\n" + |
411 |
++ " ###$tree.scope = localScope;!!!\n" + |
412 |
+ "}\n" + |
413 |
+ " : 'a' -> ^('a')\n" + |
414 |
+ ";"); |
415 |
+ Tool antlr = newTool(); |
416 |
+ CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); |
417 |
+ g.setCodeGenerator(generator); |
418 |
+- generator.genRecognizer(); // forces load of templates |
419 |
+- ActionTranslator translator = new ActionTranslator(generator, |
420 |
+- "rule", |
421 |
+- new antlr.CommonToken(ANTLRParser.ACTION,action),1); |
422 |
+- String rawTranslation = |
423 |
+- translator.translate(); |
424 |
+- StringTemplateGroup templates = |
425 |
+- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); |
426 |
+- StringTemplate actionST = new StringTemplate(templates, rawTranslation); |
427 |
+- String found = actionST.toString(); |
428 |
+- assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); |
429 |
++ generator.genRecognizer(); // codegen phase sets some vars we need |
430 |
++ StringTemplate codeST = generator.getRecognizerST(); |
431 |
++ String code = codeST.toString(); |
432 |
++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); |
433 |
+ assertEquals(expecting, found); |
434 |
+ } |
435 |
+ |