Skip to content

Commit f95dabb

Browse files
committed
GROOVY-11057
1 parent 98135b3 commit f95dabb

8 files changed

Lines changed: 2501 additions & 50 deletions

File tree

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/StaticCompilationTests.java

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,7 @@ public void testCompileStatic1() {
6969
"1. ERROR in Main.groovy (at line 5)\n" +
7070
"\tls.add('abc')\n" +
7171
"\t^^^^^^^^^^^^^\n" +
72-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
73-
? "call java.util.ArrayList#add(java.lang.Integer) with arguments [java.lang.String]\n"
74-
: "find matching method java.util.ArrayList#add(java.lang.String). Please check if the declared type is correct and if the method exists.\n"
75-
) +
72+
"Groovy:[Static type checking] - Cannot call java.util.ArrayList#add(java.lang.Integer) with arguments [java.lang.String]\n" +
7673
"----------\n");
7774
}
7875

@@ -1359,17 +1356,13 @@ public void testCompileStatic7204() {
13591356
};
13601357
//@formatter:on
13611358

1362-
if (!isAtLeastGroovy(50)) {
1363-
runConformTest(sources);
1364-
} else {
1365-
runNegativeTest(sources,
1366-
"----------\n" +
1367-
"1. ERROR in Main.groovy (at line 8)\n" +
1368-
"\tr.delete('foo')\n" +
1369-
"\t^^^^^^^^^^^^^^^\n" +
1370-
"Groovy:[Static type checking] - Cannot call Repository#delete(java.lang.Long) with arguments [java.lang.String]\n" +
1371-
"----------\n");
1372-
}
1359+
runNegativeTest(sources,
1360+
"----------\n" +
1361+
"1. ERROR in Main.groovy (at line 8)\n" +
1362+
"\tr.delete('foo')\n" +
1363+
"\t^^^^^^^^^^^^^^^\n" +
1364+
"Groovy:[Static type checking] - Cannot call Repository#delete(java.lang.Long) with arguments [java.lang.String]\n" +
1365+
"----------\n");
13731366
}
13741367

13751368
@Test
@@ -3007,10 +3000,7 @@ public void testCompileStatic8609c() {
30073000
"1. ERROR in A.groovy (at line 11)\n" +
30083001
"\tassert record.is(a.getFirstRecord(list))\n" +
30093002
"\t ^^^^^^^^^^^^^^^^^^^^^^\n" +
3010-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
3011-
? "call A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Integer>>) with arguments [java.util.ArrayList<java.util.TreeMap<java.lang.String, java.lang.Integer>>]\n"
3012-
: "find matching method A#getFirstRecord(java.util.ArrayList<java.util.TreeMap<java.lang.String, java.lang.Integer>>). Please check if the declared type is correct and if the method exists.\n"
3013-
) +
3003+
"Groovy:[Static type checking] - Cannot call A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Integer>>) with arguments [java.util.ArrayList<java.util.TreeMap<java.lang.String, java.lang.Integer>>]\n" +
30143004
"----------\n");
30153005
}
30163006

@@ -3040,10 +3030,7 @@ public void testCompileStatic8609d() {
30403030
"1. ERROR in A.groovy (at line 11)\n" +
30413031
"\tassert record.is(a.getFirstRecord(list))\n" +
30423032
"\t ^^^^^^^^^^^^^^^^^^^^^^\n" +
3043-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
3044-
? "call A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Integer>>) with arguments [java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Long>>]\n"
3045-
: "find matching method A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Long>>). Please check if the declared type is correct and if the method exists.\n"
3046-
) +
3033+
"Groovy:[Static type checking] - Cannot call A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Integer>>) with arguments [java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Long>>]\n" +
30473034
"----------\n");
30483035
}
30493036

