/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.completion.handlers; import com.intellij.codeInsight.completion.CompletionInitializationContext; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.codeInsight.completion.CompletionResultSet; import com.intellij.codeInsight.completion.PrefixMatcher; import com.intellij.psi.PsiComment; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.tree.IElementType; import gw.lang.parser.IToken; import gw.lang.parser.statements.IClassDeclaration; import gw.lang.parser.statements.IClassStatement; import gw.lang.reflect.gs.GosuClassTypeLoader; import gw.plugin.ij.completion.proposals.AdditionalSyntaxCompletionProposal; import gw.plugin.ij.completion.proposals.GosuCompletionProposal; import gw.plugin.ij.lang.GosuTokenTypes; import gw.plugin.ij.lang.psi.impl.GosuClassFileImpl; import gw.plugin.ij.lang.psi.impl.GosuTemplateFileImpl; import gw.plugin.ij.lang.psi.impl.statements.typedef.GosuClassDefinitionImpl; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Completes a symbol, not a . */ public class TemplateSyntaxHandler extends AbstractCompletionHandler { public TemplateSyntaxHandler(CompletionParameters params, CompletionResultSet results) { super(params, results); } public void handleCompletePath() { IElementType eltType = getContext().getPosition().getNode().getElementType(); boolean inString = inString(eltType); boolean inTemplate = inTemplate(getContext().getPosition()); if(inString || inTemplate) { String text = getContext().getPosition().getText(); int completionIndex = text.lastIndexOf(CompletionInitializationContext.DUMMY_IDENTIFIER_TRIMMED); if (completionIndex > 0) { if (text.charAt(completionIndex - 1) == '$') { addCompletion(getResult().withPrefixMatcher(""), new AdditionalSyntaxCompletionProposal("{}", "", -1)); } if (text.charAt(completionIndex - 1) == '<') { CompletionResultSet newResult = getResult().withPrefixMatcher(""); addCompletion(newResult, new AdditionalSyntaxCompletionProposal("%=%>", "", -2)); addCompletion(newResult, new AdditionalSyntaxCompletionProposal("%%>", "", -2)); if (inTemplate) { addCompletion(newResult, new AdditionalSyntaxCompletionProposal("%@%>", "", -2)); } addCompletion(newResult, new AdditionalSyntaxCompletionProposal("%----%>", "", -4)); } } } } private boolean inTemplate(@NotNull PsiElement position) { return position instanceof PsiWhiteSpace && position.getContainingFile() instanceof GosuTemplateFileImpl; } private boolean inString(IElementType eltType) { return eltType == GosuTokenTypes.TT_OP_quote_double || eltType == GosuTokenTypes.TT_OP_quote_single; } }