From 08e9a3bc4fd5463c1ae75c9ec7d50e7c657d1e08 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Fri, 27 Aug 2021 17:20:50 +0300 Subject: [PATCH] Process `FirErrorResolvedQualifier`s in `KtFirReferenceShortener` Also, add `classId` default value to the `FirErrorResolvedQualifierImpl` just as in `FirResolvedQualifierImpl` - it seemed inconsistent that we can have a class symbol in error-resolved qualifier, but the `classId` field will be `null` --- .../FirErrorResolvedQualifierBuilder.kt | 9 ++++++-- .../impl/FirErrorResolvedQualifierImpl.kt | 4 +++- .../generator/ImplementationConfigurator.kt | 23 ++++++++++++------- .../fir/components/KtFirReferenceShortener.kt | 7 ++++++ 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorResolvedQualifierBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorResolvedQualifierBuilder.kt index 164bd8a16af..23a4c000b6f 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorResolvedQualifierBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorResolvedQualifierBuilder.kt @@ -34,7 +34,6 @@ class FirErrorResolvedQualifierBuilder : FirAbstractResolvedQualifierBuilder, Fi override val annotations: MutableList = mutableListOf() override lateinit var packageFqName: FqName override var relativeClassFqName: FqName? = null - override var classId: ClassId? = null override var symbol: FirClassLikeSymbol<*>? = null override var isNullableLHSForCallableReference: Boolean = false override val nonFatalDiagnostics: MutableList = mutableListOf() @@ -47,7 +46,6 @@ class FirErrorResolvedQualifierBuilder : FirAbstractResolvedQualifierBuilder, Fi annotations, packageFqName, relativeClassFqName, - classId, symbol, isNullableLHSForCallableReference, nonFatalDiagnostics, @@ -64,6 +62,13 @@ class FirErrorResolvedQualifierBuilder : FirAbstractResolvedQualifierBuilder, Fi throw IllegalStateException() } + @Deprecated("Modification of 'classId' has no impact for FirErrorResolvedQualifierBuilder", level = DeprecationLevel.HIDDEN) + override var classId: ClassId? + get() = throw IllegalStateException() + set(_) { + throw IllegalStateException() + } + @Deprecated("Modification of 'resolvedToCompanionObject' has no impact for FirErrorResolvedQualifierBuilder", level = DeprecationLevel.HIDDEN) override var resolvedToCompanionObject: Boolean get() = throw IllegalStateException() diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorResolvedQualifierImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorResolvedQualifierImpl.kt index b5223caa4f3..e10279fb906 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorResolvedQualifierImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorResolvedQualifierImpl.kt @@ -27,7 +27,6 @@ internal class FirErrorResolvedQualifierImpl( override val annotations: MutableList, override val packageFqName: FqName, override val relativeClassFqName: FqName?, - override val classId: ClassId?, override val symbol: FirClassLikeSymbol<*>?, override var isNullableLHSForCallableReference: Boolean, override val nonFatalDiagnostics: MutableList, @@ -35,6 +34,9 @@ internal class FirErrorResolvedQualifierImpl( override val diagnostic: ConeDiagnostic, ) : FirErrorResolvedQualifier() { override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val classId: ClassId? get() = relativeClassFqName?.let { + ClassId(packageFqName, it, false) +} override val resolvedToCompanionObject: Boolean get() = false override fun acceptChildren(visitor: FirVisitor, data: D) { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index 824535c74f6..c2de6d21a90 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -276,14 +276,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(resolvedQualifier) { isMutable("packageFqName", "relativeClassFqName", "isNullableLHSForCallableReference") - default("classId") { - value = """ - |relativeClassFqName?.let { - | ClassId(packageFqName, it, false) - |} - """.trimMargin() - withGetter = true - } + defaultClassIdFromRelativeClassName() } impl(resolvedReifiedParameterReference) @@ -495,6 +488,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(errorResolvedQualifier) { defaultFalse("resolvedToCompanionObject", withGetter = true) + defaultClassIdFromRelativeClassName() } noImpl(userTypeRef) @@ -574,4 +568,17 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() useTypes(implicitTypeRefType) } } + + private fun ImplementationContext.defaultClassIdFromRelativeClassName() { + default("classId") { + value = """ + |relativeClassFqName?.let { + | ClassId(packageFqName, it, false) + |} + """.trimMargin() + withGetter = true + } + } } + + diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt index c70d652a6b2..89a71349ac4 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvedImport import org.jetbrains.kotlin.fir.declarations.builder.buildImport import org.jetbrains.kotlin.fir.declarations.builder.buildResolvedImport +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression @@ -317,6 +318,12 @@ private class ElementsToShortenCollector( processTypeQualifier(resolvedQualifier) } + override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier) { + super.visitErrorResolvedQualifier(errorResolvedQualifier) + + processTypeQualifier(errorResolvedQualifier) + } + override fun visitResolvedNamedReference(resolvedNamedReference: FirResolvedNamedReference) { super.visitResolvedNamedReference(resolvedNamedReference)