Skip to content

Commit 44ee922

Browse files
committed
Fix resolving a field through a member
1 parent 1e4c424 commit 44ee922

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

src/main/java/com/cedricziel/idea/typo3/extbase/persistence/ExtbasePersistenceReferenceResolver.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ public Collection<? extends PhpNamedElement> resolve(PhpReference phpReference)
3434
return Collections.emptyList();
3535
}
3636

37-
Collection<PhpClass> classesByFQN = PhpIndex.getInstance(phpReference.getProject()).getClassesByFQN(variable.getType().toStringResolved());
37+
Collection<PhpClass> classesByFQN = new ArrayList<>();
38+
39+
for (String s: variable.getType().getTypes()) {
40+
classesByFQN.addAll(PhpIndex.getInstance(phpReference.getProject()).getClassesByFQN(s));
41+
}
42+
3843
if (classesByFQN.isEmpty()) {
3944
return Collections.emptyList();
4045
}

src/test/java/com/cedricziel/idea/typo3/extbase/persistence/ExtbasePersistenceReferenceResolverTest.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package com.cedricziel.idea.typo3.extbase.persistence;
22

33
import com.intellij.psi.PsiElement;
4+
import com.intellij.psi.PsiReference;
45
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
56
import com.jetbrains.php.lang.psi.elements.Field;
7+
import com.jetbrains.php.lang.psi.elements.MethodReference;
8+
import com.jetbrains.php.lang.psi.elements.PhpNamedElement;
9+
import com.jetbrains.php.lang.psi.elements.PhpReference;
10+
import com.jetbrains.php.lang.psi.resolve.PhpReferenceResolver;
11+
12+
import java.util.Collection;
613

714
public class ExtbasePersistenceReferenceResolverTest extends LightCodeInsightFixtureTestCase {
815
@Override
@@ -24,9 +31,25 @@ public void testCanNavigateToPropertiesFromMagicMethodsOnMembers() {
2431
myFixture.copyFileToProject("PersistenceMocks.php");
2532
myFixture.configureByFile("RepositoryMagicMethodNavigationOnMember.php");
2633

27-
PsiElement elementAtCaret = myFixture.getElementAtCaret();
34+
int caretOffset = myFixture.getCaretOffset();
35+
PsiElement elementAtCaret = myFixture.getFile().findElementAt(caretOffset).getParent();
2836

29-
assertInstanceOf(elementAtCaret, Field.class);
30-
assertEquals("author", ((Field) elementAtCaret).getName());
37+
assertInstanceOf(elementAtCaret, MethodReference.class);
38+
39+
for (PsiReference ref: elementAtCaret.getReferences()) {
40+
if (ref instanceof PhpReference) {
41+
for (PhpReferenceResolver resolver: PhpReferenceResolver.EP_NAME.getExtensions()) {
42+
Collection<? extends PhpNamedElement> resolve = resolver.resolve((PhpReference) ref);
43+
44+
for (PhpNamedElement phpNamedElement: resolve) {
45+
if (phpNamedElement.getName().equals("author") && phpNamedElement instanceof Field) {
46+
return;
47+
}
48+
}
49+
}
50+
}
51+
}
52+
53+
fail("Could not resolve to correct object");
3154
}
3255
}

0 commit comments

Comments
 (0)