[groovy] dfa: check reassigned type in @CompileStatic (IDEA-186753)

This commit is contained in:
Daniil Ovchinnikov
2019-01-23 13:59:41 +03:00
parent 6592a2f11d
commit 6155526cce
2 changed files with 26 additions and 1 deletions
@@ -310,7 +310,19 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl<GrExpressi
Boolean reassigned = GrReassignedLocalVarsChecker.isReassignedVar(refExpr);
if (reassigned != null && reassigned.booleanValue()) {
return GrReassignedLocalVarsChecker.getReassignedVarType(refExpr, true);
PsiType reassignedType = GrReassignedLocalVarsChecker.getReassignedVarType(refExpr, true);
if (reassignedType == null) {
return nominal;
}
else if (nominal == null) {
return reassignedType;
}
else if (TypeConversionUtil.isAssignable(TypeConversionUtil.erasure(nominal), reassignedType, false)) {
return reassignedType;
}
else {
return nominal;
}
}
final PsiType inferred = getInferredTypes(refExpr, resolved);
@@ -1091,4 +1091,17 @@ while (condition) {
<caret>prevParent
''', 'java.lang.String'
}
void 'test String variable assigned with GString inside closure @CS'() {
doTest '''\
@groovy.transform.CompileStatic
def test() {
String key
return {
key = "hi ${"there"}"
<caret>key
}
}
''', JAVA_LANG_STRING
}
}