goto implementation: narrow scope to file for private methods()IDEA-184663

This commit is contained in:
Anna.Kozlova
2018-01-08 17:05:50 +01:00
parent be52f65e9a
commit 41ebb4f647
2 changed files with 17 additions and 0 deletions
@@ -361,6 +361,9 @@ public class JavaTargetElementEvaluator extends TargetElementEvaluatorEx2 implem
public SearchScope getSearchScope(Editor editor, @NotNull final PsiElement element) {
final PsiReferenceExpression referenceExpression = editor != null ? findReferenceExpression(editor) : null;
if (referenceExpression != null && element instanceof PsiMethod) {
if (!PsiUtil.canBeOverridden((PsiMethod)element)) {
return new LocalSearchScope(element.getContainingFile());
}
final PsiClass[] memberClass = getClassesWithMember(referenceExpression, (PsiMember)element);
if (memberClass != null && memberClass.length == 1) {
return CachedValuesManager.getCachedValue(memberClass[0], () -> {
@@ -16,10 +16,14 @@
package com.intellij.java.navigation;
import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.TargetElementUtil;
import com.intellij.codeInsight.navigation.GotoTargetHandler;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.fixtures.CodeInsightTestUtil;
@@ -358,6 +362,16 @@ public class GotoImplementationHandlerTest extends JavaCodeInsightFixtureTestCas
assertSize(2, getTargets(file));
}
public void testScopeForPrivateMethod() {
PsiFile file = myFixture.configureByText(JavaFileType.INSTANCE, "class Foo {" +
" {f<caret>oo();}" +
" private void foo() {}" +
"}");
PsiClass inheritor = myFixture.addClass("class FooImpl extends Foo {}");
SearchScope scope = TargetElementUtil.getInstance().getSearchScope(myFixture.getEditor(), ((PsiJavaFile)file).getClasses()[0].getMethods()[0]);
assertFalse(scope.contains(PsiUtilCore.getVirtualFile(inheritor)));
}
public void testAnonymousAndLocalClassesInLibrary() {
ModuleRootModificationUtil.addModuleLibrary(
myModule,