Gentoo Archives: gentoo-commits

From: James Le Cuirot <chewi@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-java/antlr/files/, dev-java/antlr/
Date: Sat, 05 Dec 2015 17:24:40
Message-Id: 1449336243.0029d15a96b5777f12503e7298a92bccfc8571ff.chewi@gentoo
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 +