From 64e13114e2d76e6aca315f35f3b8a9531398ee26 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 14 Jan 2014 15:50:17 +0400 Subject: [PATCH] store unsubstituted descriptor as REFERENCE_TARGET --- .../jet/lang/resolve/calls/CandidateResolver.java | 4 ++-- .../lang/resolve/calls/tasks/TracingStrategyImpl.java | 4 ++-- idea/testData/libraries/decompiled/LibrariesPackage.kt | 2 ++ idea/testData/libraries/library/main.kt | 2 ++ ...GenericFunctionWithExplicitlyDeclaredTypeArguments.kt | 8 ++++++++ .../usercode/GenericFunctionWithInferredTypeArguments.kt | 9 +++++++++ .../plugin/libraries/NavigateToLibrarySourceTest.java | 8 ++++++++ 7 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 idea/testData/libraries/usercode/GenericFunctionWithExplicitlyDeclaredTypeArguments.kt create mode 100644 idea/testData/libraries/usercode/GenericFunctionWithInferredTypeArguments.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 876298066e7..bfdb61ee990 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -521,10 +521,10 @@ public class CandidateResolver { if (!(callElement instanceof JetCallExpression)) return; JetCallExpression callExpression = (JetCallExpression) callElement; - CallableDescriptor resultingDescriptor = context.candidateCall.getResultingDescriptor(); if (BindingContextUtils.isCallExpressionWithValidReference(callExpression, context.trace.getBindingContext())) { + CallableDescriptor resultingDescriptor = context.candidateCall.getResultingDescriptor(); context.trace.record(BindingContext.EXPRESSION_TYPE, callExpression, resultingDescriptor.getReturnType()); - context.trace.record(BindingContext.REFERENCE_TARGET, callExpression, resultingDescriptor); + context.trace.record(BindingContext.REFERENCE_TARGET, callExpression, context.candidateCall.getCandidateDescriptor()); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategyImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategyImpl.java index 18f8481abab..5d892fcbe21 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategyImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategyImpl.java @@ -59,9 +59,9 @@ public class TracingStrategyImpl implements TracingStrategy { @Override public void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCallWithTrace resolvedCall) { - CallableDescriptor descriptor = resolvedCall.getResultingDescriptor(); + CallableDescriptor descriptor = resolvedCall.getCandidateDescriptor(); if (resolvedCall instanceof VariableAsFunctionResolvedCall) { - descriptor = ((VariableAsFunctionResolvedCall) resolvedCall).getVariableCall().getResultingDescriptor(); + descriptor = ((VariableAsFunctionResolvedCall) resolvedCall).getVariableCall().getCandidateDescriptor(); } DeclarationDescriptor storedReference = trace.get(REFERENCE_TARGET, reference); if (storedReference == null || !ErrorUtils.isError(descriptor)) { diff --git a/idea/testData/libraries/decompiled/LibrariesPackage.kt b/idea/testData/libraries/decompiled/LibrariesPackage.kt index a646243ef55..34b9d568ed8 100644 --- a/idea/testData/libraries/decompiled/LibrariesPackage.kt +++ b/idea/testData/libraries/decompiled/LibrariesPackage.kt @@ -27,6 +27,8 @@ package testData.libraries [public fun func(str: jet.String): jet.Unit { /* compiled code */ }] +[public fun genericFunc(): T { /* compiled code */ }] + [public fun main(args: jet.Array): jet.Unit { /* compiled code */ }] [public fun processDouble(d: jet.Double): jet.Unit { /* compiled code */ }] diff --git a/idea/testData/libraries/library/main.kt b/idea/testData/libraries/library/main.kt index acf04bef0c3..2bd0e30c012 100644 --- a/idea/testData/libraries/library/main.kt +++ b/idea/testData/libraries/library/main.kt @@ -102,6 +102,8 @@ public fun func() { public fun func(cs : CharSequence) { } +public fun genericFunc() : T = throw Exception() + public inline fun T.filter(predicate: (T)-> Boolean) : T? = this diff --git a/idea/testData/libraries/usercode/GenericFunctionWithExplicitlyDeclaredTypeArguments.kt b/idea/testData/libraries/usercode/GenericFunctionWithExplicitlyDeclaredTypeArguments.kt new file mode 100644 index 00000000000..390e1623f4c --- /dev/null +++ b/idea/testData/libraries/usercode/GenericFunctionWithExplicitlyDeclaredTypeArguments.kt @@ -0,0 +1,8 @@ +import testData.libraries.* + +fun test() { + genericFunc() +} + +// main.kt +//public fun <1>genericFunc() : T = throw Exception() \ No newline at end of file diff --git a/idea/testData/libraries/usercode/GenericFunctionWithInferredTypeArguments.kt b/idea/testData/libraries/usercode/GenericFunctionWithInferredTypeArguments.kt new file mode 100644 index 00000000000..08f87e41a75 --- /dev/null +++ b/idea/testData/libraries/usercode/GenericFunctionWithInferredTypeArguments.kt @@ -0,0 +1,9 @@ +import testData.libraries.* + + +fun test() { + val s : String = genericFunc() +} + +// main.kt +//public fun <1>genericFunc() : T = throw Exception() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java index 6db239d0021..ee46fd676f4 100644 --- a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToLibrarySourceTest.java @@ -86,6 +86,14 @@ public class NavigateToLibrarySourceTest extends AbstractNavigateToLibraryTest { doTest(); } + public void testGenericFunctionWithInferredTypeArguments() { + doTest(); + } + + public void testGenericFunctionWithExplicitlyDeclaredTypeArguments() { + doTest(); + } + private void doTest() { myFixture.configureByFile(TEST_DATA_PATH + "/usercode/" + getTestName(false) + ".kt");