diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyLabeledStatementInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyLabeledStatementInspection.java index eae4e8def308..c6aea7eb2474 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyLabeledStatementInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/bugs/GroovyLabeledStatementInspection.java @@ -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); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java index bd232aac6943..0f183850f4fe 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java @@ -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;