Skip to content

Commit 5423f47

Browse files
committed
Fix for #1268: GROOVY-10141: store anon. inner class before block visit
1 parent 5640837 commit 5423f47

File tree

6 files changed

+52
-9
lines changed

6 files changed

+52
-9
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/basic/InnerClassTests.java

+27
Original file line numberDiff line numberDiff line change
@@ -1568,6 +1568,33 @@ public void testAnonymousInnerClass31() {
15681568
runConformTest(sources, "1:B;2:B;3:B;");
15691569
}
15701570

1571+
@Test // https://github.com/groovy/groovy-eclipse/issues/1268
1572+
public void testAnonymousInnerClass32() {
1573+
//@formatter:off
1574+
String[] sources = {
1575+
"Script.groovy",
1576+
"class C {\n" +
1577+
" class D {\n" +
1578+
" }\n" +
1579+
" def obj = new Object() {\n" +
1580+
" @Override\n" +
1581+
" String toString() {\n" +
1582+
" return new Object() {\n" +
1583+
" @Override\n" +
1584+
" String toString() {\n" +
1585+
" new D()\n" +
1586+
" }\n" +
1587+
" }\n" +
1588+
" }\n" +
1589+
" }\n" +
1590+
"}\n" +
1591+
"new C().obj\n",
1592+
};
1593+
//@formatter:on
1594+
1595+
runConformTest(sources);
1596+
}
1597+
15711598
@Test
15721599
public void testMixedModeInnerProperties_GRE597() {
15731600
//@formatter:off

base/org.codehaus.groovy25/src/org/codehaus/groovy/antlr/AntlrParserPlugin.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -802,13 +802,17 @@ protected Expression anonymousInnerClassDef(AST node) {
802802
((InnerClassNode) classNode).setAnonymous(true);
803803
classNode.setEnclosingMethod(methodNode);
804804
configureAST(classNode, node);
805-
805+
// GRECLIPSE add
806+
output.addClass(classNode);
807+
// GRECLIPSE end
806808
assertNodeType(OBJBLOCK, node);
807809
objectBlock(node);
808810

809811
AnonymousInnerClassCarrier ret = new AnonymousInnerClassCarrier();
810812
ret.innerClass = classNode;
813+
/* GRECLIPSE edit
811814
output.addClass(classNode);
815+
*/
812816
classNode = oldNode;
813817
return ret;
814818
}

base/org.codehaus.groovy30/src/org/apache/groovy/parser/antlr4/AstBuilder.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -3677,14 +3677,16 @@ public InnerClassNode visitAnonymousInnerClassDeclaration(AnonymousInnerClassDec
36773677
anonymousInnerClass.setAnonymous(true);
36783678
anonymousInnerClass.putNodeMetaData(CLASS_NAME, innerClassName);
36793679
configureAST(anonymousInnerClass, ctx);
3680-
3680+
// GRECLIPSE add
3681+
classNodeList.add(anonymousInnerClass);
3682+
// GRECLIPSE end
36813683
classNodeStack.push(anonymousInnerClass);
36823684
ctx.classBody().putNodeMetaData(CLASS_DECLARATION_CLASS_NODE, anonymousInnerClass);
36833685
this.visitClassBody(ctx.classBody());
36843686
classNodeStack.pop();
3685-
3687+
/* GRECLIPSE edit
36863688
classNodeList.add(anonymousInnerClass);
3687-
3689+
*/
36883690
return anonymousInnerClass;
36893691
}
36903692

base/org.codehaus.groovy30/src/org/codehaus/groovy/antlr/AntlrParserPlugin.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -889,13 +889,17 @@ protected Expression anonymousInnerClassDef(AST node) {
889889
((InnerClassNode) classNode).setAnonymous(true);
890890
classNode.setEnclosingMethod(methodNode);
891891
configureAST(classNode, node);
892-
892+
// GRECLIPSE add
893+
output.addClass(classNode);
894+
// GRECLIPSE end
893895
assertNodeType(OBJBLOCK, node);
894896
objectBlock(node);
895897

896898
AnonymousInnerClassCarrier ret = new AnonymousInnerClassCarrier();
897899
ret.innerClass = classNode;
900+
/* GRECLIPSE edit
898901
output.addClass(classNode);
902+
*/
899903
classNode = oldNode;
900904
return ret;
901905
}

base/org.codehaus.groovy40/src/org/apache/groovy/parser/antlr4/AstBuilder.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -3533,14 +3533,16 @@ public InnerClassNode visitAnonymousInnerClassDeclaration(final AnonymousInnerCl
35333533
anonymousInnerClass.setAnonymous(true);
35343534
anonymousInnerClass.putNodeMetaData(CLASS_NAME, innerClassName);
35353535
configureAST(anonymousInnerClass, ctx);
3536-
3536+
// GRECLIPSE add
3537+
classNodeList.add(anonymousInnerClass);
3538+
// GRECLIPSE end
35373539
classNodeStack.push(anonymousInnerClass);
35383540
ctx.classBody().putNodeMetaData(CLASS_DECLARATION_CLASS_NODE, anonymousInnerClass);
35393541
this.visitClassBody(ctx.classBody());
35403542
classNodeStack.pop();
3541-
3543+
/* GRECLIPSE edit
35423544
classNodeList.add(anonymousInnerClass);
3543-
3545+
*/
35443546
return anonymousInnerClass;
35453547
}
35463548

base/org.codehaus.groovy40/src/org/codehaus/groovy/antlr/AntlrParserPlugin.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -889,13 +889,17 @@ protected Expression anonymousInnerClassDef(AST node) {
889889
((InnerClassNode) classNode).setAnonymous(true);
890890
classNode.setEnclosingMethod(methodNode);
891891
configureAST(classNode, node);
892-
892+
// GRECLIPSE add
893+
output.addClass(classNode);
894+
// GRECLIPSE end
893895
assertNodeType(OBJBLOCK, node);
894896
objectBlock(node);
895897

896898
AnonymousInnerClassCarrier ret = new AnonymousInnerClassCarrier();
897899
ret.innerClass = classNode;
900+
/* GRECLIPSE edit
898901
output.addClass(classNode);
902+
*/
899903
classNode = oldNode;
900904
return ret;
901905
}

0 commit comments

Comments
 (0)