From ffd30566becd0ce957b58f0fc7668f5084e868eb Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 23 Jul 2020 12:48:43 +0300 Subject: [PATCH] [FIR] Add FirErrorResolvedQualifier for qualifiers with resolve diagnostic --- .../ErrorNodeDiagnosticCollectorComponent.kt | 6 ++ .../jetbrains/kotlin/fir/FirCallResolver.kt | 13 ++-- .../kotlin/fir/resolve/ResolveUtils.kt | 20 +++-- .../expressions/FirErrorResolvedQualifier.kt | 46 ++++++++++++ .../FirAbstractResolvedQualifierBuilder.kt | 37 ++++++++++ .../FirErrorResolvedQualifierBuilder.kt | 72 ++++++++++++++++++ .../builder/FirResolvedQualifierBuilder.kt | 20 +++-- .../impl/FirErrorResolvedQualifierImpl.kt | 73 +++++++++++++++++++ .../kotlin/fir/visitors/FirTransformer.kt | 9 +++ .../kotlin/fir/visitors/FirVisitor.kt | 3 + .../kotlin/fir/visitors/FirVisitorVoid.kt | 9 +++ .../fir/visitors/FirDefaultTransformer.kt | 7 ++ .../kotlin/fir/visitors/FirDefaultVisitor.kt | 4 + .../fir/visitors/FirDefaultVisitorVoid.kt | 6 +- .../fir/tree/generator/BuilderConfigurator.kt | 10 +++ .../fir/tree/generator/FirTreeBuilder.kt | 2 + .../classObjects/ClassObjectVisibility.fir.kt | 2 +- .../classObjects/invisibleClassObjects.fir.kt | 8 +- .../tests/j+k/packageVisibility.fir.kt | 12 +-- .../tests/privateInFile/visibility.fir.kt | 2 +- .../tests/scopes/visibility2.fir.kt | 2 +- .../tests/scopes/visibility3.fir.kt | 2 +- 22 files changed, 333 insertions(+), 32 deletions(-) create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorResolvedQualifier.kt create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractResolvedQualifierBuilder.kt create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorResolvedQualifierBuilder.kt create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorResolvedQualifierImpl.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index da2d75eaec0..9d688e4b7f5 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind.* import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorLoop +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.resolve.calls.CandidateApplicability import org.jetbrains.kotlin.fir.resolve.diagnostics.* @@ -62,6 +63,11 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect runCheck { reportFirDiagnostic(errorFunction.diagnostic, source, it) } } + override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier, data: CheckerContext) { + val source = errorResolvedQualifier.source ?: return + runCheck { reportFirDiagnostic(errorResolvedQualifier.diagnostic, source, it) } + } + private fun reportFirDiagnostic(diagnostic: ConeDiagnostic, source: FirSourceElement, reporter: DiagnosticReporter) { val coneDiagnostic = when (diagnostic) { is ConeUnresolvedReferenceError -> FirErrors.UNRESOLVED_REFERENCE.on(source, diagnostic.name?.asString() ?: "") 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 313b9c5fed1..8b51bf29cd8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -11,10 +11,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildExpressionStub import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedReifiedParameterReference -import org.jetbrains.kotlin.fir.references.FirNamedReference -import org.jetbrains.kotlin.fir.references.FirReference -import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference -import org.jetbrains.kotlin.fir.references.FirSuperReference +import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.references.builder.buildBackingFieldReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference @@ -211,9 +208,15 @@ class FirCallResolver( else -> null } + val diagnostic = when (nameReference) { + is FirErrorReferenceWithCandidate -> nameReference.diagnostic + is FirErrorNamedReference -> nameReference.diagnostic + else -> null + } + when { referencedSymbol is FirClassLikeSymbol<*> -> { - return buildResolvedQualifierForClass(referencedSymbol, nameReference.source, qualifiedAccess.typeArguments) + return buildResolvedQualifierForClass(referencedSymbol, nameReference.source, qualifiedAccess.typeArguments, diagnostic) } referencedSymbol is FirTypeParameterSymbol && referencedSymbol.fir.isReified -> { return buildResolvedReifiedParameterReference { 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 4f17bbd1edd..78c9acb6231 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 @@ -10,11 +10,11 @@ import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.builder.FirResolvedReifiedParameterReferenceBuilder -import org.jetbrains.kotlin.fir.expressions.builder.buildExpressionWithSmartcast -import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.builder.* +import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference @@ -255,16 +255,24 @@ fun BodyResolveComponents.buildResolvedQualifierForClass( regularClass: FirClassLikeSymbol<*>, sourceElement: FirSourceElement? = null, // TODO: Clarify if we actually need type arguments for qualifier? - typeArgumentsForQualifier: List = emptyList() + typeArgumentsForQualifier: List = emptyList(), + diagnostic: ConeDiagnostic? = null ): FirResolvedQualifier { val classId = regularClass.classId - return buildResolvedQualifier { + + val builder: FirAbstractResolvedQualifierBuilder = if (diagnostic == null) { + FirResolvedQualifierBuilder() + } else { + FirErrorResolvedQualifierBuilder().apply { this.diagnostic = diagnostic } + } + + return builder.apply { source = sourceElement packageFqName = classId.packageFqName relativeClassFqName = classId.relativeClassName typeArguments.addAll(typeArgumentsForQualifier) symbol = regularClass - }.apply { + }.build().apply { resultType = if (classId.isLocal) { typeForQualifierByDeclaration(regularClass.fir, resultType, session) ?: session.builtinTypes.unitType diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorResolvedQualifier.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorResolvedQualifier.kt new file mode 100644 index 00000000000..6c63028161b --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorResolvedQualifier.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions + +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +abstract class FirErrorResolvedQualifier : FirResolvedQualifier(), FirDiagnosticHolder { + abstract override val source: FirSourceElement? + abstract override val typeRef: FirTypeRef + abstract override val annotations: List + abstract override val packageFqName: FqName + abstract override val relativeClassFqName: FqName? + abstract override val classId: ClassId? + abstract override val symbol: FirClassLikeSymbol<*>? + abstract override val isNullableLHSForCallableReference: Boolean + abstract override val typeArguments: List + abstract override val diagnostic: ConeDiagnostic + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitErrorResolvedQualifier(this, data) + + abstract override fun replaceTypeRef(newTypeRef: FirTypeRef) + + abstract override fun replaceIsNullableLHSForCallableReference(newIsNullableLHSForCallableReference: Boolean) + + abstract override fun replaceTypeArguments(newTypeArguments: List) + + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirErrorResolvedQualifier + + abstract override fun transformTypeArguments(transformer: FirTransformer, data: D): FirErrorResolvedQualifier +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractResolvedQualifierBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractResolvedQualifierBuilder.kt new file mode 100644 index 00000000000..67ddc59c8d2 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractResolvedQualifierBuilder.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions.builder + +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.builder.FirBuilderDsl +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +@FirBuilderDsl +interface FirAbstractResolvedQualifierBuilder { + abstract var source: FirSourceElement? + abstract var typeRef: FirTypeRef + abstract val annotations: MutableList + abstract var packageFqName: FqName + abstract var relativeClassFqName: FqName? + abstract var classId: ClassId? + abstract var symbol: FirClassLikeSymbol<*>? + abstract var isNullableLHSForCallableReference: Boolean + abstract val typeArguments: MutableList + + fun build(): FirResolvedQualifier +} 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 new file mode 100644 index 00000000000..b2f33550a44 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorResolvedQualifierBuilder.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions.builder + +import kotlin.contracts.* +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder +import org.jetbrains.kotlin.fir.builder.FirBuilderDsl +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractResolvedQualifierBuilder +import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder +import org.jetbrains.kotlin.fir.expressions.impl.FirErrorResolvedQualifierImpl +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +@FirBuilderDsl +class FirErrorResolvedQualifierBuilder : FirAbstractResolvedQualifierBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder { + override var source: FirSourceElement? = null + 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 typeArguments: MutableList = mutableListOf() + lateinit var diagnostic: ConeDiagnostic + + override fun build(): FirErrorResolvedQualifier { + return FirErrorResolvedQualifierImpl( + source, + annotations, + packageFqName, + relativeClassFqName, + classId, + symbol, + isNullableLHSForCallableReference, + typeArguments, + diagnostic, + ) + } + + + @Deprecated("Modification of 'typeRef' has no impact for FirErrorResolvedQualifierBuilder", level = DeprecationLevel.HIDDEN) + override var typeRef: FirTypeRef + get() = throw IllegalStateException() + set(value) { + throw IllegalStateException() + } +} + +@OptIn(ExperimentalContracts::class) +inline fun buildErrorResolvedQualifier(init: FirErrorResolvedQualifierBuilder.() -> Unit): FirErrorResolvedQualifier { + contract { + callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE) + } + return FirErrorResolvedQualifierBuilder().apply(init).build() +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirResolvedQualifierBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirResolvedQualifierBuilder.kt index 7dac6920277..edb069cbf9b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirResolvedQualifierBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirResolvedQualifierBuilder.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractResolvedQualifierBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedQualifierImpl import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol @@ -27,15 +28,15 @@ import org.jetbrains.kotlin.name.FqName */ @FirBuilderDsl -class FirResolvedQualifierBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder { +class FirResolvedQualifierBuilder : FirAbstractResolvedQualifierBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder { override var source: FirSourceElement? = null override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) override val annotations: MutableList = mutableListOf() - lateinit var packageFqName: FqName - var relativeClassFqName: FqName? = null - var symbol: FirClassLikeSymbol<*>? = null - var isNullableLHSForCallableReference: Boolean = false - val typeArguments: MutableList = mutableListOf() + override lateinit var packageFqName: FqName + override var relativeClassFqName: FqName? = null + override var symbol: FirClassLikeSymbol<*>? = null + override var isNullableLHSForCallableReference: Boolean = false + override val typeArguments: MutableList = mutableListOf() override fun build(): FirResolvedQualifier { return FirResolvedQualifierImpl( @@ -50,6 +51,13 @@ class FirResolvedQualifierBuilder : FirAnnotationContainerBuilder, FirExpression ) } + + @Deprecated("Modification of 'classId' has no impact for FirResolvedQualifierBuilder", level = DeprecationLevel.HIDDEN) + override var classId: ClassId? + get() = throw IllegalStateException() + set(value) { + throw IllegalStateException() + } } @OptIn(ExperimentalContracts::class) 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 new file mode 100644 index 00000000000..e3b417bc5f3 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorResolvedQualifierImpl.kt @@ -0,0 +1,73 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions.impl + +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +internal class FirErrorResolvedQualifierImpl( + override val source: FirSourceElement?, + 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 typeArguments: MutableList, + override val diagnostic: ConeDiagnostic, +) : FirErrorResolvedQualifier() { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + typeArguments.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorResolvedQualifierImpl { + typeRef = typeRef.transformSingle(transformer, data) + transformAnnotations(transformer, data) + transformTypeArguments(transformer, data) + return this + } + + override fun transformAnnotations(transformer: FirTransformer, data: D): FirErrorResolvedQualifierImpl { + annotations.transformInplace(transformer, data) + return this + } + + override fun transformTypeArguments(transformer: FirTransformer, data: D): FirErrorResolvedQualifierImpl { + typeArguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } + + override fun replaceIsNullableLHSForCallableReference(newIsNullableLHSForCallableReference: Boolean) { + isNullableLHSForCallableReference = newIsNullableLHSForCallableReference + } + + override fun replaceTypeArguments(newTypeArguments: List) { + typeArguments.clear() + typeArguments.addAll(newTypeArguments) + } +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index 2ed58a0d3de..a05c71bd0bf 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -101,6 +101,7 @@ import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirResolvedReifiedParameterReference import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall @@ -521,6 +522,10 @@ abstract class FirTransformer : FirVisitor { + return transformElement(errorResolvedQualifier, data) + } + open fun transformResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference, data: D): CompositeTransformResult { return transformElement(resolvedReifiedParameterReference, data) } @@ -1021,6 +1026,10 @@ abstract class FirTransformer : FirVisitor { + return transformErrorResolvedQualifier(errorResolvedQualifier, data) + } + final override fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference, data: D): CompositeTransformResult { return transformResolvedReifiedParameterReference(resolvedReifiedParameterReference, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index 9e1650cdf6e..d9aab1d4a92 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -101,6 +101,7 @@ import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirResolvedReifiedParameterReference import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall @@ -329,6 +330,8 @@ abstract class FirVisitor { open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R = visitElement(resolvedQualifier, data) + open fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier, data: D): R = visitElement(errorResolvedQualifier, data) + open fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference, data: D): R = visitElement(resolvedReifiedParameterReference, data) open fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): R = visitElement(returnExpression, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index 395cf5aca83..ffd460e8051 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -101,6 +101,7 @@ import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.FirErrorResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirResolvedReifiedParameterReference import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall @@ -519,6 +520,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(resolvedQualifier) } + open fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier) { + visitElement(errorResolvedQualifier) + } + open fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference) { visitElement(resolvedReifiedParameterReference) } @@ -1019,6 +1024,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitResolvedQualifier(resolvedQualifier) } + final override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier, data: Nothing?) { + visitErrorResolvedQualifier(errorResolvedQualifier) + } + final override fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference, data: Nothing?) { visitResolvedReifiedParameterReference(resolvedReifiedParameterReference) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt index 08461902b33..8b92fe99f72 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt @@ -99,5 +99,12 @@ abstract class FirDefaultTransformer : FirTransformer() { override fun transformErrorFunction(errorFunction: FirErrorFunction, data: D): CompositeTransformResult { return transformFunction(errorFunction, data) } + + override fun transformErrorResolvedQualifier( + errorResolvedQualifier: FirErrorResolvedQualifier, + data: D + ): CompositeTransformResult { + return transformResolvedQualifier(errorResolvedQualifier, data) + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt index a0684d88fe1..8cba4f6d678 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt @@ -95,5 +95,9 @@ abstract class FirDefaultVisitor : FirVisitor() { override fun visitErrorFunction(errorFunction: FirErrorFunction, data: D): R { return visitFunction(errorFunction, data) } + + override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier, data: D): R { + return visitResolvedQualifier(errorResolvedQualifier, data) + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt index 18054fca6a2..31a50128e78 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt @@ -95,4 +95,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() { override fun visitErrorFunction(errorFunction: FirErrorFunction) { return visitFunction(errorFunction) } -} \ No newline at end of file + + override fun visitErrorResolvedQualifier(errorResolvedQualifier: FirErrorResolvedQualifier) { + return visitResolvedQualifier(errorResolvedQualifier) + } +} diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt index 6eac4fc18ae..fd07ec7dbce 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt @@ -292,7 +292,17 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree default("symbol", "FirAnonymousInitializerSymbol()") } + val abstractResolvedQualifierBuilder by builder { + fields from resolvedQualifier + } + builder(resolvedQualifier) { + parents += abstractResolvedQualifierBuilder + defaultFalse("isNullableLHSForCallableReference") + } + + builder(errorResolvedQualifier) { + parents += abstractResolvedQualifierBuilder defaultFalse("isNullableLHSForCallableReference") } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index 1a38a5523f2..0d921af2486 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.tree.generator import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder import org.jetbrains.kotlin.fir.tree.generator.model.Element.Kind.* +@Suppress("unused", "MemberVisibilityCanBePrivate") object FirTreeBuilder : AbstractFirTreeBuilder() { val annotationContainer = element("AnnotationContainer", Other) val typeRef = element("TypeRef", TypeRef, annotationContainer) @@ -118,6 +119,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val varargArgumentsExpression = element("VarargArgumentsExpression", Expression, expression) val resolvedQualifier = element("ResolvedQualifier", Expression, expression) + val errorResolvedQualifier = element("ErrorResolvedQualifier", Expression, resolvedQualifier, diagnosticHolder) val resolvedReifiedParameterReference = element("ResolvedReifiedParameterReference", Expression, expression) val returnExpression = element("ReturnExpression", Expression, jump) val stringConcatenationCall = element("StringConcatenationCall", Expression, call, expression) diff --git a/compiler/testData/diagnostics/tests/classObjects/ClassObjectVisibility.fir.kt b/compiler/testData/diagnostics/tests/classObjects/ClassObjectVisibility.fir.kt index d9f4b9a1864..ff02cf20513 100644 --- a/compiler/testData/diagnostics/tests/classObjects/ClassObjectVisibility.fir.kt +++ b/compiler/testData/diagnostics/tests/classObjects/ClassObjectVisibility.fir.kt @@ -2,7 +2,7 @@ package foo fun test() { A.d - A.Companion.f + A.Companion.f B.D CCC CCC.classObjectVar diff --git a/compiler/testData/diagnostics/tests/classObjects/invisibleClassObjects.fir.kt b/compiler/testData/diagnostics/tests/classObjects/invisibleClassObjects.fir.kt index eec44faa2b1..1dc41911386 100644 --- a/compiler/testData/diagnostics/tests/classObjects/invisibleClassObjects.fir.kt +++ b/compiler/testData/diagnostics/tests/classObjects/invisibleClassObjects.fir.kt @@ -35,14 +35,14 @@ import a.D fun test() { f(A) - f(B) + f(B) f(C) - f(D) + f(D) A.foo() - B.bar() + B.bar() C.baz() - D.quux() + D.quux() a.A.foo() a.C.baz() diff --git a/compiler/testData/diagnostics/tests/j+k/packageVisibility.fir.kt b/compiler/testData/diagnostics/tests/j+k/packageVisibility.fir.kt index 041d54b5500..7bef5db57aa 100644 --- a/compiler/testData/diagnostics/tests/j+k/packageVisibility.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/packageVisibility.fir.kt @@ -28,9 +28,9 @@ import a.MyJavaClass val mc1 = MyJavaClass() -val x = MyJavaClass.staticMethod() -val y = MyJavaClass.NestedClass.staticMethodOfNested() -val z = MyJavaClass.NestedClass() +val x = MyJavaClass.staticMethod() +val y = MyJavaClass.NestedClass.staticMethodOfNested() +val z = MyJavaClass.NestedClass() //FILE: c.kt package a.c @@ -39,6 +39,6 @@ import a.MyJavaClass val mc1 = MyJavaClass() -val x = MyJavaClass.staticMethod() -val y = MyJavaClass.NestedClass.staticMethodOfNested() -val z = MyJavaClass.NestedClass() +val x = MyJavaClass.staticMethod() +val y = MyJavaClass.NestedClass.staticMethodOfNested() +val z = MyJavaClass.NestedClass() diff --git a/compiler/testData/diagnostics/tests/privateInFile/visibility.fir.kt b/compiler/testData/diagnostics/tests/privateInFile/visibility.fir.kt index abd889ae431..4e59123b86a 100644 --- a/compiler/testData/diagnostics/tests/privateInFile/visibility.fir.kt +++ b/compiler/testData/diagnostics/tests/privateInFile/visibility.fir.kt @@ -37,7 +37,7 @@ fun test() { val z = x x = 30 - val po = PO + val po = PO val v = xx xx = 40 diff --git a/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt b/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt index f777acc7ef4..ab6af500ded 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/visibility2.fir.kt @@ -30,7 +30,7 @@ fun test() { val u : A = A() val a : java.util.Arrays.ArrayList; - val po = PO + val po = PO } class B : A() {} diff --git a/compiler/testData/diagnostics/tests/scopes/visibility3.fir.kt b/compiler/testData/diagnostics/tests/scopes/visibility3.fir.kt index 3da4f8c66c5..0834d3c5320 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility3.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/visibility3.fir.kt @@ -33,7 +33,7 @@ fun test() { val z = x x = 30 - val po = PO + val po = PO } class B : A() {}