package fr.adrienbrault.idea.symfony2plugin.util.completion; import com.intellij.codeInsight.completion.InsertHandler; import com.intellij.codeInsight.completion.InsertionContext; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.psi.PsiElement; import com.jetbrains.php.completion.insert.PhpInsertHandlerUtil; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.Parameter; import org.jetbrains.annotations.NotNull; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class TwigTypeInsertHandler implements InsertHandler<LookupElement> { private static final TwigTypeInsertHandler instance = new TwigTypeInsertHandler(); public void handleInsert(@NotNull InsertionContext context, @NotNull LookupElement lookupElement) { PsiElement psiElement = lookupElement.getPsiElement(); if(psiElement instanceof Method && needParameter((Method) psiElement)) { // check this: // {{ form_javasc|() }} // {{ form_javasc| }} if(PhpInsertHandlerUtil.isStringAtCaret(context.getEditor(), "(")) { return; } String addText = "()"; PhpInsertHandlerUtil.insertStringAtCaret(context.getEditor(), addText); context.getEditor().getCaretModel().moveCaretRelatively(-1, 0, false, false, true); } } private boolean needParameter(Method method) { for(Parameter parameter: method.getParameters()) { if(!parameter.isOptional()) { return true; } } return false; } public static TwigTypeInsertHandler getInstance(){ return instance; } }