Skip to content

Commit 06f7e59

Browse files
committed
GROOVY-9970
1 parent a7a9911 commit 06f7e59

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

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

+28
Original file line numberDiff line numberDiff line change
@@ -1115,4 +1115,32 @@ public void testTypeChecked9968() {
11151115

11161116
runConformTest(sources, "[x, y, z][x, y, z]");
11171117
}
1118+
1119+
@Test
1120+
public void testTypeChecked9970() {
1121+
//@formatter:off
1122+
String[] sources = {
1123+
"Main.groovy",
1124+
"@groovy.transform.TupleConstructor\n" +
1125+
"class A<T extends B> {\n" +
1126+
" T p\n" +
1127+
"}\n" +
1128+
"class B {\n" +
1129+
"}\n" +
1130+
"@groovy.transform.TypeChecked\n" +
1131+
"class C<T extends Number> {\n" +
1132+
" void test(T n) {\n" +
1133+
" A<B> x = new A<>(new B())\n" +
1134+
" def closure = { ->\n" +
1135+
" A<B> y = new A<>(new B())\n" +
1136+
" }\n" +
1137+
" closure.call()\n" +
1138+
" }\n" +
1139+
"}\n" +
1140+
"new C<Long>().test(42L)\n",
1141+
};
1142+
//@formatter:on
1143+
1144+
runConformTest(sources, "");
1145+
}
11181146
}

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

+5-9
Original file line numberDiff line numberDiff line change
@@ -5518,13 +5518,10 @@ protected ClassNode inferReturnTypeGenerics(
55185518
if (resolvedPlaceholders.isEmpty()) {
55195519
return boundUnboundedWildcards(returnType);
55205520
}
5521-
/* GRECLIPSE edit -- GROOVY-9570
5521+
/* GRECLIPSE edit -- GROOVY-9570, GROOVY-9735, GROOVY-9970
55225522
Map<GenericsTypeName, GenericsType> placeholdersFromContext = extractGenericsParameterMapOfThis(typeCheckingContext.getEnclosingMethod());
5523-
*/
5524-
Map<GenericsTypeName, GenericsType> placeholdersFromContext = extractGenericsParameterMapOfThis(typeCheckingContext);
5525-
// GRECLIPSE end
55265523
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5527-
5524+
*/
55285525
// then resolve receivers from method arguments
55295526
Parameter[] parameters = method.getParameters();
55305527
boolean isVargs = isVargs(parameters);
@@ -5570,13 +5567,12 @@ protected ClassNode inferReturnTypeGenerics(
55705567
extractGenericsConnections(connections, actualType, type);
55715568
extractGenericsConnectionsForSuperClassAndInterfaces(resolvedPlaceholders, connections);
55725569
applyGenericsConnections(connections, resolvedPlaceholders);
5573-
// GRECLIPSE add -- GROOVY-9735
5574-
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5575-
// GRECLIPSE end
55765570
}
55775571
}
55785572
}
5579-
5573+
// GRECLIPSE add -- GROOVY-9570, GROOVY-9735, GROOVY-9970
5574+
applyGenericsConnections(extractGenericsParameterMapOfThis(typeCheckingContext), resolvedPlaceholders);
5575+
// GRECLIPSE end
55805576
return applyGenericsContext(resolvedPlaceholders, returnType);
55815577
}
55825578

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -5298,8 +5298,9 @@ protected ClassNode inferReturnTypeGenerics(final ClassNode receiver, final Meth
52985298
return boundUnboundedWildcards(returnType);
52995299
}
53005300
Map<GenericsTypeName, GenericsType> placeholdersFromContext = extractGenericsParameterMapOfThis(typeCheckingContext);
5301+
/* GRECLIPSE edit -- GROOVY-9970
53015302
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5302-
5303+
*/
53035304
// then resolve receivers from method arguments
53045305
List<Expression> expressions = InvocationWriter.makeArgumentList(arguments).getExpressions();
53055306
Parameter[] parameters = method.getParameters();
@@ -5344,11 +5345,15 @@ protected ClassNode inferReturnTypeGenerics(final ClassNode receiver, final Meth
53445345
extractGenericsConnectionsForSuperClassAndInterfaces(resolvedPlaceholders, connections);
53455346

53465347
applyGenericsConnections(connections, resolvedPlaceholders);
5348+
/* GRECLIPSE edit -- GROOVY-9970
53475349
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5350+
*/
53485351
}
53495352
}
53505353
}
5351-
5354+
// GRECLIPSE add -- GROOVY-9970
5355+
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5356+
// GRECLIPSE end
53525357
return applyGenericsContext(resolvedPlaceholders, returnType);
53535358
}
53545359

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -5264,8 +5264,9 @@ protected ClassNode inferReturnTypeGenerics(final ClassNode receiver, final Meth
52645264
return boundUnboundedWildcards(returnType);
52655265
}
52665266
Map<GenericsTypeName, GenericsType> placeholdersFromContext = extractGenericsParameterMapOfThis(typeCheckingContext);
5267+
/* GRECLIPSE edit -- GROOVY-9970
52675268
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5268-
5269+
*/
52695270
// then resolve receivers from method arguments
52705271
List<Expression> expressions = InvocationWriter.makeArgumentList(arguments).getExpressions();
52715272
Parameter[] parameters = method.getParameters();
@@ -5302,11 +5303,15 @@ protected ClassNode inferReturnTypeGenerics(final ClassNode receiver, final Meth
53025303
extractGenericsConnectionsForSuperClassAndInterfaces(resolvedPlaceholders, connections);
53035304

53045305
applyGenericsConnections(connections, resolvedPlaceholders);
5306+
/* GRECLIPSE edit -- GROOVY-9970
53055307
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5308+
*/
53065309
}
53075310
}
53085311
}
5309-
5312+
// GRECLIPSE add -- GROOVY-9970
5313+
applyGenericsConnections(placeholdersFromContext, resolvedPlaceholders);
5314+
// GRECLIPSE end
53105315
return applyGenericsContext(resolvedPlaceholders, returnType);
53115316
}
53125317

0 commit comments

Comments
 (0)