Skip to content

Commit 7303e51

Browse files
authored
Merge pull request #1797 from Haehnchen/feature/method-ref
#1706 fix method references and multi resolve
2 parents ad86191 + 7727829 commit 7303e51

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/PhpElementsUtil.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.jetbrains.php.lang.psi.elements.impl.PhpDefineImpl;
3131
import com.jetbrains.php.lang.psi.resolve.types.PhpType;
3232
import com.jetbrains.php.lang.psi.stubs.indexes.expectedArguments.PhpExpectedFunctionArgument;
33+
import com.jetbrains.php.lang.psi.stubs.indexes.expectedArguments.PhpExpectedFunctionArgumentsRegistry;
3334
import com.jetbrains.php.lang.psi.stubs.indexes.expectedArguments.PhpExpectedFunctionScalarArgument;
3435
import com.jetbrains.php.phpunit.PhpUnitUtil;
3536
import com.jetbrains.php.refactoring.PhpAliasImporter;
@@ -1230,14 +1231,23 @@ public static PhpClass getClassInsideNamespaceScope(@NotNull Project project, @N
12301231
* Resolves MethodReference and compare containing class against implementations instances
12311232
*/
12321233
public static boolean isMethodReferenceInstanceOf(@NotNull MethodReference methodReference, @NotNull String expectedClassName) {
1233-
for (ResolveResult resolveResult : methodReference.multiResolve(false)) {
1234-
PsiElement resolve = resolveResult.getElement();
1234+
PhpIndex instance = PhpIndex.getInstance(methodReference.getProject());
1235+
PhpType classType = (new PhpType()).add(methodReference.getClassReference()).global(methodReference.getProject());
12351236

1236-
if(!(resolve instanceof Method)) {
1237+
Collection<PhpClass> instanceClasses = classType.getTypes()
1238+
.stream()
1239+
.flatMap((fqn) -> instance.getAnyByFQN(fqn).stream())
1240+
.distinct()
1241+
.collect(Collectors.toList());
1242+
1243+
for (PhpClass phpClass : instanceClasses) {
1244+
Method method = phpClass.findMethodByName(methodReference.getName());
1245+
if (method == null) {
12371246
continue;
12381247
}
12391248

1240-
PhpClass containingClass = ((Method) resolve).getContainingClass();
1249+
// different class possible
1250+
PhpClass containingClass = method.getContainingClass();
12411251
if(containingClass == null) {
12421252
continue;
12431253
}

0 commit comments

Comments
 (0)