AA: use explicit qualifier type if available
...when computing receiver type for double colon expression ^KT-65150 fixed
This commit is contained in:
committed by
Space Team
parent
2277c1ba97
commit
2429d09edd
+6
@@ -64,6 +64,12 @@ public class Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerat
|
|||||||
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("methodReference_java.kt")
|
||||||
|
public void testMethodReference_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("methodReference_type.kt")
|
@TestMetadata("methodReference_type.kt")
|
||||||
public void testMethodReference_type() throws Exception {
|
public void testMethodReference_type() throws Exception {
|
||||||
|
|||||||
+12
-6
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.components
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtBuiltinTypes
|
import org.jetbrains.kotlin.analysis.api.components.KtBuiltinTypes
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtTypeProvider
|
import org.jetbrains.kotlin.analysis.api.components.KtTypeProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.api.components.buildClassType
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirNamedClassOrObjectSymbol
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirNamedClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||||
@@ -34,10 +35,7 @@ import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass
|
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
|
||||||
import org.jetbrains.kotlin.fir.java.enhancement.EnhancedForWarningConeSubstitutor
|
import org.jetbrains.kotlin.fir.java.enhancement.EnhancedForWarningConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
||||||
@@ -195,8 +193,16 @@ internal class KtFirTypeProvider(
|
|||||||
}
|
}
|
||||||
is FirCallableReferenceAccess -> {
|
is FirCallableReferenceAccess -> {
|
||||||
when (val explicitReceiver = fir.explicitReceiver) {
|
when (val explicitReceiver = fir.explicitReceiver) {
|
||||||
is FirPropertyAccessExpression -> explicitReceiver.resolvedType.asKtType()
|
is FirPropertyAccessExpression -> {
|
||||||
else -> fir.resolvedType.getReceiverOfReflectionType()?.asKtType()
|
explicitReceiver.resolvedType.asKtType()
|
||||||
|
}
|
||||||
|
is FirResolvedQualifier -> {
|
||||||
|
explicitReceiver.classId?.let { analysisSession.buildClassType(it) }
|
||||||
|
?: fir.resolvedType.getReceiverOfReflectionType()?.asKtType()
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
fir.resolvedType.getReceiverOfReflectionType()?.asKtType()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
|
|||||||
+6
@@ -64,6 +64,12 @@ public class FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGener
|
|||||||
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("methodReference_java.kt")
|
||||||
|
public void testMethodReference_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("methodReference_type.kt")
|
@TestMetadata("methodReference_type.kt")
|
||||||
public void testMethodReference_type() throws Exception {
|
public void testMethodReference_type() throws Exception {
|
||||||
|
|||||||
+6
@@ -64,6 +64,12 @@ public class FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerate
|
|||||||
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("methodReference_java.kt")
|
||||||
|
public void testMethodReference_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("methodReference_type.kt")
|
@TestMetadata("methodReference_type.kt")
|
||||||
public void testMethodReference_type() throws Exception {
|
public void testMethodReference_type() throws Exception {
|
||||||
|
|||||||
+6
@@ -64,6 +64,12 @@ public class FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestG
|
|||||||
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/getClass_variable.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("methodReference_java.kt")
|
||||||
|
public void testMethodReference_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("methodReference_type.kt")
|
@TestMetadata("methodReference_type.kt")
|
||||||
public void testMethodReference_type() throws Exception {
|
public void testMethodReference_type() throws Exception {
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// FILE: IntMath.java
|
||||||
|
|
||||||
|
package my.math;
|
||||||
|
|
||||||
|
public final class IntMath {
|
||||||
|
public static int factorial(int n) {
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
|
||||||
|
import my.math.IntMath
|
||||||
|
|
||||||
|
fun test() = IntMath:<caret>:factorial
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
expression: IntMath::factorial
|
||||||
|
receiver:: type: my.math.IntMath
|
||||||
Reference in New Issue
Block a user