Make resolve session be able to resolve class parameters
This commit is contained in:
@@ -278,10 +278,17 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
|||||||
if (grandFather instanceof JetClass) {
|
if (grandFather instanceof JetClass) {
|
||||||
JetClass jetClass = (JetClass) grandFather;
|
JetClass jetClass = (JetClass) grandFather;
|
||||||
// This is a primary constructor parameter
|
// This is a primary constructor parameter
|
||||||
|
ClassDescriptor classDescriptor = getClassDescriptor(jetClass);
|
||||||
if (parameter.getValOrVarNode() != null) {
|
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);
|
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);
|
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");
|
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")
|
@TestMetadata("PackageReference.kt")
|
||||||
public void testPackageReference() throws Exception {
|
public void testPackageReference() throws Exception {
|
||||||
doTest("idea/testData/resolve/references/PackageReference.kt");
|
doTest("idea/testData/resolve/references/PackageReference.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user