summaryrefslogtreecommitdiff
path: root/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/JavaCompiledPattern.java
diff options
context:
space:
mode:
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.java90
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;
+ }
+}