blob: 5638715b3d38723ef3b910ea9e178efceeed7732 [file] [log] [blame]
package com.intellij.structuralsearch;
import com.intellij.codeInsight.template.TemplateContextType;
import com.intellij.lang.Language;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.GroovyFileType;
import org.jetbrains.plugins.groovy.debugger.fragments.GroovyCodeFragment;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.template.GroovyTemplateContextType;
/**
* @author Eugene.Kudelevsky
*/
public class GroovyStructuralSearchProfile extends StructuralSearchProfileBase {
public static final String FILE_CONTEXT = "File";
public static final String CLASS_CONTEXT = "Class";
private static final TokenSet VARIABLE_DELIMETERS = TokenSet.create(GroovyTokenTypes.mCOMMA, GroovyTokenTypes.mSEMI);
@NotNull
@Override
protected String[] getVarPrefixes() {
return new String[]{"_$_____"};
}
@NotNull
@Override
public String[] getContextNames() {
return new String[]{FILE_CONTEXT, CLASS_CONTEXT};
}
@NotNull
@Override
protected LanguageFileType getFileType() {
return GroovyFileType.GROOVY_FILE_TYPE;
}
@NotNull
@Override
protected TokenSet getVariableDelimiters() {
return VARIABLE_DELIMETERS;
}
@Override
public PsiCodeFragment createCodeFragment(Project project, String text, @Nullable PsiElement context) {
GroovyCodeFragment result = new GroovyCodeFragment(project, text);
result.setContext(context);
return result;
}
@Override
public Class<? extends TemplateContextType> getTemplateContextTypeClass() {
return GroovyTemplateContextType.class;
}
@Override
public String getContext(@NotNull String pattern, @Nullable Language language, String contextName) {
return CLASS_CONTEXT.equals(contextName)
? "class AAAAA { " + PATTERN_PLACEHOLDER + " }"
: PATTERN_PLACEHOLDER;
}
@Override
public Class getElementContextByPsi(PsiElement element) {
if (element instanceof PsiIdentifier) {
element = element.getParent();
}
if (element instanceof PsiMember) {
return PsiMember.class;
} else {
return PsiExpression.class;
}
}
@Override
public boolean isIdentifier(PsiElement element) {
return element instanceof PsiIdentifier;
}
}