Make resolve session be able to resolve class parameters

This commit is contained in:
Nikolay Krasko
2013-07-12 19:28:37 +04:00
parent f8e3275861
commit a69b2883ee
5 changed files with 44 additions and 1 deletions
@@ -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);
}
@@ -0,0 +1,7 @@
package test
class A
class Some(a: <caret>A)
// REF: (test).A
@@ -0,0 +1,7 @@
package test
class A
class Some(var a: <caret>A)
// REF: (test).A
@@ -0,0 +1,7 @@
package test
class A
fun some(a: <caret>A) = 12
// REF: (test).A
@@ -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");