Skip to content

Commit 6504566

Browse files
Merge pull request #1044 from bohdan-harniuk/984-fix-phpstorm-broken-references-if-class-exists-in-generated-folder
984: Filtered generated folder from reference resolving results
2 parents 05e394f + feedf15 commit 6504566

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

resources/META-INF/plugin.xml

+2
Original file line numberDiff line numberDiff line change
@@ -617,5 +617,7 @@
617617
<frameworkProjectConfigurableProvider implementation="com.magento.idea.magento2plugin.project.ConfigurableProvider"/>
618618
<frameworkUsageProvider implementation="com.magento.idea.magento2plugin.project.UsagesProvider"/>
619619
<libraryRoot id="phpstorm.meta.php" path="/.phpstorm.meta.php/" runtime="false"/>
620+
621+
<referenceResolver2 implementation="com.magento.idea.magento2plugin.lang.php.MagentoProxyDeclarationFilter" order="first"/>
620622
</extensions>
621623
</idea-plugin>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.lang.php;
7+
8+
import com.intellij.openapi.util.registry.Registry;
9+
import com.intellij.openapi.vfs.VirtualFile;
10+
import com.intellij.psi.PsiElement;
11+
import com.intellij.psi.PsiFile;
12+
import com.intellij.util.containers.ContainerUtil;
13+
import com.jetbrains.php.lang.psi.PhpMultipleDeclarationFilter;
14+
import com.jetbrains.php.lang.psi.elements.PhpNamedElement;
15+
import com.magento.idea.magento2plugin.project.Settings;
16+
import java.util.Collection;
17+
import org.jetbrains.annotations.NotNull;
18+
19+
public class MagentoProxyDeclarationFilter implements PhpMultipleDeclarationFilter {
20+
21+
@SuppressWarnings({"PMD.CognitiveComplexity", "PMD.ConfusingTernary"})
22+
@Override
23+
public <E extends PhpNamedElement> Collection<E> filter(
24+
final @NotNull PsiElement psiElement,
25+
final Collection<E> candidates
26+
) {
27+
if (!Settings.isEnabled(psiElement.getProject())) {
28+
return candidates;
29+
} else if (!Registry.is("php.use.multiproject.ref.resolver", true)) {
30+
return candidates;
31+
} else if (candidates.size() == 1) { // NOPMD
32+
return candidates;
33+
} else if (psiElement.getContainingFile() == null) {
34+
return candidates;
35+
}
36+
37+
return ContainerUtil.filter(candidates,
38+
(candidate) -> {
39+
final PsiFile file = candidate.getContainingFile();
40+
41+
if (file == null) {
42+
return false;
43+
}
44+
final VirtualFile virtualFile = file.getVirtualFile();
45+
46+
if (virtualFile == null) {
47+
return false;
48+
}
49+
50+
return !virtualFile.getPath().contains("/generated/");
51+
});
52+
}
53+
}

0 commit comments

Comments
 (0)