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; } }