mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix goto implementation for method refs based on RefType::identifier (IDEA-142490)
This commit is contained in:
@@ -272,7 +272,10 @@ public class JavaTargetElementEvaluator extends TargetElementEvaluatorEx2 implem
|
||||
PsiClass containingClass = ((PsiMember)element).getContainingClass();
|
||||
final PsiExpression expression = ((PsiReferenceExpression)reference).getQualifierExpression();
|
||||
PsiClass psiClass;
|
||||
if (expression != null) {
|
||||
if (reference instanceof PsiMethodReferenceExpression) {
|
||||
psiClass = PsiMethodReferenceUtil.getQualifierResolveResult((PsiMethodReferenceExpression)reference).getContainingClass();
|
||||
}
|
||||
else if (expression != null) {
|
||||
psiClass = PsiUtil.resolveClassInType(expression.getType());
|
||||
} else {
|
||||
if (element instanceof PsiClass) {
|
||||
|
||||
@@ -215,4 +215,22 @@ public class GotoImplementationHandlerTest extends JavaCodeInsightFixtureTestCas
|
||||
assertNotNull(aClass);
|
||||
assertEquals(aClass.getName(), "PsiPackageBase");
|
||||
}
|
||||
|
||||
public void testMethodReferences() throws Throwable {
|
||||
PsiFile file = myFixture.addFileToProject("Foo.java", "interface I {void f();}\n" +
|
||||
"class A implements I { public void f(){}}\n" +
|
||||
"class B implements I { public void f(){}}\n" +
|
||||
"class C {\n" +
|
||||
" void foo(java.util.List<I> l) {l.stream().forEach(I::<caret>f);}" +
|
||||
"}");
|
||||
myFixture.configureFromExistingVirtualFile(file.getVirtualFile());
|
||||
|
||||
final PsiElement[] impls = new GotoImplementationHandler().getSourceAndTargetElements(myFixture.getEditor(), file).targets;
|
||||
assertEquals(2, impls.length);
|
||||
final PsiElement meth = impls[0];
|
||||
assertTrue(meth instanceof PsiMethod);
|
||||
final PsiClass aClass = ((PsiMethod)meth).getContainingClass();
|
||||
assertNotNull(aClass);
|
||||
assertEquals(aClass.getName(), "A");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user