From eaf0c2cb840792b490e49a4fb64486e2352aadfc Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 15 Aug 2013 17:39:15 +0400 Subject: [PATCH] Fix problem of getting reference and parameter in functional literal inside other parameter (EA-48757) --- .../jetbrains/jet/plugin/project/ResolveElementCache.java | 6 ++++++ .../resolve/references/TypeParameterInFunctionLiteral.kt | 5 +++++ .../jet/resolve/ReferenceResolveTestGenerated.java | 5 +++++ 3 files changed, 16 insertions(+) create mode 100644 idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index ceb51aa6b22..e2172b39dab 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -102,6 +102,12 @@ public class ResolveElementCache { return additionalResolveCache.getValue().fun(elementOfAdditionalResolve); } + JetParameter parameter = PsiTreeUtil.getTopmostParentOfType(jetElement, JetParameter.class); + if (parameter != null) { + // Parameters for function literal could be met inside other parameters. We can't make resolveToDescriptors for internal elements. + jetElement = parameter; + } + JetDeclaration declaration = PsiTreeUtil.getParentOfType(jetElement, JetDeclaration.class, false); if (declaration != null) { // Activate descriptor resolution diff --git a/idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt b/idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt new file mode 100644 index 00000000000..f2da342ce30 --- /dev/null +++ b/idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt @@ -0,0 +1,5 @@ +package testing + +class TestClass(val test: (String) -> Int) + +// REF: (jet).String \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java index cb91d3797e7..ee1d9125b24 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java @@ -166,4 +166,9 @@ public class ReferenceResolveTestGenerated extends AbstractResolveBaseTest { doTest("idea/testData/resolve/references/SeveralOverrides.kt"); } + @TestMetadata("TypeParameterInFunctionLiteral.kt") + public void testTypeParameterInFunctionLiteral() throws Exception { + doTest("idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt"); + } + }