From f238ffa4bf38f0572783d4eccb720f45a0b30fc8 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 17 Aug 2023 15:45:17 +0300 Subject: [PATCH] [FIR] Make FirErrorConstructor a FirDiagnosticHolder --- .../file/structure/FileStructureElement.kt | 6 +- .../lazy/resolve/FirLazyBodiesCalculator.kt | 3 + ...ommonConstructorDelegationIssuesChecker.kt | 5 +- .../FirPrimaryConstructorSuperTypeChecker.kt | 5 +- .../DeclarationCheckersDiagnosticComponent.kt | 4 + .../ErrorNodeDiagnosticCollectorComponent.kt | 4 + .../kotlin/fir/java/JvmSupertypeUpdater.kt | 8 +- .../LightTreeRawFirDeclarationBuilder.kt | 8 +- .../kotlin/fir/builder/PsiRawFirBuilder.kt | 8 +- .../fir/builder/AbstractRawFirBuilder.kt | 3 + .../jetbrains/kotlin/fir/FirCallResolver.kt | 5 +- .../FirStatusResolveTransformer.kt | 3 + .../transformers/FirTypeResolveTransformer.kt | 3 + ...bstractBodyResolveTransformerDispatcher.kt | 4 + .../FirDeclarationsResolveTransformer.kt | 3 + ...actContractResolveTransformerDispatcher.kt | 3 + .../mpp/FirExpectActualMatcherTransformer.kt | 3 + ...FirSpecificAnnotationResolveTransformer.kt | 3 + ...irAnnotationArgumentsMappingTransformer.kt | 3 + ...irAnnotationArgumentsResolveTransformer.kt | 3 + .../resolve/diagnostics/ConeDiagnostics.kt | 4 - .../FirErrorPrimaryConstructor.kt | 98 +++++++++++++++++++ ...t => FirErrorPrimaryConstructorBuilder.kt} | 19 ++-- ...r.kt => FirErrorPrimaryConstructorImpl.kt} | 30 +++--- .../kotlin/fir/visitors/FirDefaultVisitor.kt | 1 + .../fir/visitors/FirDefaultVisitorVoid.kt | 1 + .../kotlin/fir/visitors/FirTransformer.kt | 9 ++ .../kotlin/fir/visitors/FirVisitor.kt | 3 + .../kotlin/fir/visitors/FirVisitorVoid.kt | 9 ++ .../fir/diagnostics/ConeSimpleDiagnostic.kt | 4 + .../fir/renderer/FirDeclarationRenderer.kt | 3 +- .../kotlin/fir/renderer/FirRenderer.kt | 2 + .../fir/tree/generator/BuilderConfigurator.kt | 10 +- .../fir/tree/generator/FirTreeBuilder.kt | 1 + .../generator/ImplementationConfigurator.kt | 4 +- 35 files changed, 239 insertions(+), 46 deletions(-) create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirErrorPrimaryConstructor.kt rename compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/{FirErrorConstructorBuilder.kt => FirErrorPrimaryConstructorBuilder.kt} (86%) rename compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/{FirErrorConstructor.kt => FirErrorPrimaryConstructorImpl.kt} (89%) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructureElement.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructureElement.kt index 28c96c4f4e1..16176986d45 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructureElement.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructureElement.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptStatement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.correspondingProperty import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorConstructor import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCodeFragmentSymbol @@ -261,13 +260,16 @@ internal class NonReanalyzableClassDeclarationStructureElement( override fun visitConstructor(constructor: FirConstructor, data: MutableMap) { if ( - (constructor is FirPrimaryConstructor || constructor is FirErrorConstructor) && + (constructor is FirPrimaryConstructor || constructor is FirErrorPrimaryConstructor) && constructor.source?.kind == KtFakeSourceElementKind.ImplicitConstructor ) { NonReanalyzableNonClassDeclarationStructureElement.Recorder.visitConstructor(constructor, data) } } + override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: MutableMap) = + visitConstructor(errorPrimaryConstructor, data) + override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: MutableMap) { } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt index 8f9d9f1f053..c0b540e1926 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/FirLazyBodiesCalculator.kt @@ -448,6 +448,9 @@ private abstract class FirLazyBodiesCalculatorTransformer : FirTransformer) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformProperty(property: FirProperty, data: PersistentList): FirProperty { if (needCalculatingLazyBodyForProperty(property)) { val designation = FirDesignation(data, property) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCommonConstructorDelegationIssuesChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCommonConstructorDelegationIssuesChecker.kt index c57b92fa96d..d705e230097 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCommonConstructorDelegationIssuesChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCommonConstructorDelegationIssuesChecker.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.utils.isExpect @@ -34,7 +35,7 @@ object FirCommonConstructorDelegationIssuesChecker : FirRegularClassChecker() { for (it in declaration.declarations) { if (it is FirConstructor) { - if (!it.isPrimary) { + if (!it.isPrimary || it is FirErrorPrimaryConstructor) { otherConstructors += it it.findCycle(cyclicConstructors)?.let { visited -> @@ -81,7 +82,7 @@ object FirCommonConstructorDelegationIssuesChecker : FirRegularClassChecker() { var it = this var delegated = this.getDelegated() - while (!it.isPrimary && delegated != null) { + while (!(it.isPrimary && it !is FirErrorPrimaryConstructor) && delegated != null) { if (delegated in visitedConstructors || delegated in knownCyclicConstructors) { return visitedConstructors } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPrimaryConstructorSuperTypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPrimaryConstructorSuperTypeChecker.kt index ffada1e5d94..33562f1aba8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPrimaryConstructorSuperTypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPrimaryConstructorSuperTypeChecker.kt @@ -14,9 +14,11 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.utils.isInterface import org.jetbrains.kotlin.fir.declarations.primaryConstructorIfAny +import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef @@ -41,7 +43,8 @@ object FirPrimaryConstructorSuperTypeChecker : FirClassChecker() { val primaryConstructorSymbol = declaration.primaryConstructorIfAny(context.session) - if (primaryConstructorSymbol == null) { + @OptIn(SymbolInternals::class) + if (primaryConstructorSymbol == null || primaryConstructorSymbol.fir is FirErrorPrimaryConstructor) { checkSupertypeInitializedWithoutPrimaryConstructor(declaration, reporter, context) } else { checkSuperTypeNotInitialized(primaryConstructorSymbol, declaration, context, reporter) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt index 78f8eae47d8..7c52bc17323 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt @@ -59,6 +59,10 @@ class DeclarationCheckersDiagnosticComponent( checkers.allConstructorCheckers.check(constructor, data) } + override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: CheckerContext) { + checkers.allConstructorCheckers.check(errorPrimaryConstructor, data) + } + override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) { checkers.allAnonymousFunctionCheckers.check(anonymousFunction, data) } 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 ed0b8825c08..b3df5d784bf 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 @@ -126,6 +126,10 @@ class ErrorNodeDiagnosticCollectorComponent( reportFirDiagnostic(errorImport.diagnostic, source, data) } + override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: CheckerContext) { + reportFirDiagnostic(errorPrimaryConstructor.diagnostic, errorPrimaryConstructor.source, data) + } + private fun reportFirDiagnostic( diagnostic: ConeDiagnostic, source: KtSourceElement?, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmSupertypeUpdater.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmSupertypeUpdater.kt index 6af98a76d34..c8a9e283777 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmSupertypeUpdater.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmSupertypeUpdater.kt @@ -9,10 +9,7 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirClass -import org.jetbrains.kotlin.fir.declarations.FirConstructor -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.hasAnnotationSafe +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isData import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirStatement @@ -79,6 +76,9 @@ class JvmSupertypeUpdater(private val session: FirSession) : PlatformSupertypeUp return constructor.transformDelegatedConstructor(this, data) } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ScopeSession) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformDelegatedConstructorCall( delegatedConstructorCall: FirDelegatedConstructorCall, data: ScopeSession diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt index 9cf52e0b6fd..900b05235e2 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt @@ -968,7 +968,13 @@ class LightTreeRawFirDeclarationBuilder( isFromEnumClass = classWrapper.isEnum() } - val builder = if (isErrorConstructor) FirErrorConstructorBuilder() else FirPrimaryConstructorBuilder() + val builder = if (isErrorConstructor) { + FirErrorConstructorBuilder().apply { + diagnostic = ConeNoConstructorError + } + } else { + FirPrimaryConstructorBuilder() + } builder.apply { source = primaryConstructor?.toFirSourceElement() ?: selfTypeSource?.fakeElement(KtFakeSourceElementKind.ImplicitConstructor) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index 90ea9557edb..82f762c9098 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -1059,7 +1059,13 @@ open class PsiRawFirBuilder( isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private isFromEnumClass = owner.hasModifier(ENUM_KEYWORD) } - val builder = if (isErrorConstructor) FirErrorConstructorBuilder() else FirPrimaryConstructorBuilder() + val builder = if (isErrorConstructor) { + FirErrorConstructorBuilder().apply { + diagnostic = ConeNoConstructorError + } + } else { + FirPrimaryConstructorBuilder() + } builder.apply { source = constructorSource moduleData = baseModuleData diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt index c5780d1b65f..94b59394914 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilder.kt @@ -285,6 +285,9 @@ abstract class AbstractRawFirBuilder(val baseSession: FirSession, val context } } + fun createErrorConstructorBuilder(diagnostic: ConeDiagnostic) = + FirErrorPrimaryConstructorBuilder().apply { this.diagnostic = diagnostic } + fun FirLoopBuilder.prepareTarget(firLabelUser: Any): FirLoopTarget = prepareTarget(context.getLastLabel(firLabelUser)) fun FirLoopBuilder.prepareTarget(label: FirLabel?): FirLoopTarget { 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 6260d2001e8..8e787e9ee5b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.hasExplicitBackingField import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.declarations.utils.isInterface import org.jetbrains.kotlin.fir.declarations.utils.isReferredViaField -import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic -import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic -import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic -import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind +import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedReifiedParameterReference diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 45c58b02945..7be1b779ca8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -418,6 +418,9 @@ abstract class AbstractFirStatusResolveTransformer( return transformDeclaration(constructor, data) as FirStatement } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: FirResolvedDeclarationStatus?) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, data: FirResolvedDeclarationStatus?, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index f725cfec29e..2bc49027919 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -160,6 +160,9 @@ open class FirTypeResolveTransformer( } } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Any?) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirTypeAlias = whileAnalysing(session, typeAlias) { withScopeCleanup { addTypeParametersScope(typeAlias) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformerDispatcher.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformerDispatcher.kt index 845480b4d2f..d9f395206bb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformerDispatcher.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformerDispatcher.kt @@ -363,6 +363,10 @@ abstract class FirAbstractBodyResolveTransformerDispatcher( return declarationsTransformer?.transformConstructor(constructor, data) ?: constructor } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode): FirStatement { + return declarationsTransformer?.transformErrorPrimaryConstructor(errorPrimaryConstructor, data) ?: errorPrimaryConstructor + } + override fun transformAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: ResolutionMode diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 18d92fa46a7..60e5c70148e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -689,6 +689,9 @@ open class FirDeclarationsResolveTransformer( return doTransformConstructor(constructor, data) } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) = + transformConstructor(errorPrimaryConstructor, data) + private fun doTransformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { val owningClass = context.containerIfAny as? FirRegularClass diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt index 77f3ad425aa..bbb87e1e639 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt @@ -300,6 +300,9 @@ abstract class FirAbstractContractResolveTransformerDispatcher( } } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry { return enumEntry } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt index db523fe330d..5ac701c2404 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatcherTransformer.kt @@ -70,6 +70,9 @@ open class FirExpectActualMatcherTransformer( return constructor } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Nothing?) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): FirStatement { transformMemberDeclaration(simpleFunction) return simpleFunction diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt index 6e8dd557a87..c48e1296b01 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt @@ -480,6 +480,9 @@ abstract class AbstractFirSpecificAnnotationResolveTransformer( } as FirConstructor } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Nothing?) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): FirStatement { return transformCallableDeclarationForDeprecations(enumEntry, data) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsMappingTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsMappingTransformer.kt index a9b4e88f45d..c2675997aec 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsMappingTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsMappingTransformer.kt @@ -148,6 +148,9 @@ private class FirDeclarationsResolveTransformerForAnnotationArgumentsMapping( return constructor } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement { context.withValueParameter(valueParameter, session) { valueParameter diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt index 4bee3df4c65..72e696741f8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt @@ -103,6 +103,9 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations( return constructor } + override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) = + transformConstructor(errorPrimaryConstructor, data) + override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement { valueParameter .transformAnnotations(transformer, data) diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt index b7760579b53..6051fe4959e 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt @@ -82,10 +82,6 @@ class ConeFunctionExpectedError(val expression: String, val type: ConeKotlinType override val reason: String get() = "Expression '$expression' of type '$type' cannot be invoked as a function" } -object ConeNoConstructorError : ConeDiagnostic { - override val reason: String get() = "This type does not have a constructor" -} - class ConeResolutionToClassifierError( override val candidate: AbstractCandidate, override val candidateSymbol: FirRegularClassSymbol diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirErrorPrimaryConstructor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirErrorPrimaryConstructor.kt new file mode 100644 index 00000000000..1881004a8b7 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirErrorPrimaryConstructor.kt @@ -0,0 +1,98 @@ +/* + * Copyright 2010-2023 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.declarations + +import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirModuleData +import org.jetbrains.kotlin.fir.contracts.FirContractDescription +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder +import org.jetbrains.kotlin.fir.expressions.FirAnnotation +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol +import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +abstract class FirErrorPrimaryConstructor : FirConstructor(), FirDiagnosticHolder { + abstract override val source: KtSourceElement? + abstract override val moduleData: FirModuleData + abstract override val origin: FirDeclarationOrigin + abstract override val attributes: FirDeclarationAttributes + abstract override val typeParameters: List + abstract override val status: FirDeclarationStatus + abstract override val returnTypeRef: FirTypeRef + abstract override val receiverParameter: FirReceiverParameter? + abstract override val deprecationsProvider: DeprecationsProvider + abstract override val containerSource: DeserializedContainerSource? + abstract override val dispatchReceiverType: ConeSimpleKotlinType? + abstract override val contextReceivers: List + abstract override val controlFlowGraphReference: FirControlFlowGraphReference? + abstract override val valueParameters: List + abstract override val contractDescription: FirContractDescription + abstract override val annotations: List + abstract override val symbol: FirConstructorSymbol + abstract override val delegatedConstructor: FirDelegatedConstructorCall? + abstract override val body: FirBlock? + abstract override val isPrimary: Boolean + abstract override val diagnostic: ConeDiagnostic + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitErrorPrimaryConstructor(this, data) + + @Suppress("UNCHECKED_CAST") + override fun transform(transformer: FirTransformer, data: D): E = + transformer.transformErrorPrimaryConstructor(this, data) as E + + abstract override fun replaceStatus(newStatus: FirDeclarationStatus) + + abstract override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) + + abstract override fun replaceReceiverParameter(newReceiverParameter: FirReceiverParameter?) + + abstract override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) + + abstract override fun replaceContextReceivers(newContextReceivers: List) + + abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) + + abstract override fun replaceValueParameters(newValueParameters: List) + + abstract override fun replaceContractDescription(newContractDescription: FirContractDescription) + + abstract override fun replaceAnnotations(newAnnotations: List) + + abstract override fun replaceDelegatedConstructor(newDelegatedConstructor: FirDelegatedConstructorCall?) + + abstract override fun replaceBody(newBody: FirBlock?) + + abstract override fun transformTypeParameters(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformStatus(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformReceiverParameter(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformContractDescription(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformDelegatedConstructor(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor + + abstract override fun transformBody(transformer: FirTransformer, data: D): FirErrorPrimaryConstructor +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirErrorConstructorBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirErrorPrimaryConstructorBuilder.kt similarity index 86% rename from compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirErrorConstructorBuilder.kt rename to compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirErrorPrimaryConstructorBuilder.kt index 03e3a659ce8..0b95f1aa412 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirErrorConstructorBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirErrorPrimaryConstructorBuilder.kt @@ -17,11 +17,11 @@ import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription import org.jetbrains.kotlin.fir.declarations.DeprecationsProvider -import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirContextReceiver import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolveState @@ -31,7 +31,8 @@ import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess import org.jetbrains.kotlin.fir.declarations.UnresolvedDeprecationProvider import org.jetbrains.kotlin.fir.declarations.asResolveState import org.jetbrains.kotlin.fir.declarations.builder.FirAbstractConstructorBuilder -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorConstructor +import org.jetbrains.kotlin.fir.declarations.impl.FirErrorPrimaryConstructorImpl +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall @@ -48,7 +49,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ */ @FirBuilderDsl -class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationContainerBuilder { +class FirErrorPrimaryConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationContainerBuilder { override var source: KtSourceElement? = null override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR override lateinit var moduleData: FirModuleData @@ -68,10 +69,11 @@ class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationC override lateinit var symbol: FirConstructorSymbol override var delegatedConstructor: FirDelegatedConstructorCall? = null override var body: FirBlock? = null + lateinit var diagnostic: ConeDiagnostic @OptIn(FirImplementationDetail::class) - override fun build(): FirConstructor { - return FirErrorConstructor( + override fun build(): FirErrorPrimaryConstructor { + return FirErrorPrimaryConstructorImpl( source, resolvePhase, moduleData, @@ -91,11 +93,12 @@ class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationC symbol, delegatedConstructor, body, + diagnostic, ) } - @Deprecated("Modification of 'controlFlowGraphReference' has no impact for FirErrorConstructorBuilder", level = DeprecationLevel.HIDDEN) + @Deprecated("Modification of 'controlFlowGraphReference' has no impact for FirErrorPrimaryConstructorBuilder", level = DeprecationLevel.HIDDEN) override var controlFlowGraphReference: FirControlFlowGraphReference? get() = throw IllegalStateException() set(_) { @@ -104,9 +107,9 @@ class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationC } @OptIn(ExperimentalContracts::class) -inline fun buildErrorConstructor(init: FirErrorConstructorBuilder.() -> Unit): FirConstructor { +inline fun buildErrorPrimaryConstructor(init: FirErrorPrimaryConstructorBuilder.() -> Unit): FirErrorPrimaryConstructor { contract { callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE) } - return FirErrorConstructorBuilder().apply(init).build() + return FirErrorPrimaryConstructorBuilder().apply(init).build() } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirErrorConstructor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirErrorPrimaryConstructorImpl.kt similarity index 89% rename from compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirErrorConstructor.kt rename to compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirErrorPrimaryConstructorImpl.kt index af1d5e9727b..e81b811aab6 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirErrorConstructor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirErrorPrimaryConstructorImpl.kt @@ -12,17 +12,18 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.declarations.DeprecationsProvider -import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirContextReceiver import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolveState import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.asResolveState +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall @@ -41,7 +42,7 @@ import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess * DO NOT MODIFY IT MANUALLY */ -class FirErrorConstructor @FirImplementationDetail constructor( +class FirErrorPrimaryConstructorImpl @FirImplementationDetail constructor( override val source: KtSourceElement?, resolvePhase: FirResolvePhase, override val moduleData: FirModuleData, @@ -61,9 +62,10 @@ class FirErrorConstructor @FirImplementationDetail constructor( override val symbol: FirConstructorSymbol, override var delegatedConstructor: FirDelegatedConstructorCall?, override var body: FirBlock?, -) : FirConstructor() { + override val diagnostic: ConeDiagnostic, +) : FirErrorPrimaryConstructor() { override var controlFlowGraphReference: FirControlFlowGraphReference? = null - override val isPrimary: Boolean get() = false + override val isPrimary: Boolean get() = true init { symbol.bind(this) @@ -85,7 +87,7 @@ class FirErrorConstructor @FirImplementationDetail constructor( body?.accept(visitor, data) } - override fun transformChildren(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { transformTypeParameters(transformer, data) transformStatus(transformer, data) transformReturnTypeRef(transformer, data) @@ -100,47 +102,47 @@ class FirErrorConstructor @FirImplementationDetail constructor( return this } - override fun transformTypeParameters(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformTypeParameters(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { typeParameters.transformInplace(transformer, data) return this } - override fun transformStatus(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformStatus(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { status = status.transform(transformer, data) return this } - override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { returnTypeRef = returnTypeRef.transform(transformer, data) return this } - override fun transformReceiverParameter(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformReceiverParameter(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { receiverParameter = receiverParameter?.transform(transformer, data) return this } - override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { valueParameters.transformInplace(transformer, data) return this } - override fun transformContractDescription(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformContractDescription(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { contractDescription = contractDescription.transform(transformer, data) return this } - override fun transformAnnotations(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformAnnotations(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { annotations.transformInplace(transformer, data) return this } - override fun transformDelegatedConstructor(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformDelegatedConstructor(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { delegatedConstructor = delegatedConstructor?.transform(transformer, data) return this } - override fun transformBody(transformer: FirTransformer, data: D): FirErrorConstructor { + override fun transformBody(transformer: FirTransformer, data: D): FirErrorPrimaryConstructorImpl { body = body?.transform(transformer, data) return this } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt index e33413bfd75..afc30891ca5 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt @@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirDanglingModifierList import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt index cd68a2bf5fc..b7c2e20e060 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt @@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirDanglingModifierList import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression 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 981469f4933..9431b688ee8 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 @@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirDanglingModifierList import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression @@ -546,6 +547,10 @@ abstract class FirTransformer : FirVisitor() { return transformElement(errorProperty, data) } + open fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: D): FirStatement { + return transformElement(errorPrimaryConstructor, data) + } + open fun transformDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): FirDanglingModifierList { return transformElement(danglingModifierList, data) } @@ -1166,6 +1171,10 @@ abstract class FirTransformer : FirVisitor() { return transformErrorProperty(errorProperty, data) } + final override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: D): FirStatement { + return transformErrorPrimaryConstructor(errorPrimaryConstructor, data) + } + final override fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): FirDanglingModifierList { return transformDanglingModifierList(danglingModifierList, 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 adfb3d8bd05..250df3a7668 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 @@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirDanglingModifierList import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression @@ -357,6 +358,8 @@ abstract class FirVisitor { open fun visitErrorProperty(errorProperty: FirErrorProperty, data: D): R = visitElement(errorProperty, data) + open fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: D): R = visitElement(errorPrimaryConstructor, data) + open fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): R = visitElement(danglingModifierList, data) open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R = visitElement(qualifiedAccessExpression, 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 65caf749d51..b3aa0d59510 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 @@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty +import org.jetbrains.kotlin.fir.declarations.FirErrorPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.FirDanglingModifierList import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression @@ -545,6 +546,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(errorProperty) } + open fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor) { + visitElement(errorPrimaryConstructor) + } + open fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList) { visitElement(danglingModifierList) } @@ -1165,6 +1170,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitErrorProperty(errorProperty) } + final override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Nothing?) { + visitErrorPrimaryConstructor(errorPrimaryConstructor) + } + final override fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: Nothing?) { visitDanglingModifierList(danglingModifierList) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt index 77b22cf9e87..a101985ecb3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt @@ -79,6 +79,10 @@ object ConeUnsupportedClassLiteralsWithEmptyLhs : ConeDiagnostic { override val reason: String get() = "No receiver in class literal" } +object ConeNoConstructorError : ConeDiagnostic { + override val reason: String get() = "This type does not have a constructor" +} + enum class DiagnosticKind { ExpressionExpected, NotLoopLabel, diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt index dc43d2c8740..cda6ecd16c1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirDeclarationRenderer.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.renderer import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorConstructor import org.jetbrains.kotlin.fir.isCatchParameter import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly @@ -26,7 +25,7 @@ open class FirDeclarationRenderer( typeRenderer.render(it) printer.print(".") } - if (declaration is FirErrorConstructor) { + if (declaration is FirErrorPrimaryConstructor) { printer.print("error_") } printer.print("constructor") diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index f5324dadd7c..f5305ef137e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -399,6 +399,8 @@ class FirRenderer( bodyRenderer?.renderBody(body, listOfNotNull(delegatedConstructor)) } + override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor) = visitConstructor(errorPrimaryConstructor) + override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) { annotationRenderer?.render(propertyAccessor) modifierRenderer?.renderModifiers(propertyAccessor) 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 c6cf7c4269c..e13ff2dd31f 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 @@ -93,7 +93,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree fields from functionCall } - for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl", "FirErrorConstructor")) { + for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl")) { builder(constructor, constructorType) { parents += abstractConstructorBuilder defaultNull("delegatedConstructor") @@ -103,6 +103,14 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree } } + builder(errorPrimaryConstructor) { + parents += abstractConstructorBuilder + defaultNull("delegatedConstructor") + defaultNull("body") + default("contractDescription", "FirEmptyContractDescription") + useTypes(emptyContractDescriptionType) + } + builder(constructor, "FirConstructorImpl") { openBuilder() withCopy() 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 7f2828c5adf..5300c292e2c 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 @@ -124,6 +124,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val errorExpression by element(Expression, expression, diagnosticHolder) val errorFunction by element(Declaration, function, diagnosticHolder) val errorProperty by element(Declaration, variable, diagnosticHolder) + val errorPrimaryConstructor by element(Declaration, constructor, diagnosticHolder) val danglingModifierList by element(Declaration, declaration, diagnosticHolder) val qualifiedAccessExpression by element(Expression, expression, resolvable, contextReceiverArgumentListOwner) val qualifiedErrorAccessExpression by element(Expression, expression, diagnosticHolder) 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 151ab83df96..00b0c246d2b 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 @@ -26,9 +26,9 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() defaultTrue("isPrimary", withGetter = true) } - impl(constructor, "FirErrorConstructor") { + impl(errorPrimaryConstructor) { publicImplementation() - defaultFalse("isPrimary", withGetter = true) + defaultTrue("isPrimary", withGetter = true) } impl(outerClassTypeParameterRef) {