Fix: IDEA-72915 (Don't warn about repeating labels in Spock tests)

This commit is contained in:
Sergey Evdokimov
2011-08-05 14:47:07 +04:00
parent 01854e070d
commit de10c513eb
2 changed files with 17 additions and 0 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.plugins.groovy.codeInspection.BaseInspectionVisitor;
import org.jetbrains.plugins.groovy.codeInspection.GroovyInspectionBundle;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrLabeledStatement;
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil;
import org.jetbrains.plugins.groovy.spock.SpockUtils;
/**
* @author Maxim.Medvedev
@@ -61,8 +62,12 @@ public class GroovyLabeledStatementInspection extends BaseInspection {
@Override
public void visitLabeledStatement(GrLabeledStatement labeledStatement) {
super.visitLabeledStatement(labeledStatement);
final String name = labeledStatement.getLabelName();
if (ResolveUtil.resolveLabeledStatement(name, labeledStatement, true) != null) {
if (SpockUtils.isInSpockTest(labeledStatement)) return;
registerError(labeledStatement.getLabel(), name);
}
}
@@ -1,5 +1,6 @@
package org.jetbrains.plugins.groovy.spock;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
@@ -16,6 +17,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssign
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.typedef.members.GrMethod;
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.arithmetic.GrShiftExpressionImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.bitwise.GrBitwiseExpressionImpl;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
@@ -220,6 +222,16 @@ public class SpockUtils {
return e;
}
public static boolean isInSpockTest(@Nullable PsiElement element) {
GrMethod method = PsiTreeUtil.getParentOfType(element, GrMethod.class);
if (method == null) return false;
PsiClass containingClass = method.getContainingClass();
if (containingClass == null) return false;
return GroovyPsiManager.isInheritorCached(containingClass, SPEC_CLASS_NAME);
}
@Nullable
public static String getNameByReference(@Nullable PsiElement expression) {
if (!(expression instanceof GrReferenceExpression)) return null;