package com.nvlad.yii2support.objectfactory; import com.intellij.codeInsight.completion.CompletionType; import com.intellij.patterns.ElementPattern; import com.intellij.patterns.PlatformPatterns; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.php.lang.PhpLanguage; import com.jetbrains.php.lang.psi.elements.ArrayCreationExpression; import com.jetbrains.php.lang.psi.elements.MethodReference; import com.jetbrains.php.lang.psi.elements.NewExpression; import com.jetbrains.php.lang.psi.elements.StringLiteralExpression; import com.jetbrains.php.lang.psi.elements.impl.ArrayCreationExpressionImpl; import com.nvlad.yii2support.common.Patterns; import org.jetbrains.annotations.NotNull; public class ObjectFactoryCompletionContributor extends com.intellij.codeInsight.completion.CompletionContributor { public ObjectFactoryCompletionContributor() { extend(CompletionType.BASIC, ElementPattern(), new ObjectFactoryCompletionProvider()); } @Override public boolean invokeAutoPopup(@NotNull PsiElement position, char typeChar) { if ((typeChar == '\'' || typeChar == '"') && position.getParent() instanceof ArrayCreationExpression) { return true; } return false; } private static ElementPattern<PsiElement> ElementPattern() { return PlatformPatterns.psiElement() .withParent(PlatformPatterns.psiElement(StringLiteralExpression.class) .withParent(PlatformPatterns.or( PlatformPatterns.psiElement().withParent(ArrayCreationExpression.class), Patterns.withHashKey() .withParent(PlatformPatterns.psiElement().withParent(ArrayCreationExpression.class)) ))); } }