diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java index a15a0cae894f..8621243d6531 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java @@ -875,8 +875,11 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile { if (grandParent instanceof PsiAssertStatement) return ((PsiAssertStatement)grandParent).getAssertDescription() == parent; if (grandParent instanceof PsiNameValuePair) return ((PsiNameValuePair)grandParent).getValue() == parent; } - if (grandParent instanceof PsiSwitchLabelStatement) { - return ((PsiSwitchLabelStatement)grandParent).getEnclosingSwitchStatement() != null; + if (grandParent instanceof PsiExpressionList) { + PsiElement label = grandParent.getParent(); + if (label instanceof PsiSwitchLabelStatementBase) { + return ((PsiSwitchLabelStatementBase)label).getEnclosingSwitchStatement() != null; + } } if (grandParent instanceof PsiVariable) { return ((PsiVariable)grandParent).getInitializer() == parent; @@ -912,7 +915,7 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile { final PsiElement grandParent = parent.getParent(); if (grandParent instanceof PsiPolyadicExpression) return true; - if (grandParent instanceof PsiSwitchLabelStatement) return true; + if (grandParent instanceof PsiExpressionList && grandParent.getParent() instanceof PsiSwitchLabelStatementBase) return true; if (grandParent instanceof PsiExpressionStatement && hasSemicolon(grandParent)) return true; if (grandParent instanceof PsiReferenceList) { final PsiElement greatGrandParent = grandParent.getParent(); @@ -929,10 +932,10 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile { final PsiElement grandParent = parent.getParent(); if (grandParent instanceof PsiCatchSection && parent instanceof PsiParameter) return true; if (grandParent instanceof PsiAnnotation && !(grandParent.getParent().getNextSibling() instanceof PsiErrorElement)) return true; - if (grandParent instanceof PsiParameterList || grandParent instanceof PsiExpressionList || + if (grandParent instanceof PsiParameterList || grandParent instanceof PsiArrayInitializerMemberValue || + (grandParent instanceof PsiExpressionList && !(grandParent.getParent() instanceof PsiSwitchLabelStatementBase)) || grandParent instanceof PsiTypeParameterList || grandParent instanceof PsiResourceList || - grandParent instanceof PsiResourceExpression || grandParent instanceof PsiArrayInitializerExpression || - grandParent instanceof PsiArrayInitializerMemberValue) { + grandParent instanceof PsiResourceExpression || grandParent instanceof PsiArrayInitializerExpression) { return true; } if (grandParent instanceof PsiTypeElement) { diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java index 097971328cad..f15dc527fa24 100644 --- a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/compiler/JavaCompilingVisitor.java @@ -5,6 +5,7 @@ import com.intellij.dupLocator.iterators.NodeIterator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.GlobalSearchScope; @@ -282,11 +283,13 @@ public class JavaCompilingVisitor extends JavaRecursiveElementWalkingVisitor { // typed var for expression (but not top level) MatchingHandler handler = myCompilingVisitor.getContext().getPattern().getHandler(reference); GlobalCompilingVisitor.setFilter(handler, ExpressionFilter.getInstance()); - final PsiElement parent = reference.getParent(); - if (parent instanceof PsiSwitchLabelStatement && handler instanceof SubstitutionHandler) { - final SubstitutionHandler handler1 = (SubstitutionHandler)handler; - pattern.setHandler(parent, new SubstitutionHandler("__case_" + parent.getTextOffset(), false, - handler1.getMinOccurs(), handler1.getMaxOccurs(), true)); + if (handler instanceof SubstitutionHandler) { + PsiSwitchLabelStatementBase label = PsiImplUtil.getSwitchLabel(reference); + if (label != null) { + SubstitutionHandler handler1 = (SubstitutionHandler)handler; + pattern.setHandler(label, new SubstitutionHandler("__case_" + label.getTextOffset(), false, + handler1.getMinOccurs(), handler1.getMaxOccurs(), true)); + } } typedVarProcessed = true; }