[FIR] Make FirErrorConstructor a FirDiagnosticHolder

This commit is contained in:
Nikolay Lunyak
2023-08-17 15:45:17 +03:00
committed by Space Team
parent 673b4b4d52
commit f238ffa4bf
35 changed files with 239 additions and 46 deletions
@@ -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.FirElement
import org.jetbrains.kotlin.fir.correspondingProperty import org.jetbrains.kotlin.fir.correspondingProperty
import org.jetbrains.kotlin.fir.declarations.* 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.declarations.impl.FirPrimaryConstructor
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCodeFragmentSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCodeFragmentSymbol
@@ -261,13 +260,16 @@ internal class NonReanalyzableClassDeclarationStructureElement(
override fun visitConstructor(constructor: FirConstructor, data: MutableMap<KtElement, FirElement>) { override fun visitConstructor(constructor: FirConstructor, data: MutableMap<KtElement, FirElement>) {
if ( if (
(constructor is FirPrimaryConstructor || constructor is FirErrorConstructor) && (constructor is FirPrimaryConstructor || constructor is FirErrorPrimaryConstructor) &&
constructor.source?.kind == KtFakeSourceElementKind.ImplicitConstructor constructor.source?.kind == KtFakeSourceElementKind.ImplicitConstructor
) { ) {
NonReanalyzableNonClassDeclarationStructureElement.Recorder.visitConstructor(constructor, data) NonReanalyzableNonClassDeclarationStructureElement.Recorder.visitConstructor(constructor, data)
} }
} }
override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: MutableMap<KtElement, FirElement>) =
visitConstructor(errorPrimaryConstructor, data)
override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: MutableMap<KtElement, FirElement>) { override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: MutableMap<KtElement, FirElement>) {
} }
@@ -448,6 +448,9 @@ private abstract class FirLazyBodiesCalculatorTransformer : FirTransformer<Persi
return constructor return constructor
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: PersistentList<FirRegularClass>) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformProperty(property: FirProperty, data: PersistentList<FirRegularClass>): FirProperty { override fun transformProperty(property: FirProperty, data: PersistentList<FirRegularClass>): FirProperty {
if (needCalculatingLazyBodyForProperty(property)) { if (needCalculatingLazyBodyForProperty(property)) {
val designation = FirDesignation(data, property) val designation = FirDesignation(data, property)
@@ -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.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.declarations.FirConstructor 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.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isExpect
@@ -34,7 +35,7 @@ object FirCommonConstructorDelegationIssuesChecker : FirRegularClassChecker() {
for (it in declaration.declarations) { for (it in declaration.declarations) {
if (it is FirConstructor) { if (it is FirConstructor) {
if (!it.isPrimary) { if (!it.isPrimary || it is FirErrorPrimaryConstructor) {
otherConstructors += it otherConstructors += it
it.findCycle(cyclicConstructors)?.let { visited -> it.findCycle(cyclicConstructors)?.let { visited ->
@@ -81,7 +82,7 @@ object FirCommonConstructorDelegationIssuesChecker : FirRegularClassChecker() {
var it = this var it = this
var delegated = this.getDelegated() var delegated = this.getDelegated()
while (!it.isPrimary && delegated != null) { while (!(it.isPrimary && it !is FirErrorPrimaryConstructor) && delegated != null) {
if (delegated in visitedConstructors || delegated in knownCyclicConstructors) { if (delegated in visitedConstructors || delegated in knownCyclicConstructors) {
return visitedConstructors return visitedConstructors
} }
@@ -14,9 +14,11 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirClass 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.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.utils.isInterface import org.jetbrains.kotlin.fir.declarations.utils.isInterface
import org.jetbrains.kotlin.fir.declarations.primaryConstructorIfAny 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.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef
@@ -41,7 +43,8 @@ object FirPrimaryConstructorSuperTypeChecker : FirClassChecker() {
val primaryConstructorSymbol = declaration.primaryConstructorIfAny(context.session) val primaryConstructorSymbol = declaration.primaryConstructorIfAny(context.session)
if (primaryConstructorSymbol == null) { @OptIn(SymbolInternals::class)
if (primaryConstructorSymbol == null || primaryConstructorSymbol.fir is FirErrorPrimaryConstructor) {
checkSupertypeInitializedWithoutPrimaryConstructor(declaration, reporter, context) checkSupertypeInitializedWithoutPrimaryConstructor(declaration, reporter, context)
} else { } else {
checkSuperTypeNotInitialized(primaryConstructorSymbol, declaration, context, reporter) checkSuperTypeNotInitialized(primaryConstructorSymbol, declaration, context, reporter)
@@ -59,6 +59,10 @@ class DeclarationCheckersDiagnosticComponent(
checkers.allConstructorCheckers.check(constructor, data) checkers.allConstructorCheckers.check(constructor, data)
} }
override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: CheckerContext) {
checkers.allConstructorCheckers.check(errorPrimaryConstructor, data)
}
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) { override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) {
checkers.allAnonymousFunctionCheckers.check(anonymousFunction, data) checkers.allAnonymousFunctionCheckers.check(anonymousFunction, data)
} }
@@ -126,6 +126,10 @@ class ErrorNodeDiagnosticCollectorComponent(
reportFirDiagnostic(errorImport.diagnostic, source, data) reportFirDiagnostic(errorImport.diagnostic, source, data)
} }
override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: CheckerContext) {
reportFirDiagnostic(errorPrimaryConstructor.diagnostic, errorPrimaryConstructor.source, data)
}
private fun reportFirDiagnostic( private fun reportFirDiagnostic(
diagnostic: ConeDiagnostic, diagnostic: ConeDiagnostic,
source: KtSourceElement?, source: KtSourceElement?,
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.*
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.utils.isData import org.jetbrains.kotlin.fir.declarations.utils.isData
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
@@ -79,6 +76,9 @@ class JvmSupertypeUpdater(private val session: FirSession) : PlatformSupertypeUp
return constructor.transformDelegatedConstructor(this, data) return constructor.transformDelegatedConstructor(this, data)
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ScopeSession) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformDelegatedConstructorCall( override fun transformDelegatedConstructorCall(
delegatedConstructorCall: FirDelegatedConstructorCall, delegatedConstructorCall: FirDelegatedConstructorCall,
data: ScopeSession data: ScopeSession
@@ -968,7 +968,13 @@ class LightTreeRawFirDeclarationBuilder(
isFromEnumClass = classWrapper.isEnum() isFromEnumClass = classWrapper.isEnum()
} }
val builder = if (isErrorConstructor) FirErrorConstructorBuilder() else FirPrimaryConstructorBuilder() val builder = if (isErrorConstructor) {
FirErrorConstructorBuilder().apply {
diagnostic = ConeNoConstructorError
}
} else {
FirPrimaryConstructorBuilder()
}
builder.apply { builder.apply {
source = primaryConstructor?.toFirSourceElement() source = primaryConstructor?.toFirSourceElement()
?: selfTypeSource?.fakeElement(KtFakeSourceElementKind.ImplicitConstructor) ?: selfTypeSource?.fakeElement(KtFakeSourceElementKind.ImplicitConstructor)
@@ -1059,7 +1059,13 @@ open class PsiRawFirBuilder(
isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private isFromSealedClass = owner.hasModifier(SEALED_KEYWORD) && explicitVisibility !== Visibilities.Private
isFromEnumClass = owner.hasModifier(ENUM_KEYWORD) isFromEnumClass = owner.hasModifier(ENUM_KEYWORD)
} }
val builder = if (isErrorConstructor) FirErrorConstructorBuilder() else FirPrimaryConstructorBuilder() val builder = if (isErrorConstructor) {
FirErrorConstructorBuilder().apply {
diagnostic = ConeNoConstructorError
}
} else {
FirPrimaryConstructorBuilder()
}
builder.apply { builder.apply {
source = constructorSource source = constructorSource
moduleData = baseModuleData moduleData = baseModuleData
@@ -285,6 +285,9 @@ abstract class AbstractRawFirBuilder<T>(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(firLabelUser: Any): FirLoopTarget = prepareTarget(context.getLastLabel(firLabelUser))
fun FirLoopBuilder.prepareTarget(label: FirLabel?): FirLoopTarget { fun FirLoopBuilder.prepareTarget(label: FirLabel?): FirLoopTarget {
@@ -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.isInner
import org.jetbrains.kotlin.fir.declarations.utils.isInterface import org.jetbrains.kotlin.fir.declarations.utils.isInterface
import org.jetbrains.kotlin.fir.declarations.utils.isReferredViaField import org.jetbrains.kotlin.fir.declarations.utils.isReferredViaField
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.*
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.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedReifiedParameterReference import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedReifiedParameterReference
@@ -418,6 +418,9 @@ abstract class AbstractFirStatusResolveTransformer(
return transformDeclaration(constructor, data) as FirStatement return transformDeclaration(constructor, data) as FirStatement
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: FirResolvedDeclarationStatus?) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformSimpleFunction( override fun transformSimpleFunction(
simpleFunction: FirSimpleFunction, simpleFunction: FirSimpleFunction,
data: FirResolvedDeclarationStatus?, data: FirResolvedDeclarationStatus?,
@@ -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) { override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirTypeAlias = whileAnalysing(session, typeAlias) {
withScopeCleanup { withScopeCleanup {
addTypeParametersScope(typeAlias) addTypeParametersScope(typeAlias)
@@ -363,6 +363,10 @@ abstract class FirAbstractBodyResolveTransformerDispatcher(
return declarationsTransformer?.transformConstructor(constructor, data) ?: constructor return declarationsTransformer?.transformConstructor(constructor, data) ?: constructor
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode): FirStatement {
return declarationsTransformer?.transformErrorPrimaryConstructor(errorPrimaryConstructor, data) ?: errorPrimaryConstructor
}
override fun transformAnonymousInitializer( override fun transformAnonymousInitializer(
anonymousInitializer: FirAnonymousInitializer, anonymousInitializer: FirAnonymousInitializer,
data: ResolutionMode data: ResolutionMode
@@ -689,6 +689,9 @@ open class FirDeclarationsResolveTransformer(
return doTransformConstructor(constructor, data) return doTransformConstructor(constructor, data)
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
transformConstructor(errorPrimaryConstructor, data)
private fun doTransformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { private fun doTransformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
val owningClass = context.containerIfAny as? FirRegularClass val owningClass = context.containerIfAny as? FirRegularClass
@@ -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 { override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
return enumEntry return enumEntry
} }
@@ -70,6 +70,9 @@ open class FirExpectActualMatcherTransformer(
return constructor return constructor
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Nothing?) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): FirStatement { override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): FirStatement {
transformMemberDeclaration(simpleFunction) transformMemberDeclaration(simpleFunction)
return simpleFunction return simpleFunction
@@ -480,6 +480,9 @@ abstract class AbstractFirSpecificAnnotationResolveTransformer(
} as FirConstructor } as FirConstructor
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Nothing?) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): FirStatement { override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): FirStatement {
return transformCallableDeclarationForDeprecations(enumEntry, data) return transformCallableDeclarationForDeprecations(enumEntry, data)
} }
@@ -148,6 +148,9 @@ private class FirDeclarationsResolveTransformerForAnnotationArgumentsMapping(
return constructor return constructor
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement { override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement {
context.withValueParameter(valueParameter, session) { context.withValueParameter(valueParameter, session) {
valueParameter valueParameter
@@ -103,6 +103,9 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations(
return constructor return constructor
} }
override fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: ResolutionMode) =
transformConstructor(errorPrimaryConstructor, data)
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement { override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirStatement {
valueParameter valueParameter
.transformAnnotations(transformer, data) .transformAnnotations(transformer, data)
@@ -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" 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( class ConeResolutionToClassifierError(
override val candidate: AbstractCandidate, override val candidate: AbstractCandidate,
override val candidateSymbol: FirRegularClassSymbol override val candidateSymbol: FirRegularClassSymbol
@@ -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<FirTypeParameterRef>
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<FirContextReceiver>
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract override val valueParameters: List<FirValueParameter>
abstract override val contractDescription: FirContractDescription
abstract override val annotations: List<FirAnnotation>
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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorPrimaryConstructor(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : FirElement, D> transform(transformer: FirTransformer<D>, 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<FirContextReceiver>)
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
abstract override fun replaceValueParameters(newValueParameters: List<FirValueParameter>)
abstract override fun replaceContractDescription(newContractDescription: FirContractDescription)
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
abstract override fun replaceDelegatedConstructor(newDelegatedConstructor: FirDelegatedConstructorCall?)
abstract override fun replaceBody(newBody: FirBlock?)
abstract override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformReceiverParameter(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
abstract override fun <D> transformBody(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructor
}
@@ -17,11 +17,11 @@ import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.DeprecationsProvider 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.FirContextReceiver
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus 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.FirReceiverParameter
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirResolveState 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.UnresolvedDeprecationProvider
import org.jetbrains.kotlin.fir.declarations.asResolveState import org.jetbrains.kotlin.fir.declarations.asResolveState
import org.jetbrains.kotlin.fir.declarations.builder.FirAbstractConstructorBuilder 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.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -48,7 +49,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
*/ */
@FirBuilderDsl @FirBuilderDsl
class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationContainerBuilder { class FirErrorPrimaryConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationContainerBuilder {
override var source: KtSourceElement? = null override var source: KtSourceElement? = null
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override lateinit var moduleData: FirModuleData override lateinit var moduleData: FirModuleData
@@ -68,10 +69,11 @@ class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationC
override lateinit var symbol: FirConstructorSymbol override lateinit var symbol: FirConstructorSymbol
override var delegatedConstructor: FirDelegatedConstructorCall? = null override var delegatedConstructor: FirDelegatedConstructorCall? = null
override var body: FirBlock? = null override var body: FirBlock? = null
lateinit var diagnostic: ConeDiagnostic
@OptIn(FirImplementationDetail::class) @OptIn(FirImplementationDetail::class)
override fun build(): FirConstructor { override fun build(): FirErrorPrimaryConstructor {
return FirErrorConstructor( return FirErrorPrimaryConstructorImpl(
source, source,
resolvePhase, resolvePhase,
moduleData, moduleData,
@@ -91,11 +93,12 @@ class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationC
symbol, symbol,
delegatedConstructor, delegatedConstructor,
body, 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? override var controlFlowGraphReference: FirControlFlowGraphReference?
get() = throw IllegalStateException() get() = throw IllegalStateException()
set(_) { set(_) {
@@ -104,9 +107,9 @@ class FirErrorConstructorBuilder : FirAbstractConstructorBuilder, FirAnnotationC
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
inline fun buildErrorConstructor(init: FirErrorConstructorBuilder.() -> Unit): FirConstructor { inline fun buildErrorPrimaryConstructor(init: FirErrorPrimaryConstructorBuilder.() -> Unit): FirErrorPrimaryConstructor {
contract { contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE) callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
} }
return FirErrorConstructorBuilder().apply(init).build() return FirErrorPrimaryConstructorBuilder().apply(init).build()
} }
@@ -12,17 +12,18 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.declarations.DeprecationsProvider 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.FirContextReceiver
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus 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.FirReceiverParameter
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirResolveState import org.jetbrains.kotlin.fir.declarations.FirResolveState
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.asResolveState 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.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -41,7 +42,7 @@ import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess
* DO NOT MODIFY IT MANUALLY * DO NOT MODIFY IT MANUALLY
*/ */
class FirErrorConstructor @FirImplementationDetail constructor( class FirErrorPrimaryConstructorImpl @FirImplementationDetail constructor(
override val source: KtSourceElement?, override val source: KtSourceElement?,
resolvePhase: FirResolvePhase, resolvePhase: FirResolvePhase,
override val moduleData: FirModuleData, override val moduleData: FirModuleData,
@@ -61,9 +62,10 @@ class FirErrorConstructor @FirImplementationDetail constructor(
override val symbol: FirConstructorSymbol, override val symbol: FirConstructorSymbol,
override var delegatedConstructor: FirDelegatedConstructorCall?, override var delegatedConstructor: FirDelegatedConstructorCall?,
override var body: FirBlock?, override var body: FirBlock?,
) : FirConstructor() { override val diagnostic: ConeDiagnostic,
) : FirErrorPrimaryConstructor() {
override var controlFlowGraphReference: FirControlFlowGraphReference? = null override var controlFlowGraphReference: FirControlFlowGraphReference? = null
override val isPrimary: Boolean get() = false override val isPrimary: Boolean get() = true
init { init {
symbol.bind(this) symbol.bind(this)
@@ -85,7 +87,7 @@ class FirErrorConstructor @FirImplementationDetail constructor(
body?.accept(visitor, data) body?.accept(visitor, data)
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
transformTypeParameters(transformer, data) transformTypeParameters(transformer, data)
transformStatus(transformer, data) transformStatus(transformer, data)
transformReturnTypeRef(transformer, data) transformReturnTypeRef(transformer, data)
@@ -100,47 +102,47 @@ class FirErrorConstructor @FirImplementationDetail constructor(
return this return this
} }
override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
typeParameters.transformInplace(transformer, data) typeParameters.transformInplace(transformer, data)
return this return this
} }
override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
status = status.transform(transformer, data) status = status.transform(transformer, data)
return this return this
} }
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
returnTypeRef = returnTypeRef.transform(transformer, data) returnTypeRef = returnTypeRef.transform(transformer, data)
return this return this
} }
override fun <D> transformReceiverParameter(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformReceiverParameter(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
receiverParameter = receiverParameter?.transform(transformer, data) receiverParameter = receiverParameter?.transform(transformer, data)
return this return this
} }
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
valueParameters.transformInplace(transformer, data) valueParameters.transformInplace(transformer, data)
return this return this
} }
override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformContractDescription(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
contractDescription = contractDescription.transform(transformer, data) contractDescription = contractDescription.transform(transformer, data)
return this return this
} }
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
annotations.transformInplace(transformer, data) annotations.transformInplace(transformer, data)
return this return this
} }
override fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformDelegatedConstructor(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
delegatedConstructor = delegatedConstructor?.transform(transformer, data) delegatedConstructor = delegatedConstructor?.transform(transformer, data)
return this return this
} }
override fun <D> transformBody(transformer: FirTransformer<D>, data: D): FirErrorConstructor { override fun <D> transformBody(transformer: FirTransformer<D>, data: D): FirErrorPrimaryConstructorImpl {
body = body?.transform(transformer, data) body = body?.transform(transformer, data)
return this return this
} }
@@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty 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.declarations.FirDanglingModifierList
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression
@@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty 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.declarations.FirDanglingModifierList
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression
@@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty 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.declarations.FirDanglingModifierList
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression
@@ -546,6 +547,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(errorProperty, data) return transformElement(errorProperty, data)
} }
open fun transformErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: D): FirStatement {
return transformElement(errorPrimaryConstructor, data)
}
open fun transformDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): FirDanglingModifierList { open fun transformDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): FirDanglingModifierList {
return transformElement(danglingModifierList, data) return transformElement(danglingModifierList, data)
} }
@@ -1166,6 +1171,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformErrorProperty(errorProperty, data) 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 { final override fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): FirDanglingModifierList {
return transformDanglingModifierList(danglingModifierList, data) return transformDanglingModifierList(danglingModifierList, data)
} }
@@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty 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.declarations.FirDanglingModifierList
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression
@@ -357,6 +358,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitErrorProperty(errorProperty: FirErrorProperty, data: D): R = visitElement(errorProperty, data) 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 visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: D): R = visitElement(danglingModifierList, data)
open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R = visitElement(qualifiedAccessExpression, data) open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R = visitElement(qualifiedAccessExpression, data)
@@ -100,6 +100,7 @@ import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty 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.declarations.FirDanglingModifierList
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression
@@ -545,6 +546,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(errorProperty) visitElement(errorProperty)
} }
open fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor) {
visitElement(errorPrimaryConstructor)
}
open fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList) { open fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList) {
visitElement(danglingModifierList) visitElement(danglingModifierList)
} }
@@ -1165,6 +1170,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitErrorProperty(errorProperty) visitErrorProperty(errorProperty)
} }
final override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor, data: Nothing?) {
visitErrorPrimaryConstructor(errorPrimaryConstructor)
}
final override fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: Nothing?) { final override fun visitDanglingModifierList(danglingModifierList: FirDanglingModifierList, data: Nothing?) {
visitDanglingModifierList(danglingModifierList) visitDanglingModifierList(danglingModifierList)
} }
@@ -79,6 +79,10 @@ object ConeUnsupportedClassLiteralsWithEmptyLhs : ConeDiagnostic {
override val reason: String get() = "No receiver in class literal" 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 { enum class DiagnosticKind {
ExpressionExpected, ExpressionExpected,
NotLoopLabel, NotLoopLabel,
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.renderer package org.jetbrains.kotlin.fir.renderer
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorConstructor
import org.jetbrains.kotlin.fir.isCatchParameter import org.jetbrains.kotlin.fir.isCatchParameter
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
@@ -26,7 +25,7 @@ open class FirDeclarationRenderer(
typeRenderer.render(it) typeRenderer.render(it)
printer.print(".") printer.print(".")
} }
if (declaration is FirErrorConstructor) { if (declaration is FirErrorPrimaryConstructor) {
printer.print("error_") printer.print("error_")
} }
printer.print("constructor") printer.print("constructor")
@@ -399,6 +399,8 @@ class FirRenderer(
bodyRenderer?.renderBody(body, listOfNotNull<FirStatement>(delegatedConstructor)) bodyRenderer?.renderBody(body, listOfNotNull<FirStatement>(delegatedConstructor))
} }
override fun visitErrorPrimaryConstructor(errorPrimaryConstructor: FirErrorPrimaryConstructor) = visitConstructor(errorPrimaryConstructor)
override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) { override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
annotationRenderer?.render(propertyAccessor) annotationRenderer?.render(propertyAccessor)
modifierRenderer?.renderModifiers(propertyAccessor) modifierRenderer?.renderModifiers(propertyAccessor)
@@ -93,7 +93,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
fields from functionCall fields from functionCall
} }
for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl", "FirErrorConstructor")) { for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl")) {
builder(constructor, constructorType) { builder(constructor, constructorType) {
parents += abstractConstructorBuilder parents += abstractConstructorBuilder
defaultNull("delegatedConstructor") defaultNull("delegatedConstructor")
@@ -103,6 +103,14 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
} }
} }
builder(errorPrimaryConstructor) {
parents += abstractConstructorBuilder
defaultNull("delegatedConstructor")
defaultNull("body")
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
}
builder(constructor, "FirConstructorImpl") { builder(constructor, "FirConstructorImpl") {
openBuilder() openBuilder()
withCopy() withCopy()
@@ -124,6 +124,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val errorExpression by element(Expression, expression, diagnosticHolder) val errorExpression by element(Expression, expression, diagnosticHolder)
val errorFunction by element(Declaration, function, diagnosticHolder) val errorFunction by element(Declaration, function, diagnosticHolder)
val errorProperty by element(Declaration, variable, diagnosticHolder) val errorProperty by element(Declaration, variable, diagnosticHolder)
val errorPrimaryConstructor by element(Declaration, constructor, diagnosticHolder)
val danglingModifierList by element(Declaration, declaration, diagnosticHolder) val danglingModifierList by element(Declaration, declaration, diagnosticHolder)
val qualifiedAccessExpression by element(Expression, expression, resolvable, contextReceiverArgumentListOwner) val qualifiedAccessExpression by element(Expression, expression, resolvable, contextReceiverArgumentListOwner)
val qualifiedErrorAccessExpression by element(Expression, expression, diagnosticHolder) val qualifiedErrorAccessExpression by element(Expression, expression, diagnosticHolder)
@@ -26,9 +26,9 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
defaultTrue("isPrimary", withGetter = true) defaultTrue("isPrimary", withGetter = true)
} }
impl(constructor, "FirErrorConstructor") { impl(errorPrimaryConstructor) {
publicImplementation() publicImplementation()
defaultFalse("isPrimary", withGetter = true) defaultTrue("isPrimary", withGetter = true)
} }
impl(outerClassTypeParameterRef) { impl(outerClassTypeParameterRef) {