Skip to content

Commit 3c7b1b3

Browse files
committed
GROOVY-8202
1 parent 776c91f commit 3c7b1b3

File tree

4 files changed

+59
-5
lines changed

4 files changed

+59
-5
lines changed

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

+50
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,56 @@ public void testTypeChecked8103() {
723723
runNegativeTest(sources, "");
724724
}
725725

726+
@Test
727+
public void testTypeChecked8202() {
728+
//@formatter:off
729+
String[] sources = {
730+
"Main.groovy",
731+
"void proc() {\n" +
732+
"}\n" +
733+
"@groovy.transform.TypeChecked\n" +
734+
"String test0(flag) {\n" +
735+
" if (flag) {\n" +
736+
" 'foo'\n" +
737+
" } else {\n" +
738+
" proc()\n" +
739+
" }\n" +
740+
"}\n" +
741+
"@groovy.transform.TypeChecked\n" +
742+
"String test1(flag) {\n" +
743+
" Closure<String> c = { ->\n" +
744+
" if (flag) {\n" +
745+
" 'bar'\n" +
746+
" } else {\n" +
747+
" proc()\n" +
748+
" null\n" +
749+
" }\n" +
750+
" }\n" +
751+
" c.call()\n" +
752+
"}\n" +
753+
"@groovy.transform.TypeChecked\n" +
754+
"String test2(flag) {\n" +
755+
" Closure<String> c = { ->\n" + // Cannot assign Closure<Object> to Closure<String>
756+
" if (flag) {\n" +
757+
" 'baz'\n" +
758+
" } else {\n" +
759+
" proc()\n" +
760+
" }\n" +
761+
" }\n" +
762+
" c.call()\n" +
763+
"}\n" +
764+
"print test0(true)\n" +
765+
"print test1(true)\n" +
766+
"print test2(true)\n" +
767+
"print test0(false)\n" +
768+
"print test1(false)\n" +
769+
"print test2(false)\n",
770+
};
771+
//@formatter:on
772+
773+
runConformTest(sources, "foobarbaznullnullnull");
774+
}
775+
726776
@Test
727777
public void testTypeChecked8909() {
728778
//@formatter:off

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -2677,10 +2677,11 @@ protected ClassNode checkReturnType(final ReturnStatement statement) {
26772677
}
26782678

26792679
protected void addClosureReturnType(ClassNode returnType) {
2680-
// GRECLIPSE add -- GROOVY-9971
2680+
// GRECLIPSE add -- GROOVY-8202, GROOVY-9971
26812681
if (StaticTypeCheckingSupport.isGStringOrGStringStringLUB(returnType) && STRING_TYPE.equals(
2682-
getInferredReturnType(typeCheckingContext.getEnclosingClosure().getClosureExpression())))
2683-
returnType = STRING_TYPE;
2682+
getInferredReturnType(typeCheckingContext.getEnclosingClosure().getClosureExpression()))) {
2683+
typeCheckingContext.getEnclosingClosure().addReturnType(STRING_TYPE);
2684+
} else if (!VOID_TYPE.equals(returnType))
26842685
// GRECLIPSE end
26852686
typeCheckingContext.getEnclosingClosure().addReturnType(returnType);
26862687
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -2410,11 +2410,11 @@ protected ClassNode checkReturnType(final ReturnStatement statement) {
24102410
}
24112411

24122412
protected void addClosureReturnType(final ClassNode returnType) {
2413-
// GRECLIPSE add -- GROOVY-9971
2413+
// GRECLIPSE add -- GROOVY-8202, GROOVY-9971
24142414
if (StaticTypeCheckingSupport.isGStringOrGStringStringLUB(returnType) && STRING_TYPE.equals(
24152415
getInferredReturnType(typeCheckingContext.getEnclosingClosure().getClosureExpression()))) {
24162416
typeCheckingContext.getEnclosingClosure().addReturnType(STRING_TYPE);
2417-
} else
2417+
} else if (!VOID_TYPE.equals(returnType))
24182418
// GRECLIPSE end
24192419
typeCheckingContext.getEnclosingClosure().addReturnType(returnType);
24202420
}

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

+3
Original file line numberDiff line numberDiff line change
@@ -2326,6 +2326,9 @@ protected void addClosureReturnType(final ClassNode returnType) {
23262326
&& STRING_TYPE.equals(getInferredReturnType(enclosingClosure.getClosureExpression()))) {
23272327
// GROOVY-9971: convert GString to String at the point of return
23282328
enclosingClosure.addReturnType(STRING_TYPE);
2329+
// GRECLIPSE add -- GROOVY-8202
2330+
} else if (VOID_TYPE.equals(returnType)) {
2331+
// GRECLIPSE end
23292332
} else {
23302333
enclosingClosure.addReturnType(returnType);
23312334
}

0 commit comments

Comments
 (0)