diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index f6af41125..6cf1e6eba 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -617,5 +617,7 @@ + + diff --git a/src/com/magento/idea/magento2plugin/lang/php/MagentoProxyDeclarationFilter.java b/src/com/magento/idea/magento2plugin/lang/php/MagentoProxyDeclarationFilter.java new file mode 100644 index 000000000..86705b138 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/lang/php/MagentoProxyDeclarationFilter.java @@ -0,0 +1,53 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.lang.php; + +import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.util.containers.ContainerUtil; +import com.jetbrains.php.lang.psi.PhpMultipleDeclarationFilter; +import com.jetbrains.php.lang.psi.elements.PhpNamedElement; +import com.magento.idea.magento2plugin.project.Settings; +import java.util.Collection; +import org.jetbrains.annotations.NotNull; + +public class MagentoProxyDeclarationFilter implements PhpMultipleDeclarationFilter { + + @SuppressWarnings({"PMD.CognitiveComplexity", "PMD.ConfusingTernary"}) + @Override + public Collection filter( + final @NotNull PsiElement psiElement, + final Collection candidates + ) { + if (!Settings.isEnabled(psiElement.getProject())) { + return candidates; + } else if (!Registry.is("php.use.multiproject.ref.resolver", true)) { + return candidates; + } else if (candidates.size() == 1) { // NOPMD + return candidates; + } else if (psiElement.getContainingFile() == null) { + return candidates; + } + + return ContainerUtil.filter(candidates, + (candidate) -> { + final PsiFile file = candidate.getContainingFile(); + + if (file == null) { + return false; + } + final VirtualFile virtualFile = file.getVirtualFile(); + + if (virtualFile == null) { + return false; + } + + return !virtualFile.getPath().contains("/generated/"); + }); + } +}