diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyResultOfAssignmentUsedInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyResultOfAssignmentUsedInspection.java index b8513d3b350f..c8c90d9334cd 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyResultOfAssignmentUsedInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyResultOfAssignmentUsedInspection.java @@ -21,10 +21,15 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.codeInspection.BaseInspection; import org.jetbrains.plugins.groovy.codeInspection.BaseInspectionVisitor; +import org.jetbrains.plugins.groovy.codeInspection.utils.ControlFlowUtils; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; +import org.jetbrains.plugins.groovy.lang.psi.api.formatter.GrControlStatement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; +import java.util.List; + public class GroovyResultOfAssignmentUsedInspection extends BaseInspection { @Nls @@ -54,7 +59,9 @@ public class GroovyResultOfAssignmentUsedInspection extends BaseInspection { public void visitAssignmentExpression(GrAssignmentExpression grAssignmentExpression) { super.visitAssignmentExpression(grAssignmentExpression); final PsiElement parent = grAssignmentExpression.getParent(); - if (parent instanceof GrCodeBlock || parent instanceof GroovyFile || parent == null) { + final List returns = ControlFlowUtils.collectReturns(ControlFlowUtils.findControlFlowOwner(grAssignmentExpression)); + if (!returns.contains(grAssignmentExpression) && + (parent instanceof GrCodeBlock || parent instanceof GroovyFile || parent instanceof GrControlStatement || parent == null)) { return; } registerError(grAssignmentExpression); 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 f760de060c87..ccf5d4ac2afa 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java @@ -19,6 +19,7 @@ import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.codeInspection.GroovyImportsTracker; import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignabilityCheckInspection; +import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyResultOfAssignmentUsedInspection; import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyUncheckedAssignmentOfMemberOfRawTypeInspection; import org.jetbrains.plugins.groovy.codeInspection.bugs.GroovyAccessibilityInspection; import org.jetbrains.plugins.groovy.codeInspection.bugs.GroovyLabeledStatementInspection; @@ -347,4 +348,8 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { public void testTestMarkupStubs() { doTest(); } + + public void testResultOfAssignmentUsed() { + doTest(new GroovyResultOfAssignmentUsedInspection()); + } } \ No newline at end of file diff --git a/plugins/groovy/testdata/highlighting/ResultOfAssignmentUsed.groovy b/plugins/groovy/testdata/highlighting/ResultOfAssignmentUsed.groovy new file mode 100644 index 000000000000..6724c412bf18 --- /dev/null +++ b/plugins/groovy/testdata/highlighting/ResultOfAssignmentUsed.groovy @@ -0,0 +1,9 @@ +public class AssResult { + public void context(boolean b, String ps) { + String vs = 'prefix' + if (b) vs += ps // warning + if (b) { vs += ps } // no warning + print vs = 4 + println ps + } +} \ No newline at end of file