@@ -3073,10 +3060,7 @@ public void testCompileStatic8609e() {
30733060
"1. ERROR in A.groovy (at line 11)\n" +
30743061
"\tassert record.is(a.getFirstRecord(list))\n" +
30753062
"\t ^^^^^^^^^^^^^^^^^^^^^^\n" +
3076-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
3077-
? "call A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Integer>>) with arguments [java.util.ArrayList<java.util.HashMap<java.lang.StringBuffer, java.lang.Integer>>]\n"
3078-
: "find matching method A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.StringBuffer, java.lang.Integer>>). Please check if the declared type is correct and if the method exists.\n"
3079-
) +
3063+
"Groovy:[Static type checking] - Cannot call A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Integer>>) with arguments [java.util.ArrayList<java.util.HashMap<java.lang.StringBuffer, java.lang.Integer>>]\n" +
30803064
"----------\n");
30813065
}
30823066

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/TypeCheckedTests.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,7 @@ public void testTypeChecked2() {
7979
"1. ERROR in Main.groovy (at line 5)\n" +
8080
"\tints.add(\'abc\')\n" +
8181
"\t^^^^^^^^^^^^^^^\n" +
82-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
83-
? "call java.util.ArrayList#add(java.lang.Integer) with arguments [java.lang.String]\n"
84-
: "find matching method java.util.ArrayList#add(java.lang.String). Please check if the declared type is correct and if the method exists.\n"
85-
) +
82+
"Groovy:[Static type checking] - Cannot call java.util.ArrayList#add(java.lang.Integer) with arguments [java.lang.String]\n" +
8683
"----------\n" +
8784
"2. ERROR in Main.groovy (at line 6)\n" +
8885
"\tints << 'def'\n" +
@@ -3149,18 +3146,12 @@ public void testTypeChecked9902() {
31493146
"2. ERROR in Main.groovy (at line 21)\n" +
31503147
"\tstringProperty.eq(1234)\n" +
31513148
"\t^^^^^^^^^^^^^^^^^^^^^^^\n" +
3152-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
3153-
? "call TypedProperty#eq(java.lang.String) with arguments [int]\n"
3154-
: "find matching method TypedProperty#eq(int). Please check if the declared type is correct and if the method exists.\n"
3155-
) +
3149+
"Groovy:[Static type checking] - Cannot call TypedProperty#eq(java.lang.String) with arguments [int]\n" +
31563150
"----------\n" +
31573151
"3. ERROR in Main.groovy (at line 22)\n" +
31583152
"\tnumberProperty.eq('xx')\n" +
31593153
"\t^^^^^^^^^^^^^^^^^^^^^^^\n" +
3160-
"Groovy:[Static type checking] - Cannot " + (isAtLeastGroovy(50)
3161-
? "call TypedProperty#eq(java.lang.Number) with arguments [java.lang.String]\n"
3162-
: "find matching method TypedProperty#eq(java.lang.String). Please check if the declared type is correct and if the method exists.\n"
3163-
) +
3154+
"Groovy:[Static type checking] - Cannot call TypedProperty#eq(java.lang.Number) with arguments [java.lang.String]\n" +
31643155
"----------\n");
31653156
}
31663157

base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,7 @@ private static int getExtensionDistance(final boolean isExtensionMethodNode) {
11911191
}
11921192

11931193
private static Parameter[] makeRawTypes(final Parameter[] parameters, final Map<GenericsType, GenericsType> genericsPlaceholderAndTypeMap) {
1194+
/* GRECLIPSE edit -- GROOVY-11057
11941195
return Arrays.stream(parameters).map(param -> {
11951196
String name = param.getType().getUnresolvedName();
11961197
Optional<GenericsType> value = genericsPlaceholderAndTypeMap.entrySet().stream()
@@ -1199,17 +1200,29 @@ private static Parameter[] makeRawTypes(final Parameter[] parameters, final Map<
11991200
12001201
return new Parameter(type, param.getName());
12011202
}).toArray(Parameter[]::new);
1203+
*/
1204+
Parameter[] params = parameters;
1205+
int nParameters = params.length;
1206+
if (nParameters > 0) { params= params.clone();
1207+
for (int i = 0; i < nParameters; i += 1) {
1208+
ClassNode t = params[i].getOriginType();
1209+
if (t.isGenericsPlaceHolder() || isUsingGenericsOrIsArrayUsingGenerics(t))
1210+
params[i] = new Parameter(GenericsUtils.nonGeneric(t), params[i].getName());
1211+
}
1212+
}
1213+
return params;
1214+
// GRECLIPSE end
12021215
}
12031216

