Skip to content

Commit 26b4c8e

Browse files
committed
GROOVY-9968
1 parent e6dfebc commit 26b4c8e

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

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

+25
Original file line numberDiff line numberDiff line change
@@ -1090,4 +1090,29 @@ public void testTypeChecked9963() {
10901090

10911091
runConformTest(sources, "x");
10921092
}
1093+
1094+
@Test
1095+
public void testTypeChecked9968() {
1096+
//@formatter:off
1097+
String[] sources = {
1098+
"Main.groovy",
1099+
"import groovy.transform.*\n" +
1100+
"@Canonical class Pogo { String prop }\n" +
1101+
"@Canonical class IterableType<T extends Pogo> implements Iterable<T> {\n" +
1102+
" Iterator<T> iterator() {\n" +
1103+
" list.iterator()\n" +
1104+
" }\n" +
1105+
" List<T> list\n" +
1106+
"}\n" +
1107+
"@TypeChecked void test() {\n" +
1108+
" def iterable = new IterableType([new Pogo('x'), new Pogo('y'), new Pogo('z')])\n" +
1109+
" print iterable.collect { Pogo p -> p.prop }\n" +
1110+
" print iterable.collect { it.prop }\n" +
1111+
"}\n" +
1112+
"test()\n",
1113+
};
1114+
//@formatter:on
1115+
1116+
runConformTest(sources, "[x, y, z][x, y, z]");
1117+
}
10931118
}

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

+5
Original file line numberDiff line numberDiff line change
@@ -3397,6 +3397,11 @@ private ClassNode[] resolveGenericsFromTypeHint(final ClassNode receiver, final
33973397
private static ClassNode createUsableClassNodeFromGenericsType(final GenericsType genericsType) {
33983398
ClassNode value = genericsType.getType();
33993399
if (genericsType.isPlaceholder()) {
3400+
// GRECLIPSE add -- GROOVY-9968
3401+
if (value.isRedirectNode())
3402+
value = value.redirect();
3403+
else
3404+
// GRECLIPSE end
34003405
value = OBJECT_TYPE;
34013406
}
34023407
ClassNode lowerBound = genericsType.getLowerBound();

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

+5
Original file line numberDiff line numberDiff line change
@@ -3210,6 +3210,11 @@ private ClassNode[] resolveGenericsFromTypeHint(final ClassNode receiver, final
32103210
private static ClassNode createUsableClassNodeFromGenericsType(final GenericsType genericsType) {
32113211
ClassNode value = genericsType.getType();
32123212
if (genericsType.isPlaceholder()) {
3213+
// GRECLIPSE add -- GROOVY-9968
3214+
if (value.isRedirectNode())
3215+
value = value.redirect();
3216+
else
3217+
// GRECLIPSE end
32133218
value = OBJECT_TYPE;
32143219
}
32153220
ClassNode lowerBound = genericsType.getLowerBound();

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

+5
Original file line numberDiff line numberDiff line change
@@ -3195,6 +3195,11 @@ private ClassNode[] resolveGenericsFromTypeHint(final ClassNode receiver, final
31953195
private static ClassNode createUsableClassNodeFromGenericsType(final GenericsType genericsType) {
31963196
ClassNode value = genericsType.getType();
31973197
if (genericsType.isPlaceholder()) {
3198+
// GRECLIPSE add -- GROOVY-9968
3199+
if (value.isRedirectNode())
3200+
value = value.redirect();
3201+
else
3202+
// GRECLIPSE end
31983203
value = OBJECT_TYPE;
31993204
}
32003205
ClassNode lowerBound = genericsType.getLowerBound();

0 commit comments

Comments
 (0)