From 1bfadba58f9cda448e46713fcb1514da0cd83961 Mon Sep 17 00:00:00 2001 From: "alexey.afanasiev" Date: Mon, 21 Aug 2017 13:16:36 +0300 Subject: [PATCH] IDEA-177330 @CompileStatic multiple assignment in variable definition should be red --- .../typedef/members/GrMethodBaseImpl.java | 2 +- .../lang/resolve/TypeInferenceTest.groovy | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java index 4c3f627b6ba4..d9334c1f0702 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/members/GrMethodBaseImpl.java @@ -230,7 +230,7 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase i if (block != null) { PsiType inferred = GroovyPsiManager.inferType(method, new MethodTypeInferencer(block)); if (inferred != null) { - if (nominal == null || nominal.isAssignableFrom(inferred)) { + if (nominal == null || (nominal.isAssignableFrom(inferred) && !inferred.equals(PsiType.NULL))) { return inferred; } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy index a75cd5b9752a..55eee5034e1f 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy @@ -709,6 +709,24 @@ def foo(List list) { ''', 'java.util.List') } + void testReturnNullWithGeneric() { + doTest(''' + import groovy.transform.CompileStatic + + @CompileStatic + class SomeClass { + protected List foo(String text) { + return null + } + + def bar() { + foo("") + } + } + } +''', 'java.util.List') + } + void testClassExpressions() { doExprTest 'String[]', 'java.lang.Class'