1204-
private static ClassNode makeRawType(final ClassNode receiver) {
1217+
/*private static ClassNode makeRawType(final ClassNode receiver) {
12051218
if (receiver.isArray()) {
12061219
return makeRawType(receiver.getComponentType()).makeArray();
12071220
}
12081221
ClassNode raw = receiver.getPlainNodeReference();
12091222
raw.setUsingGenerics(false);
12101223
raw.setGenericsTypes(null);
12111224
return raw;
1212-
}
1225+
}*/
12131226

12141227
private static List<MethodNode> removeCovariantsAndInterfaceEquivalents(final Collection<MethodNode> collection) {
12151228
List<MethodNode> list = new ArrayList<>(new LinkedHashSet<>(collection)), toBeRemoved = new ArrayList<>();

base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5969,14 +5969,14 @@ private Map<GenericsTypeName, GenericsType> extractGenericsConnectionsFromArgume
59695969
for (GenericsType gt : methodGenericTypes) {
59705970
// GROOVY-8409, GROOVY-10067, et al.: provide "no type witness" mapping for param
59715971
resolvedPlaceholders.computeIfAbsent(new GenericsTypeName(gt.getName()), gtn -> {
5972-
GenericsType xxx = new GenericsType(ClassHelper.makeWithoutCaching("#"),
5973-
applyGenericsContext(resolvedPlaceholders, gt.getUpperBounds()),
5974-
applyGenericsContext(resolvedPlaceholders, gt.getLowerBound()));
5975-
xxx.getType().setRedirect(gt.getType().redirect());
5976-
xxx.putNodeMetaData(GenericsType.class, gt);
5977-
xxx.setName("#" + gt.getName());
5978-
xxx.setPlaceholder(true);
5979-
return xxx;
5972+
ClassNode hash = ClassHelper.makeWithoutCaching("#" + gt.getName());
5973+
hash.setRedirect(getCombinedBoundType(gt));
5974+
hash.setGenericsPlaceHolder(true);
5975+
5976+
GenericsType gtx = new GenericsType(hash, applyGenericsContext(resolvedPlaceholders, gt.getUpperBounds()), null);
5977+
gtx.putNodeMetaData(GenericsType.class, gt);
5978+
gtx.setResolved(true);
5979+
return gtx;
59805980
});
59815981
}
59825982

base/org.codehaus.groovy40/.checkstyle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
<file-match-pattern match-pattern="groovy/transform/ASTTransformationVisitor.java" include-pattern="false" />
5656
<file-match-pattern match-pattern="groovy/transform/(Category|Field|Log|TupleConstructor)ASTTransformation.java" include-pattern="false" />
5757
<file-match-pattern match-pattern="groovy/transform/sc/transformers/(Binary|MethodCall|Property|Variable)ExpressionTransformer.java" include-pattern="false" />
58-
<file-match-pattern match-pattern="groovy/transform/stc/StaticTypeCheckingVisitor.java" include-pattern="false" />
58+
<file-match-pattern match-pattern="groovy/transform/stc/StaticTypeChecking(Support|Visitor).java" include-pattern="false" />
5959
<file-match-pattern match-pattern="groovy/transform/trait/SuperCallTraitTransformer.java" include-pattern="false" />
6060
<file-match-pattern match-pattern="groovy/transform/trait/TraitASTTransformation.java" include-pattern="false" />
6161
<file-match-pattern match-pattern="groovy/transform/trait/TraitComposer.java" include-pattern="false" />

0 commit comments

Comments
 (0)