Skip to content

Commit d1022ea

Browse files
committed
GROOVY-9891
1 parent 49c989e commit d1022ea

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

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

+30
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,36 @@ public void testTypeChecked9873() {
699699
runConformTest(sources, "123", options);
700700
}
701701

702+
@Test
703+
public void testTypeChecked9891() {
704+
//@formatter:off
705+
String[] sources = {
706+
"Main.groovy",
707+
"@groovy.transform.TypeChecked\n" +
708+
"void test(Pojo pojo) {\n" +
709+
" Collection<? extends Number> c = pojo.map.values()\n" +
710+
" Iterable<? extends Number> i = pojo.map.values()\n" + // Cannot assign Collection<? extends Number> to Iterable<? extends Number>
711+
" print i.iterator().next()\n" +
712+
"}\n" +
713+
"test(new Pojo(map: [x:1,y:2,z:3.4]))\n",
714+
715+
"Pojo.java",
716+
"import java.util.Map;\n" +
717+
"class Pojo {\n" +
718+
" Map<String, ? extends Number> getMap() {\n" +
719+
" return map;\n" +
720+
" }\n" +
721+
" void setMap(Map<String, ? extends Number> map) {\n" +
722+
" this.map = map;\n" +
723+
" }\n" +
724+
" private Map<String, ? extends Number> map = null;\n" +
725+
"}\n",
726+
};
727+
//@formatter:on
728+
729+
runConformTest(sources, "1");
730+
}
731+
702732
@Test
703733
public void testTypeChecked9902() {
704734
//@formatter:off

base/org.codehaus.groovy25/src/org/codehaus/groovy/ast/tools/GenericsUtils.java

+8
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,14 @@ public static ClassNode correctToGenericsSpec(Map<String, ClassNode> genericsSpe
425425
String name = type.getName();
426426
ret = genericsSpec.get(name);
427427
}
428+
// GRECLIPSE add -- GROOVY-9891
429+
else if (type.isWildcard()) {
430+
ret = type.getLowerBound(); // use lower or upper
431+
if (ret == null && type.getUpperBounds() != null) {
432+
ret = type.getUpperBounds()[0]; // ? supports 1
433+
}
434+
}
435+
// GRECLIPSE end
428436
if (ret == null) ret = type.getType();
429437
return ret;
430438
}

base/org.codehaus.groovy30/src/org/codehaus/groovy/ast/tools/GenericsUtils.java

+8
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,14 @@ public static ClassNode correctToGenericsSpec(Map<String, ClassNode> genericsSpe
421421
String name = type.getName();
422422
ret = genericsSpec.get(name);
423423
}
424+
// GRECLIPSE add -- GROOVY-9891
425+
else if (type.isWildcard()) {
426+
ret = type.getLowerBound(); // use lower or upper
427+
if (ret == null && type.getUpperBounds() != null) {
428+
ret = type.getUpperBounds()[0]; // ? supports 1
429+
}
430+
}
431+
// GRECLIPSE end
424432
if (ret == null) ret = type.getType();
425433
return ret;
426434
}

base/org.codehaus.groovy40/src/org/codehaus/groovy/ast/tools/GenericsUtils.java

+8
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,14 @@ public static ClassNode correctToGenericsSpec(Map<String, ClassNode> genericsSpe
421421
String name = type.getName();
422422
ret = genericsSpec.get(name);
423423
}
424+
// GRECLIPSE add -- GROOVY-9891
425+
else if (type.isWildcard()) {
426+
ret = type.getLowerBound(); // use lower or upper
427+
if (ret == null && type.getUpperBounds() != null) {
428+
ret = type.getUpperBounds()[0]; // ? supports 1
429+
}
430+
}
431+
// GRECLIPSE end
424432
if (ret == null) ret = type.getType();
425433
return ret;
426434
}

0 commit comments

Comments
 (0)