diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java b/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java index 1d0498bf1a9..48a4b64dfac 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java @@ -38,6 +38,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; @@ -59,6 +60,8 @@ import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; import java.util.*; public class JetSourceNavigationHelper { + private static boolean forceResolve = false; + private JetSourceNavigationHelper() { } @@ -335,18 +338,20 @@ public class JetSourceNavigationHelper { + decompiledContainer.getClass().getSimpleName()); } - candidates = filterByReceiverPresenceAndParametersCount(decompiledDeclaration, navigationStrategy, candidates); - - if (candidates.size() <= 1) { - return getUnambiguousCandidate(candidates); - } - - if (!haveRenamesInImports(getContainingFiles(candidates))) { - candidates = filterByReceiverAndParameterTypes(decompiledDeclaration, navigationStrategy, candidates); + if (!forceResolve) { + candidates = filterByReceiverPresenceAndParametersCount(decompiledDeclaration, navigationStrategy, candidates); if (candidates.size() <= 1) { return getUnambiguousCandidate(candidates); } + + if (!haveRenamesInImports(getContainingFiles(candidates))) { + candidates = filterByReceiverAndParameterTypes(decompiledDeclaration, navigationStrategy, candidates); + + if (candidates.size() <= 1) { + return getUnambiguousCandidate(candidates); + } + } } Pair contextAndMemberScope = getBindingContextAndMemberScopeForLibrarySources(decompiledDeclaration); @@ -481,6 +486,11 @@ public class JetSourceNavigationHelper { return getSourcePropertyOrFunction(decompiledFunction, new FunctionNavigationStrategy()); } + @TestOnly + static void setForceResolve(boolean forceResolve) { + JetSourceNavigationHelper.forceResolve = forceResolve; + } + private interface NavigationStrategy { @NotNull Class getDeclarationClass(); diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java index d375f43d98e..5ace0b41a1c 100644 --- a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java @@ -84,6 +84,12 @@ public class NavigateToLibrarySourceTest extends AbstractNavigateToLibraryTest { userFile = LocalFileSystem.getInstance().findFileByPath(TEST_DATA_PATH + "/usercode/" + getTestName(false) + ".kt"); assertNotNull(userFile); + checkAnnotatedLibraryCode(false); + checkAnnotatedLibraryCode(true); + } + + private void checkAnnotatedLibraryCode(boolean forceResolve) { + JetSourceNavigationHelper.setForceResolve(forceResolve); String actualCode = getActualAnnotatedLibraryCode(); String expectedCode = getExpectedAnnotatedLibraryCode(); assertSameLines(expectedCode, actualCode);