IDEA-92313 Groovy inspection "Assignment to method parameter" behave incorrectly

This commit is contained in:
Max Medvedev
2013-04-04 10:48:42 +04:00
parent 59085da040
commit a16afcb6eb
@@ -17,15 +17,18 @@ package org.jetbrains.plugins.groovy.codeInspection.assignment;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.Nls;
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.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.clauses.GrForClause;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrUnaryExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
public class GroovyAssignmentToMethodParameterInspection extends BaseInspection {
@@ -48,15 +51,20 @@ public class GroovyAssignmentToMethodParameterInspection extends BaseInspection
}
@NotNull
public BaseInspectionVisitor buildVisitor() {
return new Visitor();
}
private static class Visitor extends BaseInspectionVisitor {
public void visitAssignmentExpression(GrAssignmentExpression grAssignmentExpression) {
super.visitAssignmentExpression(grAssignmentExpression);
final GrExpression lhs = grAssignmentExpression.getLValue();
public void visitAssignmentExpression(GrAssignmentExpression expr) {
super.visitAssignmentExpression(expr);
check(expr.getLValue());
}
private void check(@Nullable GrExpression lhs) {
if (!(lhs instanceof GrReferenceExpression)) {
return;
}
@@ -72,5 +80,15 @@ public class GroovyAssignmentToMethodParameterInspection extends BaseInspection
}
registerError(lhs);
}
@Override
public void visitUnaryExpression(GrUnaryExpression expression) {
super.visitUnaryExpression(expression);
final IElementType op = expression.getOperationTokenType();
if (op == GroovyTokenTypes.mINC || op == GroovyTokenTypes.mDEC) {
check(expression.getOperand());
}
}
}
}