Skip to content

Commit 81aa7e3

Browse files
committed
GROOVY-3421
1 parent 52bd186 commit 81aa7e3

File tree

11 files changed

+2299
-28
lines changed

11 files changed

+2299
-28
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.builder/src/org/eclipse/jdt/core/groovy/tests/search/GenericInferencingTests.java

+12-4
Original file line numberDiff line numberDiff line change
@@ -404,14 +404,22 @@ public void testMap16() {
404404

405405
@Test
406406
public void testMap17() {
407+
String contents =
408+
"def xxx = [*:[1:true]]\n";
409+
410+
assertType(contents, "xxx", "java.util.Map<java.lang.Integer,java.lang.Boolean>");
411+
}
412+
413+
@Test
414+
public void testMap18() {
407415
String contents =
408416
"def xxx = ['item'].collectEntries {str -> /*...*/}\n";
409417

410418
assertType(contents, "xxx", "java.util.Map<java.lang.Object,java.lang.Object>");
411419
}
412420

413421
@Test
414-
public void testMap18() {
422+
public void testMap19() {
415423
String contents =
416424
"def map = [key:'val']\n" +
417425
"map.getAt('key').toUpperCase()\n" +
@@ -444,7 +452,7 @@ public void testMap18() {
444452
}
445453

446454
@Test
447-
public void testMap19() {
455+
public void testMap20() {
448456
String contents =
449457
"import groovy.transform.stc.*\n" +
450458
"def map = [key:'val']\n" +
@@ -499,7 +507,7 @@ public void testMap19() {
499507
}
500508

501509
@Test // methods and property resolution differs
502-
public void testMap20() {
510+
public void testMap21() {
503511
String contents =
504512
"def map = [foo:'bar']\n" +
505513
"map.getMetaClass()\n" +
@@ -544,7 +552,7 @@ public void testMap20() {
544552
}
545553

546554
@Test
547-
public void testMap21() {
555+
public void testMap22() {
548556
String contents =
549557
"LinkedHashMap<String,String> map = [foo:'bar']\n" +
550558
"def put = map.&put\n" +

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

+15-2
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ public void testModuleInfo() {
594594

595595
"module-info.java",
596596
"module test.project {\n" +
597-
"}",
597+
"}\n",
598598
};
599599
//@formatter:on
600600

@@ -614,13 +614,26 @@ public void testMultiCatch() {
614614
" }\n" +
615615
" }\n" +
616616
" public static void foo() throws IOException { print 'foo' }\n" +
617-
"}",
617+
"}\n",
618618
};
619619
//@formatter:on
620620

621621
runConformTest(sources, "foo");
622622
}
623623

624+
@Test // GROOVY-3421
625+
public void testSpreadMap() {
626+
//@formatter:off
627+
String[] sources = {
628+
"Script.groovy",
629+
"int i = 1\n" +
630+
"print([a:i, *:[b:++i]])\n",
631+
};
632+
//@formatter:on
633+
634+
runConformTest(sources, "[a:1, b:2]");
635+
}
636+
624637
@Test
625638
public void testGreclipse719() {
626639
//@formatter:off

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

-3
Original file line numberDiff line numberDiff line change
@@ -2619,9 +2619,6 @@ protected Expression spreadMapExpression(AST node) {
26192619
Expression expr = expression(exprNode);
26202620
SpreadMapExpression spreadMapExpression = new SpreadMapExpression(expr);
26212621
configureAST(spreadMapExpression, node);
2622-
// GRECLIPSE add -- sloc for node only covers the operator; must include the expression
2623-
setSourceEnd(spreadMapExpression, expr);
2624-
// GRECLIPSE end
26252622
return spreadMapExpression;
26262623
}
26272624

base/org.codehaus.groovy25/src/org/codehaus/groovy/classgen/AsmClassGenerator.java

+5
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,7 @@ public void visitSpreadExpression(SpreadExpression expression) {
786786
}
787787

788788
public void visitSpreadMapExpression(SpreadMapExpression expression) {
789+
/* GRECLIPSE edit -- GROOVY-3421 (take 2)
789790
Expression subExpression = expression.getExpression();
790791
// to not record the underlying MapExpression twice,
791792
// we disable the assertion tracker
@@ -795,6 +796,10 @@ public void visitSpreadMapExpression(SpreadMapExpression expression) {
795796
controller.getOperandStack().box();
796797
spreadMap.call(controller.getMethodVisitor());
797798
controller.getAssertionWriter().reenableTracker();
799+
*/
800+
callX(ClassHelper.make(java.util.Collections.class), "emptyMap").visit(this);
801+
spreadMap.call(controller.getMethodVisitor());
802+
// GRECLIPSE end
798803
controller.getOperandStack().replace(ClassHelper.OBJECT_TYPE);
799804
}
800805

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

-3
Original file line numberDiff line numberDiff line change
@@ -2683,9 +2683,6 @@ protected Expression spreadMapExpression(AST node) {
26832683
Expression expr = expression(exprNode);
26842684
SpreadMapExpression spreadMapExpression = new SpreadMapExpression(expr);
26852685
configureAST(spreadMapExpression, node);
2686-
// GRECLIPSE add -- sloc for node only covers the operator; must include the expression
2687-
setSourceEnd(spreadMapExpression, expr);
2688-
// GRECLIPSE end
26892686
return spreadMapExpression;
26902687
}
26912688

base/org.codehaus.groovy30/src/org/codehaus/groovy/classgen/AsmClassGenerator.java

+5
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,7 @@ public void visitSpreadExpression(final SpreadExpression expression) {
769769

770770
@Override
771771
public void visitSpreadMapExpression(final SpreadMapExpression expression) {
772+
/* GRECLIPSE edit -- GROOVY-3421 (take 2)
772773
Expression subExpression = expression.getExpression();
773774
// to not record the underlying MapExpression twice,
774775
// we disable the assertion tracker
@@ -778,6 +779,10 @@ public void visitSpreadMapExpression(final SpreadMapExpression expression) {
778779
controller.getOperandStack().box();
779780
spreadMap.call(controller.getMethodVisitor());
780781
controller.getAssertionWriter().reenableTracker();
782+
*/
783+
callX(ClassHelper.make(java.util.Collections.class), "emptyMap").visit(this);
784+
spreadMap.call(controller.getMethodVisitor());
785+
// GRECLIPSE end
781786
controller.getOperandStack().replace(ClassHelper.OBJECT_TYPE);
782787
}
783788

base/org.codehaus.groovy40/.checkstyle

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
<file-match-pattern match-pattern="groovy/ast/tools/(Expression|Generics)Utils.java" include-pattern="false" />
3939
<file-match-pattern match-pattern="groovy/ast/tools/WideningCategories.java" include-pattern="false" />
4040
<file-match-pattern match-pattern="groovy/classgen/(Annotation|Enum|VariableScope)Visitor.java" include-pattern="false" />
41+
<file-match-pattern match-pattern="groovy/classgen/AsmClassGenerator.java" include-pattern="false" />
4142
<file-match-pattern match-pattern="groovy/classgen/(Extended)?Verifier.java" include-pattern="false" />
4243
<file-match-pattern match-pattern="groovy/classgen/asm/ClosureWriter.java" include-pattern="false" />
4344
<file-match-pattern match-pattern="groovy/classgen/asm/sc/StaticInvocationWriter.java" include-pattern="false" />

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

-3
Original file line numberDiff line numberDiff line change
@@ -2683,9 +2683,6 @@ protected Expression spreadMapExpression(AST node) {
26832683
Expression expr = expression(exprNode);
26842684
SpreadMapExpression spreadMapExpression = new SpreadMapExpression(expr);
26852685
configureAST(spreadMapExpression, node);
2686-
// GRECLIPSE add -- sloc for node only covers the operator; must include the expression
2687-
setSourceEnd(spreadMapExpression, expr);
2688-
// GRECLIPSE end
26892686
return spreadMapExpression;
26902687
}
26912688

0 commit comments

Comments
 (0)