Skip to content

Commit bbf178a

Browse files
committed
GROOVY-10128, GROOVY-10306
1 parent bb169a7 commit bbf178a

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

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

+43
Original file line numberDiff line numberDiff line change
@@ -3714,6 +3714,25 @@ public void testTypeChecked10111a() {
37143714
runConformTest(sources);
37153715
}
37163716

3717+
@Test
3718+
public void testTypeChecked10128() {
3719+
//@formatter:off
3720+
String[] sources = {
3721+
"Main.groovy",
3722+
"@groovy.transform.TypeChecked\n" +
3723+
"void test() {\n" +
3724+
" java.util.function.Function<String, Number> x = { s ->\n" +
3725+
" long n = 1\n" +
3726+
" return n\n" +
3727+
" }\n" +
3728+
"}\n" +
3729+
"test()\n",
3730+
};
3731+
//@formatter:on
3732+
3733+
runConformTest(sources);
3734+
}
3735+
37173736
@Test
37183737
public void testTypeChecked10166() {
37193738
//@formatter:off
@@ -4152,6 +4171,30 @@ public void testTypeChecked10295() {
41524171
runConformTest(sources);
41534172
}
41544173

4174+
@Test
4175+
public void testTypeChecked10306() {
4176+
//@formatter:off
4177+
String[] sources = {
4178+
"Main.groovy",
4179+
"class Main {\n" +
4180+
" byte p = 1\n" +
4181+
" @groovy.transform.TypeChecked\n" +
4182+
" def test() {\n" +
4183+
" byte v = 1\n" +
4184+
" java.util.function.Supplier<Number> s1 = { -> v }\n" +
4185+
" java.util.function.Supplier<Number> s2 = { -> p }\n" +
4186+
" }\n" +
4187+
" static main(args) {\n" +
4188+
" def self = this.newInstance()\n" +
4189+
" print(self.test().get())\n" +
4190+
" }\n" +
4191+
"}\n",
4192+
};
4193+
//@formatter:on
4194+
4195+
runConformTest(sources, "1");
4196+
}
4197+
41554198
@Test
41564199
public void testTypeChecked10320() {
41574200
//@formatter:off

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -2746,7 +2746,7 @@ protected ClassNode checkReturnType(final ReturnStatement statement) {
27462746
if (STRING_TYPE.equals(inferredReturnType) && StaticTypeCheckingSupport.isGStringOrGStringStringLUB(type)) {
27472747
type = STRING_TYPE; // implicit "toString()" before return
27482748
} else if (inferredReturnType != null && !GenericsUtils.hasUnresolvedGenerics(inferredReturnType)
2749-
&& GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(type)) {
2749+
&& GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(wrapTypeIfNecessary(type))) {
27502750
type = inferredReturnType; // allow simple covariance
27512751
}
27522752
return type;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -2485,7 +2485,7 @@ protected ClassNode checkReturnType(final ReturnStatement statement) {
24852485
}
24862486
// GRECLIPSE add
24872487
else if (inferredReturnType != null && !GenericsUtils.hasUnresolvedGenerics(inferredReturnType)
2488-
&& GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(type)) {
2488+
&& GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(wrapTypeIfNecessary(type))) {
24892489
type = inferredReturnType; // allow simple covariance
24902490
}
24912491
// GRECLIPSE end

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -2262,8 +2262,8 @@ protected ClassNode checkReturnType(final ReturnStatement statement) {
22622262
type = STRING_TYPE; // GROOVY-9971: convert GString to String at point of return
22632263
} else if (inferredReturnType != null
22642264
&& !GenericsUtils.hasUnresolvedGenerics(inferredReturnType)
2265-
&& GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(type)) {
2266-
type = inferredReturnType; // GROOVY-8310, GROOVY-10082, GROOVY-10091: allow simple covariance
2265+
&& GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(wrapTypeIfNecessary(type))) {
2266+
type = inferredReturnType; // GROOVY-8310, GROOVY-10082, GROOVY-10091, GROOVY-10128, GROOVY-10306: allow simple covariance
22672267
}
22682268
return type;
22692269
}

0 commit comments

Comments
 (0)