Skip to content

Commit e352da5

Browse files
committed
GROOVY-10667
1 parent 0817dcf commit e352da5

File tree

4 files changed

+47
-5
lines changed

4 files changed

+47
-5
lines changed

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

+31
Original file line numberDiff line numberDiff line change
@@ -5899,4 +5899,35 @@ public void testTypeChecked10662() {
58995899

59005900
runConformTest(sources);
59015901
}
5902+
5903+
@Test
5904+
public void testTypeChecked10667() {
5905+
//@formatter:off
5906+
String[] sources = {
5907+
"Main.groovy",
5908+
"trait Tagged {\n" +
5909+
" String tag\n" +
5910+
"}\n" +
5911+
"class TaggedException extends Exception implements Tagged {\n" +
5912+
"}\n" +
5913+
"@groovy.transform.TypeChecked\n" +
5914+
"void accept1(Exception e) {\n" +
5915+
" if (e instanceof Tagged) {\n" +
5916+
" print e.tag\n" +
5917+
" accept2(e)\n" + // Cannot find matching method #accept2(Tagged)
5918+
" }\n" +
5919+
"}\n" +
5920+
"@groovy.transform.TypeChecked\n" +
5921+
"void accept2(Exception e) {\n" +
5922+
"}\n" +
5923+
"@groovy.transform.TypeChecked\n" +
5924+
"void test() {\n" +
5925+
" accept1(new TaggedException(tag:'foo'))\n" +
5926+
"}\n" +
5927+
"test()\n",
5928+
};
5929+
//@formatter:on
5930+
5931+
runConformTest(sources, "foo");
5932+
}
59025933
}

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

+4
Original file line numberDiff line numberDiff line change
@@ -2879,7 +2879,11 @@ protected ClassNode[] getArgumentTypes(ArgumentListExpression args) {
28792879
if (isNullConstant(exp)) {
28802880
ret[i] = UNKNOWN_PARAMETER_TYPE;
28812881
} else {
2882+
/* GRECLIPSE edit -- GROOVY-10667
28822883
ret[i] = getInferredTypeFromTempInfo(exp, getType(exp));
2884+
*/
2885+
ret[i] = getType(exp);
2886+
// GRECLIPSE end
28832887
}
28842888
}
28852889
return ret;

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

+4
Original file line numberDiff line numberDiff line change
@@ -2679,7 +2679,11 @@ protected MethodNode typeCheckMapConstructor(final ConstructorCallExpression cal
26792679

26802680
protected ClassNode[] getArgumentTypes(final ArgumentListExpression args) {
26812681
return args.getExpressions().stream().map(exp ->
2682+
/* GRECLIPSE edit -- GROOVY-10667
26822683
isNullConstant(exp) ? UNKNOWN_PARAMETER_TYPE : getInferredTypeFromTempInfo(exp, getType(exp))
2684+
*/
2685+
isNullConstant(exp) ? UNKNOWN_PARAMETER_TYPE : getType(exp)
2686+
// GRECLIPSE end
26832687
).toArray(ClassNode[]::new);
26842688
}
26852689

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -763,10 +763,9 @@ public void visitBinaryExpression(final BinaryExpression expression) {
763763
typeCheckingContext.pushEnclosingBinaryExpression(expression);
764764
try {
765765
int op = expression.getOperation().getType();
766-
// GRECLIPSE add -- GROOVY-7971
767-
if (op == LOGICAL_OR) {
766+
// GRECLIPSE add -- GROOVY-7971, GROOVY-8965
767+
if (op == LOGICAL_OR)
768768
typeCheckingContext.pushTemporaryTypeInfo();
769-
}
770769
// GRECLIPSE end
771770
Expression leftExpression = expression.getLeftExpression();
772771
Expression rightExpression = expression.getRightExpression();
@@ -776,7 +775,7 @@ public void visitBinaryExpression(final BinaryExpression expression) {
776775
ClassNode lType = null;
777776
if (setterInfo != null) {
778777
if (ensureValidSetter(expression, leftExpression, rightExpression, setterInfo)) {
779-
// GRECLIPSE add -- GROOVY-7971
778+
// GRECLIPSE add -- GROOVY-7971, GROOVY-8965
780779
if (op == LOGICAL_OR)
781780
typeCheckingContext.popTemporaryTypeInfo();
782781
// GRECLIPSE end
@@ -815,7 +814,7 @@ public void visitBinaryExpression(final BinaryExpression expression) {
815814

816815
resultType = getType(fullExpression);
817816
}
818-
// GRECLIPSE add -- GROOVY-7971
817+
// GRECLIPSE add -- GROOVY-7971, GROOVY-8965
819818
else if (op == LOGICAL_OR)
820819
typeCheckingContext.popTemporaryTypeInfo();
821820
// GRECLIPSE end
@@ -2395,7 +2394,11 @@ protected MethodNode typeCheckMapConstructor(final ConstructorCallExpression cal
23952394

23962395
protected ClassNode[] getArgumentTypes(final ArgumentListExpression args) {
23972396
return args.getExpressions().stream().map(exp ->
2397+
/* GRECLIPSE edit -- GROOVY-10667
23982398
isNullConstant(exp) ? UNKNOWN_PARAMETER_TYPE : getInferredTypeFromTempInfo(exp, getType(exp))
2399+
*/
2400+
isNullConstant(exp) ? UNKNOWN_PARAMETER_TYPE : getType(exp)
2401+
// GRECLIPSE end
23992402
).toArray(ClassNode[]::new);
24002403
}
24012404

0 commit comments

Comments
 (0)