diff options
Diffstat (limited to 'java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaCompiledPattern.java')
-rw-r--r-- | java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaCompiledPattern.java | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaCompiledPattern.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaCompiledPattern.java new file mode 100644 index 000000000000..9a6330bb799b --- /dev/null +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaCompiledPattern.java @@ -0,0 +1,90 @@ +package com.intellij.structuralsearch.impl.matcher; + +import com.intellij.openapi.util.Key; +import com.intellij.psi.*; +import com.intellij.structuralsearch.impl.matcher.strategies.ExprMatchingStrategy; +import org.jetbrains.annotations.Nullable; + +/** +* @author Eugene.Kudelevsky +*/ +public class JavaCompiledPattern extends CompiledPattern { + private static final String TYPED_VAR_PREFIX = "__$_"; + + private boolean requestsSuperFields; + private boolean requestsSuperMethods; + private boolean requestsSuperInners; + + public JavaCompiledPattern() { + setStrategy(ExprMatchingStrategy.getInstance()); + } + + public String[] getTypedVarPrefixes() { + return new String[] {TYPED_VAR_PREFIX}; + } + + public boolean isTypedVar(final String str) { + if (str.charAt(0)=='@') { + return str.regionMatches(1,TYPED_VAR_PREFIX,0,TYPED_VAR_PREFIX.length()); + } else { + return str.startsWith(TYPED_VAR_PREFIX); + } + } + + @Override + public boolean isToResetHandler(PsiElement element) { + return !(element instanceof PsiJavaToken) && + !(element instanceof PsiJavaCodeReferenceElement && element.getParent() instanceof PsiAnnotation); + } + + @Nullable + @Override + public String getAlternativeTextToMatch(PsiElement node, String previousText) { + // Short class name is matched with fully qualified name + if(node instanceof PsiJavaCodeReferenceElement || node instanceof PsiClass) { + PsiElement element = (node instanceof PsiJavaCodeReferenceElement)? + ((PsiJavaCodeReferenceElement)node).resolve(): + node; + + if (element instanceof PsiClass) { + String text = ((PsiClass)element).getQualifiedName(); + if (text != null && text.equals(previousText)) { + text = ((PsiClass)element).getName(); + } + + if (text != null) { + return text; + } + } + } else if (node instanceof PsiLiteralExpression) { + return node.getText(); + } + return null; + } + + public static final Key<String> ALL_CLASS_CONTENT_VAR_NAME_KEY = Key.create("AllClassContent"); + + public boolean isRequestsSuperFields() { + return requestsSuperFields; + } + + public void setRequestsSuperFields(boolean requestsSuperFields) { + this.requestsSuperFields = requestsSuperFields; + } + + public boolean isRequestsSuperInners() { + return requestsSuperInners; + } + + public void setRequestsSuperInners(boolean requestsSuperInners) { + this.requestsSuperInners = requestsSuperInners; + } + + public boolean isRequestsSuperMethods() { + return requestsSuperMethods; + } + + public void setRequestsSuperMethods(boolean requestsSuperMethods) { + this.requestsSuperMethods = requestsSuperMethods; + } +} |