IDEA-49449 Groovy: "Result of assignment expression used" inspection false warning for top-level expression in block

This commit is contained in:
Maxim Medvedev
2011-02-07 12:40:38 +03:00
parent 9414e45716
commit 69c8daecbd
3 changed files with 22 additions and 1 deletions
@@ -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<GrStatement> returns = ControlFlowUtils.collectReturns(ControlFlowUtils.findControlFlowOwner(grAssignmentExpression));
if (!returns.contains(grAssignmentExpression) &&
(parent instanceof GrCodeBlock || parent instanceof GroovyFile || parent instanceof GrControlStatement || parent == null)) {
return;
}
registerError(grAssignmentExpression);
@@ -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());
}
}
@@ -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 <warning descr="Result of assignment expression used">vs = 4</warning>
println ps
}
}