blob: 9a6330bb799bf1706f064b17899c961fc6954532 [file] [log] [blame]
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;
}
}