diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index e8a4e45e128..b28dc2efc4c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -208,7 +208,7 @@ class FirCallResolver( val classId = referencedSymbol.classId return FirResolvedQualifierImpl(nameReference.source, classId.packageFqName, classId.relativeClassName).apply { resultType = if (classId.isLocal) { - typeForQualifierByDeclaration(referencedSymbol.fir, resultType) + typeForQualifierByDeclaration(referencedSymbol.fir, resultType, session) ?: resultType.resolvedTypeFromPrototype( session.builtinTypes.unitType.type//StandardClassIds.Unit(symbolProvider).constructType(emptyArray(), isNullable = false) ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 3937bc2f465..77dd6dcbbd4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -320,7 +320,7 @@ fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifi val classSymbol = symbolProvider.getClassLikeSymbolByFqName(classId) ?: return FirErrorTypeRefImpl(source = null, diagnostic = FirSimpleDiagnostic("No type for qualifier", DiagnosticKind.Other)) val declaration = classSymbol.phasedFir - typeForQualifierByDeclaration(declaration, resultType)?.let { return it } + typeForQualifierByDeclaration(declaration, resultType, session)?.let { return it } } // TODO: Handle no value type here return resultType.resolvedTypeFromPrototype( @@ -334,7 +334,11 @@ internal fun typeForReifiedParameterReference(parameterReference: FirResolvedRei return resultType.resolvedTypeFromPrototype(typeParameterSymbol.constructType(emptyArray(), false)) } -internal fun typeForQualifierByDeclaration(declaration: FirDeclaration, resultType: FirTypeRef): FirTypeRef? { +internal fun typeForQualifierByDeclaration(declaration: FirDeclaration, resultType: FirTypeRef, session: FirSession): FirTypeRef? { + if (declaration is FirTypeAlias) { + val expandedDeclaration = declaration.expandedConeType?.lookupTag?.toSymbol(session)?.fir ?: return null + return typeForQualifierByDeclaration(expandedDeclaration, resultType, session) + } if (declaration is FirRegularClass) { if (declaration.classKind == ClassKind.OBJECT) { return resultType.resolvedTypeFromPrototype( diff --git a/compiler/testData/codegen/box/typealias/typeAliasCompanion.kt b/compiler/testData/codegen/box/typealias/typeAliasCompanion.kt index 3b289c091e3..07efa97a0f0 100644 --- a/compiler/testData/codegen/box/typealias/typeAliasCompanion.kt +++ b/compiler/testData/codegen/box/typealias/typeAliasCompanion.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR class A { companion object { val result = "OK" diff --git a/compiler/testData/diagnostics/tests/deprecated/typealiasCompanionObject.fir.kt b/compiler/testData/diagnostics/tests/deprecated/typealiasCompanionObject.fir.kt index de07e15f95b..8ef5f484f00 100644 --- a/compiler/testData/diagnostics/tests/deprecated/typealiasCompanionObject.fir.kt +++ b/compiler/testData/diagnostics/tests/deprecated/typealiasCompanionObject.fir.kt @@ -8,5 +8,5 @@ class Relevant { typealias Obsolete = Relevant fun test1() = Obsolete -fun test2() = Obsolete.value +fun test2() = Obsolete.value fun test3() = Obsolete.toString() diff --git a/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsCompanionObjects.fir.kt b/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsCompanionObjects.fir.kt index 5bdcee19c5e..3359f19be86 100644 --- a/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsCompanionObjects.fir.kt +++ b/compiler/testData/diagnostics/tests/sourceCompatibility/apiVersion/typealiasesAsCompanionObjects.fir.kt @@ -11,5 +11,5 @@ typealias CA = C val test1 = CA val test2 = CA.Companion -val test3 = CA.x +val test3 = CA.x val test4 = CA.Companion.x diff --git a/compiler/testData/diagnostics/tests/typealias/genericTypeAliasObject.fir.kt b/compiler/testData/diagnostics/tests/typealias/genericTypeAliasObject.fir.kt index 5cd58c05a3c..fe4d61cd67c 100644 --- a/compiler/testData/diagnostics/tests/typealias/genericTypeAliasObject.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/genericTypeAliasObject.fir.kt @@ -21,5 +21,5 @@ typealias TestGCWC = GenericClassWithCompanion val test25: GenericClassWithCompanion.Companion = TestGCWC val test26 = TestGCWC -val test27: String = TestGCWC.ok -val test28: String = TestGCWC.foo() +val test27: String = TestGCWC.ok +val test28: String = TestGCWC.foo() diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasArgumentsInCompanionObject.fir.kt b/compiler/testData/diagnostics/tests/typealias/typeAliasArgumentsInCompanionObject.fir.kt index 2e44c513075..884089df4bc 100644 --- a/compiler/testData/diagnostics/tests/typealias/typeAliasArgumentsInCompanionObject.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasArgumentsInCompanionObject.fir.kt @@ -6,5 +6,5 @@ class C { typealias C2 = C -val test1: String = C2.OK -val test2: String = C2.OK +val test1: String = C2.OK +val test2: String = C2.OK diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasObject.fir.kt b/compiler/testData/diagnostics/tests/typealias/typeAliasObject.fir.kt index 4e68dac26af..db2a3b2a800 100644 --- a/compiler/testData/diagnostics/tests/typealias/typeAliasObject.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasObject.fir.kt @@ -28,5 +28,5 @@ typealias TestCWC = ClassWithCompanion val test35: ClassWithCompanion.Companion = TestCWC val test36 = TestCWC -val test37: String = TestCWC.ok -val test38: String = TestCWC.foo() +val test37: String = TestCWC.ok +val test38: String = TestCWC.foo()