package net.king2500.plugins.PhpAdvancedAutoComplete; import com.intellij.codeInsight.editorActions.TypedHandlerDelegate; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ObjectUtils; import com.jetbrains.php.completion.PhpCompletionUtil; import com.jetbrains.php.lang.psi.PhpFile; import com.jetbrains.php.lang.psi.PhpPsiUtil; import com.jetbrains.php.lang.psi.elements.FunctionReference; import com.jetbrains.php.lang.psi.elements.ParameterList; import com.jetbrains.php.lang.psi.elements.Statement; import net.king2500.plugins.PhpAdvancedAutoComplete.utils.PhpElementsUtil; import net.king2500.plugins.PhpAdvancedAutoComplete.utils.StringUtil; import org.jetbrains.annotations.NotNull; /** * @author Thomas Schulz <[email protected]> */ public class PhpAutoPopupTypedHandler extends TypedHandlerDelegate { @NotNull @Override public Result checkAutoPopup(char charTyped, @NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) { if (!(file instanceof PhpFile)) { return Result.CONTINUE; } if (charTyped != '%') { return Result.CONTINUE; } int offset = editor.getCaretModel().getOffset(); PsiElement psiElement = file.findElementAt(offset); ParameterList parameterList = PhpPsiUtil.getParentByCondition(psiElement, true, ParameterList.INSTANCEOF, Statement.INSTANCEOF); if (parameterList != null) { FunctionReference functionCall = ObjectUtils.tryCast(parameterList.getParent(), FunctionReference.class); String fqn = PhpElementsUtil.resolveFqn(functionCall); if (/*charTyped == '%' &&*/ PhpElementsUtil.isFormatFunction(fqn)) { if (StringUtil.getPrecedingCharNum(editor.getDocument().getCharsSequence(), offset, '%') % 2 == 0) { PhpCompletionUtil.showCompletion(editor); } } } return Result.CONTINUE; } }