From a69b2883ee6ef4281bda87ce4653d9216a378495 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 12 Jul 2013 19:28:37 +0400 Subject: [PATCH] Make resolve session be able to resolve class parameters --- .../jet/lang/resolve/lazy/ResolveSession.java | 9 ++++++++- .../resolve/references/InClassParameter.kt | 7 +++++++ .../resolve/references/InClassParameterField.kt | 7 +++++++ .../resolve/references/InFunctionParameterType.kt | 7 +++++++ .../resolve/ReferenceResolveTestGenerated.java | 15 +++++++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 idea/testData/resolve/references/InClassParameter.kt create mode 100644 idea/testData/resolve/references/InClassParameterField.kt create mode 100644 idea/testData/resolve/references/InFunctionParameterType.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index 15cefb3b344..ef36abacb26 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -278,10 +278,17 @@ public class ResolveSession implements KotlinCodeAnalyzer { if (grandFather instanceof JetClass) { JetClass jetClass = (JetClass) grandFather; // This is a primary constructor parameter + ClassDescriptor classDescriptor = getClassDescriptor(jetClass); if (parameter.getValOrVarNode() != null) { - getClassDescriptor(jetClass).getDefaultType().getMemberScope().getProperties(safeNameForLazyResolve(parameter)); + classDescriptor.getDefaultType().getMemberScope().getProperties(safeNameForLazyResolve(parameter)); return getBindingContext().get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, parameter); } + else { + ConstructorDescriptor constructor = classDescriptor.getUnsubstitutedPrimaryConstructor(); + assert constructor != null: "There are constructor parameters found, so a constructor should also exist"; + constructor.getValueParameters(); + return getBindingContext().get(BindingContext.VALUE_PARAMETER, parameter); + } } return super.visitParameter(parameter, data); } diff --git a/idea/testData/resolve/references/InClassParameter.kt b/idea/testData/resolve/references/InClassParameter.kt new file mode 100644 index 00000000000..18f4f026156 --- /dev/null +++ b/idea/testData/resolve/references/InClassParameter.kt @@ -0,0 +1,7 @@ +package test + +class A + +class Some(a: A) + +// REF: (test).A \ No newline at end of file diff --git a/idea/testData/resolve/references/InClassParameterField.kt b/idea/testData/resolve/references/InClassParameterField.kt new file mode 100644 index 00000000000..3d863c90b7a --- /dev/null +++ b/idea/testData/resolve/references/InClassParameterField.kt @@ -0,0 +1,7 @@ +package test + +class A + +class Some(var a: A) + +// REF: (test).A \ No newline at end of file diff --git a/idea/testData/resolve/references/InFunctionParameterType.kt b/idea/testData/resolve/references/InFunctionParameterType.kt new file mode 100644 index 00000000000..3167ab4e568 --- /dev/null +++ b/idea/testData/resolve/references/InFunctionParameterType.kt @@ -0,0 +1,7 @@ +package test + +class A + +fun some(a: A) = 12 + +// REF: (test).A \ 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 877ba9bbdd0..90f91cdafa0 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java @@ -71,6 +71,21 @@ public class ReferenceResolveTestGenerated extends AbstractResolveBaseTest { doTest("idea/testData/resolve/references/CtrlClickResolve.kt"); } + @TestMetadata("InClassParameter.kt") + public void testInClassParameter() throws Exception { + doTest("idea/testData/resolve/references/InClassParameter.kt"); + } + + @TestMetadata("InClassParameterField.kt") + public void testInClassParameterField() throws Exception { + doTest("idea/testData/resolve/references/InClassParameterField.kt"); + } + + @TestMetadata("InFunctionParameterType.kt") + public void testInFunctionParameterType() throws Exception { + doTest("idea/testData/resolve/references/InFunctionParameterType.kt"); + } + @TestMetadata("PackageReference.kt") public void testPackageReference() throws Exception { doTest("idea/testData/resolve/references/PackageReference.kt");