package fr.adrienbrault.idea.symfony2plugin.completion; import com.intellij.codeInsight.completion.CompletionConfidence; import com.intellij.patterns.PlatformPatterns; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ThreeState; import com.jetbrains.php.lang.psi.PhpFile; import com.jetbrains.php.lang.psi.elements.*; import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent; import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil; import org.jetbrains.annotations.NotNull; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class PhpParameterStringCompletionConfidence extends CompletionConfidence { @NotNull @Override public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { if (!Symfony2ProjectComponent.isEnabled(contextElement)) { return ThreeState.UNSURE; } if(!(psiFile instanceof PhpFile)) { return ThreeState.UNSURE; } PsiElement context = contextElement.getContext(); if(!(context instanceof StringLiteralExpression)) { return ThreeState.UNSURE; } // $test == ""; if(context.getParent() instanceof BinaryExpression) { return ThreeState.NO; } // $this->container->get(""); PsiElement stringContext = context.getContext(); if(stringContext instanceof ParameterList) { return ThreeState.NO; } // $this->method(... array('foo'); array('bar' => 'foo') ...); ArrayCreationExpression arrayCreationExpression = PhpElementsUtil.getCompletableArrayCreationElement(context); if(arrayCreationExpression != null && arrayCreationExpression.getContext() instanceof ParameterList) { return ThreeState.NO; } // $array['value'] if(PlatformPatterns.psiElement().withSuperParent(2, ArrayIndex.class).accepts(contextElement)) { return ThreeState.NO; } return ThreeState.UNSURE; } }