From 5bc628ccc2122628055e17d53a8a0e2f737e60d6 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Wed, 4 Aug 2010 11:45:42 +0400 Subject: [PATCH] IDEA-56628 Missing incompatible assignment when conditionally returning from a method --- .../assignment/GroovyAssignabilityCheckInspection.java | 9 ++++----- .../plugins/groovy/lang/GroovyHighlightingTest.java | 9 +++------ .../testdata/highlighting/ReturnAssignability.groovy | 10 ++++++++++ 3 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 plugins/groovy/testdata/highlighting/ReturnAssignability.groovy diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java index f2be2a783d20..3bd71167d4e7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java @@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.codeInspection.assignment; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.TypeConversionUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -31,6 +32,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentLabel; import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrOpenBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrReturnStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; @@ -109,11 +111,8 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { public void visitReturnStatement(GrReturnStatement returnStatement) { super.visitReturnStatement(returnStatement); - final PsiElement parent = returnStatement.getParent(); - if (!(parent instanceof GrOpenBlock)) return; - final PsiElement element = parent.getParent(); - if (!(element instanceof GrMethod)) return; - GrMethod method = (GrMethod)element; + final GrMethod method = PsiTreeUtil.getParentOfType(returnStatement, GrMethod.class, true, GrClosableBlock.class); + if (method == null) return; final GrExpression value = returnStatement.getReturnValue(); final PsiType expectedType = method.getReturnType(); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java index 5334185f8ba6..ef725d71b557 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java @@ -274,13 +274,10 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { doTest(); } - public void testCollectionAssignments() throws Exception { - doTest(new GroovyAssignabilityCheckInspection()); - } + public void testCollectionAssignments() {doTest(new GroovyAssignabilityCheckInspection()); } + public void testReturnAssignability() {doTest(new GroovyAssignabilityCheckInspection()); } public void testNumberDuplicatesInMaps() throws Exception {doTest();} - public void testMapNotAcceptedAsStringParameter() { - doTest(); - } + public void testMapNotAcceptedAsStringParameter() {doTest();} } \ No newline at end of file diff --git a/plugins/groovy/testdata/highlighting/ReturnAssignability.groovy b/plugins/groovy/testdata/highlighting/ReturnAssignability.groovy new file mode 100644 index 000000000000..78d70d3417d6 --- /dev/null +++ b/plugins/groovy/testdata/highlighting/ReturnAssignability.groovy @@ -0,0 +1,10 @@ +File foo() { + List ints = [] + if (ints.empty) { + print {return 42} + for (x in ints) { + return 43 + } + } + 67 +} \ No newline at end of file