Skip to content

Commit 1061842

Browse files
committed
Fix for #1360: GROOVY-10624
1 parent 5c87c7b commit 1061842

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

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

+21
Original file line numberDiff line numberDiff line change
@@ -5645,4 +5645,25 @@ public void testTypeChecked10592() {
56455645

56465646
runConformTest(sources, "works", "groovy.lang.MissingPropertyException: No such property: value for class: Face");
56475647
}
5648+
5649+
@Test
5650+
public void testTypeChecked10624() {
5651+
//@formatter:off
5652+
String[] sources = {
5653+
"Main.groovy",
5654+
"class A<T> {\n" +
5655+
"}\n" +
5656+
"class B<T> {\n" +
5657+
" B(A<T> a) { }\n" +
5658+
"}\n" +
5659+
"@groovy.transform.TypeChecked\n" +
5660+
"void test() {\n" +
5661+
" B<Float> x = new B<>(new A<>())\n" + // Cannot assign B<Object> to B<Float>
5662+
"}\n" +
5663+
"test()\n",
5664+
};
5665+
//@formatter:on
5666+
5667+
runConformTest(sources);
5668+
}
56485669
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -2806,7 +2806,7 @@ && findMethod(receiver, "<init>", init(argumentTypes)).size() == 1) {
28062806
&& parameters.length == argumentTypes.length - 1) {
28072807
ctor = typeCheckMapConstructor(call, receiver, arguments);
28082808
} else {
2809-
if (parameters.length > 0 && receiver.getGenericsTypes() != null) { // GROOVY-8961, GROOVY-9734, GROOVY-9915, GROOVY-10482, et al.
2809+
if (parameters.length > 0 && asBoolean(receiver.getGenericsTypes())) { // GROOVY-10283, GROOVY-10316, GROOVY-10482, GROOVY-10624, et al.
28102810
Map<GenericsTypeName, GenericsType> context = extractPlaceHolders(null, receiver, ctor.getDeclaringClass());
28112811
parameters = parameters.clone(); for (int i = 0; i < parameters.length; i += 1)
28122812
parameters[i] = new Parameter(applyGenericsContext(context, parameters[i].getType()), parameters[i].getName());

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@
212212
import static org.codehaus.groovy.ast.tools.WideningCategories.isNumberCategory;
213213
import static org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound;
214214
import static org.codehaus.groovy.classgen.AsmClassGenerator.MINIMUM_BYTECODE_VERSION;
215+
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
215216
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.init;
216217
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
217218
import static org.codehaus.groovy.syntax.Types.ASSIGN;
@@ -2636,7 +2637,7 @@ && findMethod(receiver, "<init>", init(argumentTypes)).size() == 1) {
26362637
&& parameters.length == argumentTypes.length - 1) {
26372638
ctor = typeCheckMapConstructor(call, receiver, arguments);
26382639
} else {
2639-
if (receiver.getGenericsTypes() != null) { // GROOVY-8961, GROOVY-9734, GROOVY-9915, GROOVY-10482, et al.
2640+
if (asBoolean(receiver.getGenericsTypes())) { // GROOVY-10283, GROOVY-10316, GROOVY-10482, GROOVY-10624, et al.
26402641
Map<GenericsTypeName, GenericsType> context = extractPlaceHolders(null, receiver, ctor.getDeclaringClass());
26412642
parameters = Arrays.stream(parameters).map(p -> new Parameter(applyGenericsContext(context, p.getType()), p.getName())).toArray(Parameter[]::new);
26422643
}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@
231231
import static org.codehaus.groovy.ast.tools.WideningCategories.isLongCategory;
232232
import static org.codehaus.groovy.ast.tools.WideningCategories.isNumberCategory;
233233
import static org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound;
234+
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
234235
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.init;
235236
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
236237
import static org.codehaus.groovy.syntax.Types.ASSIGN;
@@ -2319,7 +2320,7 @@ && findMethod(receiver, "<init>", init(argumentTypes)).size() == 1) {
23192320
&& parameters.length == argumentTypes.length - 1) {
23202321
ctor = typeCheckMapConstructor(call, receiver, arguments);
23212322
} else {
2322-
if (receiver.getGenericsTypes() != null) { // GROOVY-8909, GROOVY-9734, GROOVY-9844, GROOVY-9915, GROOVY-10482, et al.
2323+
if (asBoolean(receiver.getGenericsTypes())) { // GROOVY-10283, GROOVY-10316, GROOVY-10482, GROOVY-10624, et al.
23232324
Map<GenericsTypeName, GenericsType> context = extractPlaceHoldersVisibleToDeclaration(receiver, ctor, argumentList);
23242325
parameters = Arrays.stream(parameters).map(p -> new Parameter(applyGenericsContext(context, p.getType()), p.getName())).toArray(Parameter[]::new);
23252326
}

0 commit comments

Comments
 (0)