diff --git a/plugins/groovy/structuralsearch-groovy/src/com/intellij/structuralsearch/GroovyStructuralSearchProfile.java b/plugins/groovy/structuralsearch-groovy/src/com/intellij/structuralsearch/GroovyStructuralSearchProfile.java index b3223123bb4a..5638715b3d38 100644 --- a/plugins/groovy/structuralsearch-groovy/src/com/intellij/structuralsearch/GroovyStructuralSearchProfile.java +++ b/plugins/groovy/structuralsearch-groovy/src/com/intellij/structuralsearch/GroovyStructuralSearchProfile.java @@ -77,4 +77,9 @@ public class GroovyStructuralSearchProfile extends StructuralSearchProfileBase { return PsiExpression.class; } } + + @Override + public boolean isIdentifier(PsiElement element) { + return element instanceof PsiIdentifier; + } } diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java index eff95bb0f84f..f0ff2d07663b 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfile.java @@ -264,4 +264,8 @@ public abstract class StructuralSearchProfile { public int processAdditionalOptions(ParameterInfo info, int offset, StringBuilder result, MatchResult r) { return offset; } + + public boolean isIdentifier(PsiElement element) { + return false; + } } diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchUtil.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchUtil.java index adc102476c93..fce6e4f26bd4 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchUtil.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchUtil.java @@ -8,6 +8,7 @@ import com.intellij.structuralsearch.impl.matcher.MatchUtils; import com.intellij.structuralsearch.plugin.ui.Configuration; import com.intellij.tokenindex.LanguageTokenizer; import com.intellij.tokenindex.Tokenizer; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +31,12 @@ public class StructuralSearchUtil { return getProfileByLanguage(element.getLanguage()); } + @Contract("null -> false") + public static boolean isIdentifier(PsiElement element) { + final StructuralSearchProfile profile = getProfileByPsiElement(element); + return profile != null && profile.isIdentifier(element); + } + private static StructuralSearchProfile[] getNewStyleProfiles() { if (ourNewStyleProfiles == null) { final List list = new ArrayList(); diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/GlobalCompilingVisitor.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/GlobalCompilingVisitor.java index fe9bb8bb0f8f..e67f4e721d06 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/GlobalCompilingVisitor.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/GlobalCompilingVisitor.java @@ -2,7 +2,6 @@ package com.intellij.structuralsearch.impl.matcher.compiler; import com.intellij.dupLocator.util.NodeFilter; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiIdentifier; import com.intellij.psi.PsiModifier; import com.intellij.structuralsearch.StructuralSearchProfile; import com.intellij.structuralsearch.StructuralSearchUtil; @@ -61,7 +60,7 @@ public class GlobalCompilingVisitor { public final void handle(PsiElement element) { if ((!ourFilter.accepts(element) || - element instanceof PsiIdentifier) && + StructuralSearchUtil.isIdentifier(element)) && context.getPattern().isRealTypedVar(element) && context.getPattern().getHandlerSimple(element) == null ) { diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ReferencePredicate.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ReferencePredicate.java index b0b7bf34b3bd..17570ed8f5df 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ReferencePredicate.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ReferencePredicate.java @@ -1,6 +1,7 @@ package com.intellij.structuralsearch.impl.matcher.predicates; import com.intellij.psi.*; +import com.intellij.structuralsearch.StructuralSearchUtil; import com.intellij.structuralsearch.impl.matcher.handlers.SubstitutionHandler; import com.intellij.structuralsearch.impl.matcher.MatchContext; import com.intellij.structuralsearch.impl.matcher.MatchUtils; @@ -14,7 +15,7 @@ public final class ReferencePredicate extends SubstitutionHandler { } public boolean match(PsiElement node, PsiElement match, MatchContext context) { - if (match instanceof PsiIdentifier) { + if (StructuralSearchUtil.isIdentifier(match)) { // since we pickup tokens match = match.getParent(); } diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/RegExpPredicate.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/RegExpPredicate.java index 54bc975b1bd8..f7b8ecedcf3d 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/RegExpPredicate.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/RegExpPredicate.java @@ -102,7 +102,7 @@ public final class RegExpPredicate extends MatchPredicate { if (!result) { - if(matchedNode instanceof PsiIdentifier) { + if(StructuralSearchUtil.isIdentifier(matchedNode)) { matchedNode = matchedNode.getParent(); } diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java index 37575d60b8b4..49c7684404df 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/ScriptSupport.java @@ -2,10 +2,8 @@ package com.intellij.structuralsearch.impl.matcher.predicates; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiIdentifier; import com.intellij.structuralsearch.MatchResult; -import com.intellij.structuralsearch.SSRBundle; -import com.intellij.structuralsearch.StructuralSearchException; +import com.intellij.structuralsearch.StructuralSearchUtil; import com.intellij.structuralsearch.impl.matcher.MatchResultImpl; import groovy.lang.Binding; import groovy.lang.GroovyRuntimeException; @@ -54,7 +52,7 @@ public class ScriptSupport { if (context == null) { context = result.getMatchRef().getElement(); } - if (context instanceof PsiIdentifier) context = context.getParent(); + if (StructuralSearchUtil.isIdentifier(context)) context = context.getParent(); binding.setVariable("__context__", context); script.setBinding(binding); diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacementContext.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacementContext.java index ee747109463f..c77d0b7ce1f1 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacementContext.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacementContext.java @@ -2,9 +2,9 @@ package com.intellij.structuralsearch.plugin.replace.impl; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiIdentifier; import com.intellij.psi.PsiNamedElement; import com.intellij.structuralsearch.MatchResult; +import com.intellij.structuralsearch.StructuralSearchUtil; import com.intellij.structuralsearch.plugin.replace.ReplaceOptions; import java.util.HashMap; @@ -43,7 +43,7 @@ public class ReplacementContext { for (String s : variableMap.keySet()) { final MatchResult matchResult = replacementInfo.getVariableMap().get(s); PsiElement match = matchResult.getMatchRef() != null ? matchResult.getMatch() : null; - if (match instanceof PsiIdentifier) match = match.getParent(); + if (StructuralSearchUtil.isIdentifier(match)) match = match.getParent(); if (match instanceof PsiNamedElement) { final String name = ((PsiNamedElement)match).getName(); diff --git a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/Replacer.java b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/Replacer.java index 1a8afaedff78..aac1a07e853a 100644 --- a/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/Replacer.java +++ b/plugins/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/Replacer.java @@ -396,8 +396,7 @@ public class Replacer { MatchResult matchResult = i.next(); if (MatchResult.LINE_MATCH.equals(matchResult.getName()) && - matchResult.getMatch() instanceof PsiMember - ) { + matchResult.getMatch() instanceof PsiMember) { element = matchResult.getMatch(); } else { l.add( manager.createSmartPsiElementPointer(element) ); diff --git a/plugins/structuralsearch/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java b/plugins/structuralsearch/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java index ffd38c0466e9..c4b60cc9fd0b 100644 --- a/plugins/structuralsearch/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java +++ b/plugins/structuralsearch/structuralsearch-java/src/com/intellij/structuralsearch/JavaStructuralSearchProfile.java @@ -578,6 +578,11 @@ public class JavaStructuralSearchProfile extends StructuralSearchProfile { return offset; } + @Override + public boolean isIdentifier(PsiElement element) { + return element instanceof PsiIdentifier; + } + private static void handleMethodParameter(StringBuilder buf, ParameterInfo info, HashMap matchMap) { if(info.getElement() ==null) { // no specific handling for name of method parameter since it is handled with type