Skip to content

Commit

Permalink
GROOVY-8034
Browse files Browse the repository at this point in the history
  • Loading branch information
eric-milles committed Mar 26, 2021
1 parent 202b94e commit 8a5c8ff
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,41 @@ public void testTypeChecked7945() {
"----------\n");
}

@Test
public void testTypeChecked8034() {
//@formatter:off
String[] sources = {
"Test.groovy",
"class A<I, O> {\n" +
" def <IO extends A<? super O, ?>> IO andThen(IO next) {\n" +
" next\n" +
" }\n" +
"}\n" +
"@groovy.transform.TypeChecked\n" +
"void test() {\n" +
" def a1 = new A<String , Integer>()\n" +
" def a2 = new A<Integer, Double >()\n" +
" def a3 = new A<Double , String >()\n" +
" def a4 = new A<String , Double >()\n" +
" def a5 = new A<Number , Object >()\n" +
" \n" +
" a1.andThen(a2)\n" +
" a2.andThen(a3)\n" +
" a3.andThen(a4)\n" +
" a4.andThen(a5)\n" +
" \n" +
" a1.andThen(a2)\n" +
" .andThen(a3)\n" +
" .andThen(a4)\n" +
" .andThen(a5)\n" +
"}\n" +
"test()\n",
};
//@formatter:on

runNegativeTest(sources, "");
}

@Test
public void testTypeChecked8103() {
//@formatter:off
Expand Down Expand Up @@ -468,7 +503,7 @@ public void testTypeChecked8103() {
" Ours isSimilarTo(String json) { return this }\n" +
" }\n" +
" static Ours factory(String json) { new Ours() }\n" +
"}",
"}\n",
};
//@formatter:on

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1456,9 +1456,18 @@ protected static boolean typeCheckMethodArgumentWithGenerics(ClassNode parameter
}

static void addMethodLevelDeclaredGenerics(MethodNode method, Map<GenericsTypeName, GenericsType> resolvedPlaceholders) {
/* GRECLIPSE edit
ClassNode dummy = OBJECT_TYPE.getPlainNodeReference();
dummy.setGenericsTypes(method.getGenericsTypes());
GenericsUtils.extractPlaceholders(dummy, resolvedPlaceholders);
*/
GenericsType[] generics = method.getGenericsTypes();
if (!method.isStatic() && !resolvedPlaceholders.isEmpty()) {
// GROOVY-8034: non-static method may use class generics
generics = applyGenericsContext(resolvedPlaceholders, generics);
}
GenericsUtils.extractPlaceholders(GenericsUtils.makeClassSafe0(OBJECT_TYPE, generics), resolvedPlaceholders);
// GRECLIPSE end
}

protected static boolean typeCheckMethodsWithGenerics(ClassNode receiver, ClassNode[] arguments, MethodNode candidateMethod) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1387,9 +1387,18 @@ protected static boolean typeCheckMethodArgumentWithGenerics(final ClassNode par
}

static void addMethodLevelDeclaredGenerics(final MethodNode method, final Map<GenericsTypeName, GenericsType> resolvedPlaceholders) {
/* GRECLIPSE edit
ClassNode dummy = OBJECT_TYPE.getPlainNodeReference();
dummy.setGenericsTypes(method.getGenericsTypes());
GenericsUtils.extractPlaceholders(dummy, resolvedPlaceholders);
*/
GenericsType[] generics = method.getGenericsTypes();
if (!method.isStatic() && !resolvedPlaceholders.isEmpty()) {
// GROOVY-8034: non-static method may use class generics
generics = applyGenericsContext(resolvedPlaceholders, generics);
}
GenericsUtils.extractPlaceholders(GenericsUtils.makeClassSafe0(OBJECT_TYPE, generics), resolvedPlaceholders);
// GRECLIPSE end
}

protected static boolean typeCheckMethodsWithGenerics(final ClassNode receiver, final ClassNode[] argumentTypes, final MethodNode candidateMethod) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1386,7 +1386,16 @@ protected static boolean typeCheckMethodArgumentWithGenerics(final ClassNode par
}

static void addMethodLevelDeclaredGenerics(final MethodNode method, final Map<GenericsTypeName, GenericsType> placeholders) {
/* GRECLIPSE edit
ClassNode dummy = GenericsUtils.makeClassSafe0(OBJECT_TYPE, method.getGenericsTypes());
*/
GenericsType[] generics = method.getGenericsTypes();
if (!method.isStatic() && !placeholders.isEmpty()) {
// GROOVY-8034: non-static method may use class generics
generics = applyGenericsContext(placeholders, generics);
}
ClassNode dummy = GenericsUtils.makeClassSafe0(OBJECT_TYPE, generics);
// GRECLIPSE end
GenericsUtils.extractPlaceholders(dummy, placeholders);
}

Expand Down

0 comments on commit 8a5c8ff

Please sign in to comment.