From 69a35970ebc91daa80222d8f1efb857d892fc2c9 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 27 Jul 2023 15:07:29 +0300 Subject: [PATCH] [FIR] Introduce different synthetic origins for FIR declarations This is needed to be able to precisely distinguish different synthetic declarations (like fields for delegates and functions for data classes) in fir2ir --- .../kotlin/analysis/api/fir/symbols/KtFirSymbol.kt | 4 ++-- .../explicitOverrideOfTwoMembers_java.overrides.txt | 2 +- ...tlinPropertyFromDifferentSupertypes.overrides.txt | 2 +- .../scopes/specialFunctionInJava_3.overrides.txt | 6 +++--- .../NativeForwardDeclarationsSymbolProvider.kt | 2 +- .../kotlin/fir/serialization/FirElementSerializer.kt | 2 +- .../jetbrains/kotlin/fir/backend/ConversionUtils.kt | 2 +- .../jetbrains/kotlin/fir/backend/Fir2IrConverter.kt | 2 +- .../backend/generators/DataClassMembersGenerator.kt | 2 +- .../scopes/impl/FirClassAnySynthesizedMemberScope.kt | 12 ++++++++++-- .../converter/LightTreeRawFirDeclarationBuilder.kt | 2 +- .../jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt | 2 +- .../kotlin/fir/builder/AbstractRawFirBuilder.kt | 6 +++--- .../kotlin/fir/resolve/calls/CandidateFactory.kt | 4 ++-- .../fir/resolve/calls/ConstructorProcessing.kt | 2 +- .../transformers/FirSyntheticCallGenerator.kt | 2 +- .../kotlin/fir/declarations/FirDeclarationOrigin.kt | 12 +++++++++++- .../declarations/synthetic/FirSyntheticProperty.kt | 2 +- .../synthetic/FirSyntheticPropertyAccessor.kt | 2 +- .../fir/declarations/utils/FirDeclarationUtil.kt | 2 +- 20 files changed, 45 insertions(+), 27 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt index c5dcf6c547a..43899538bf2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt @@ -64,10 +64,10 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori FirDeclarationOrigin.Enhancement -> KtSymbolOrigin.JAVA FirDeclarationOrigin.IntersectionOverride -> KtSymbolOrigin.INTERSECTION_OVERRIDE FirDeclarationOrigin.Delegated -> KtSymbolOrigin.DELEGATED - FirDeclarationOrigin.Synthetic -> { + is FirDeclarationOrigin.Synthetic -> { when { source?.kind == KtFakeSourceElementKind.DataClassGeneratedMembers -> KtSymbolOrigin.SOURCE_MEMBER_GENERATED - this is FirValueParameter && this.containingFunctionSymbol.origin == FirDeclarationOrigin.Synthetic -> KtSymbolOrigin.SOURCE_MEMBER_GENERATED + this is FirValueParameter && this.containingFunctionSymbol.origin is FirDeclarationOrigin.Synthetic -> KtSymbolOrigin.SOURCE_MEMBER_GENERATED this is FirSyntheticProperty || this is FirSyntheticPropertyAccessor -> KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY else -> errorWithAttachment("Invalid FirDeclarationOrigin ${origin::class.simpleName}") { diff --git a/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt b/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt index d711222e927..b3927e2556c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt +++ b/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt @@ -8,7 +8,7 @@ D: [Source]: public abstract val x: R|kotlin/Int| from Use site scope of /A [id: 1] [Source]: public abstract val x: R|kotlin/String| from Use site scope of /B [id: 2] [Java(Source)]: private open field y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] - [Synthetic]: public abstract val y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] + [JavaProperty]: public abstract val y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] [Source]: public abstract val y: R|kotlin/Int| from Use site scope of /A [id: 1] [Source]: public abstract val y: R|kotlin/Int| from Use site scope of /B [id: 2] [Enhancement]: public abstract fun getX(): R|kotlin/Any!| from Java enhancement scope for /D [id: 0] diff --git a/compiler/fir/analysis-tests/testData/resolve/scopes/javaFunctionAndKotlinPropertyFromDifferentSupertypes.overrides.txt b/compiler/fir/analysis-tests/testData/resolve/scopes/javaFunctionAndKotlinPropertyFromDifferentSupertypes.overrides.txt index dd19af21155..c93c0776cee 100644 --- a/compiler/fir/analysis-tests/testData/resolve/scopes/javaFunctionAndKotlinPropertyFromDifferentSupertypes.overrides.txt +++ b/compiler/fir/analysis-tests/testData/resolve/scopes/javaFunctionAndKotlinPropertyFromDifferentSupertypes.overrides.txt @@ -1,4 +1,4 @@ C: - [Synthetic]: public open val foo: R|kotlin/Int| from Java enhancement scope for /C [id: 0] + [JavaProperty]: public open val foo: R|kotlin/Int| from Java enhancement scope for /C [id: 0] [Source]: public abstract val foo: R|kotlin/Int| from Use site scope of /B [id: 1] diff --git a/compiler/fir/analysis-tests/testData/resolve/scopes/specialFunctionInJava_3.overrides.txt b/compiler/fir/analysis-tests/testData/resolve/scopes/specialFunctionInJava_3.overrides.txt index 19d1cb9664a..75241ecd01c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/scopes/specialFunctionInJava_3.overrides.txt +++ b/compiler/fir/analysis-tests/testData/resolve/scopes/specialFunctionInJava_3.overrides.txt @@ -1,8 +1,8 @@ D: - [Synthetic]: public open val x: R|kotlin/Int| from Java enhancement scope for /D [id: 0] - [Synthetic]: public open val x: R|kotlin/Int| from Java enhancement scope for /B [id: 1] + [JavaProperty]: public open val x: R|kotlin/Int| from Java enhancement scope for /D [id: 0] + [JavaProperty]: public open val x: R|kotlin/Int| from Java enhancement scope for /B [id: 1] [Source]: public open val x: R|kotlin/Int| from Use site scope of /A [id: 2] - [Synthetic]: public open val y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] + [JavaProperty]: public open val y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] [Source]: public open val y: R|kotlin/Int| from Java enhancement scope for /B [id: 1] [Source]: public open val y: R|kotlin/Int| from Use site scope of /A [id: 1] diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt index cf39365f52e..de9f6347d49 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeForwardDeclarationsSymbolProvider.kt @@ -87,7 +87,7 @@ class NativeForwardDeclarationsSymbolProvider( buildRegularClass { moduleData = forwardDeclarationsModuleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.ForwardDeclaration check(!classId.isNestedClass) { "Expected top-level class when building forward declaration, got $classId" } name = classId.shortClassName status = FirResolvedDeclarationStatusImpl( diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 1551ed3dc25..8df947fca40 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -598,7 +598,7 @@ class FirElementSerializer private constructor( private fun FirFunction.memberKind(): MemberKind { return when (origin) { FirDeclarationOrigin.Delegated -> MemberKind.DELEGATION - FirDeclarationOrigin.Synthetic -> MemberKind.SYNTHESIZED + is FirDeclarationOrigin.Synthetic -> MemberKind.SYNTHESIZED else -> MemberKind.DECLARATION } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 94c7a41c0c3..b367cc84430 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -699,7 +699,7 @@ fun FirSession.createFilesWithGeneratedDeclarations(): List { moduleData = this@createFilesWithGeneratedDeclarations.moduleData containingFileSymbol = this@buildFile.symbol } - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.PluginFile moduleData = this@createFilesWithGeneratedDeclarations.moduleData packageDirective = buildPackageDirective { this.packageFqName = packageFqName diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 5a0a9466e82..1dc7ec2f465 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -137,7 +137,7 @@ class Fir2IrConverter( else -> NaiveSourceBasedFileEntryImpl(file.sourceFile?.path ?: file.sourceFile?.name ?: file.name) } - FirDeclarationOrigin.Synthetic -> NaiveSourceBasedFileEntryImpl(file.name) + is FirDeclarationOrigin.Synthetic -> NaiveSourceBasedFileEntryImpl(file.name) else -> error("Unsupported file origin: ${file.origin}") } val irFile = IrFileImpl( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index aaded45aeaf..4f6f6bd65eb 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -160,7 +160,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon for (name in listOf(EQUALS, HASHCODE_NAME, TO_STRING)) { scope.processFunctionsByName(name) { // We won't synthesize a function if there is a user-contributed (non-synthetic) one. - if (it.origin != FirDeclarationOrigin.Synthetic) return@processFunctionsByName + if (it.origin !is FirDeclarationOrigin.Synthetic) return@processFunctionsByName if (it.containingClassLookupTag() != klass.symbol.toLookupTag()) return@processFunctionsByName require(!contains(name)) { "Two synthetic functions $name were found in data/value class ${klass.name}:\n" + diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassAnySynthesizedMemberScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassAnySynthesizedMemberScope.kt index 2efc77ec361..63cb9b6beea 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassAnySynthesizedMemberScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassAnySynthesizedMemberScope.kt @@ -25,6 +25,9 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.isEquals +import org.jetbrains.kotlin.fir.declarations.utils.isData +import org.jetbrains.kotlin.fir.declarations.utils.isInline +import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes @@ -52,6 +55,11 @@ class FirClassAnySynthesizedMemberScope( klass: FirRegularClass, scopeSession: ScopeSession, ) : FirContainingNamesAwareScope() { + private val originForFunctions = when { + klass.isData -> FirDeclarationOrigin.Synthetic.DataClassMember + klass.isInline -> FirDeclarationOrigin.Synthetic.ValueClassMember + else -> error("This scope should not be created for non-data and non-value class. ${klass.render()}") + } private val lookupTag = klass.symbol.toLookupTag() private val baseModuleData = klass.moduleData @@ -139,7 +147,7 @@ class FirClassAnySynthesizedMemberScope( this.valueParameters.add( buildValueParameter { this.name = Name.identifier("other") - origin = FirDeclarationOrigin.Synthetic + origin = originForFunctions moduleData = baseModuleData this.returnTypeRef = FirImplicitNullableAnyTypeRef(null) this.symbol = FirValueParameterSymbol(this.name) @@ -169,7 +177,7 @@ class FirClassAnySynthesizedMemberScope( ) { this.source = synthesizedSource moduleData = baseModuleData - origin = FirDeclarationOrigin.Synthetic + origin = originForFunctions this.name = name status = FirResolvedDeclarationStatusImpl(Visibilities.Public, Modality.OPEN, EffectiveVisibility.Public).apply { this.isOperator = isOperator 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 2a7cb5cbde7..160f7f74187 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 @@ -1915,7 +1915,7 @@ class LightTreeRawFirDeclarationBuilder( buildField { source = explicitDelegation.toFirSourceElement().fakeElement(KtFakeSourceElementKind.ClassDelegationField) moduleData = baseModuleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.DelegateField name = NameUtils.delegateFieldName(delegateFieldsMap.size) returnTypeRef = firTypeRef symbol = FirFieldSymbol(CallableId(context.currentClassId, name)) 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 9940aec8df8..0f0e411cbe0 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 @@ -880,7 +880,7 @@ open class PsiRawFirBuilder( return buildField { source = delegateSource moduleData = baseModuleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.DelegateField name = NameUtils.delegateFieldName(fieldOrd) returnTypeRef = type symbol = FirFieldSymbol(CallableId(this@PsiRawFirBuilder.context.currentClassId, name)) 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 84a5d79e8d4..99e19673991 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 @@ -907,7 +907,7 @@ abstract class AbstractRawFirBuilder(val baseSession: FirSession, val context val componentFunction = buildSimpleFunction { source = sourceNode?.toFirSourceElement(KtFakeSourceElementKind.DataClassGeneratedMembers) moduleData = baseModuleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.DataClassMember returnTypeRef = firProperty.returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers) this.name = name status = FirDeclarationStatusImpl(firProperty.visibility, Modality.FINAL).apply { @@ -1100,7 +1100,7 @@ fun FirRegularClassBuilder.createDa val classTypeRef = createClassTypeRefWithSourceKind(KtFakeSourceElementKind.DataClassGeneratedMembers) this.source = toFirSource(sourceElement, KtFakeSourceElementKind.DataClassGeneratedMembers) moduleData = this@createDataClassCopyFunction.moduleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.DataClassMember returnTypeRef = classTypeRef name = StandardNames.DATA_CLASS_COPY status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL) @@ -1116,7 +1116,7 @@ fun FirRegularClassBuilder.createDa source = parameterSource containingFunctionSymbol = this@buildSimpleFunction.symbol moduleData = this@createDataClassCopyFunction.moduleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.DataClassMember returnTypeRef = propertyReturnTypeRef name = propertyName symbol = FirValueParameterSymbol(propertyName) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt index 90bb08a8a31..09d410ccaba 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt @@ -166,7 +166,7 @@ class CandidateFactory private constructor( buildErrorFunction { moduleData = context.session.moduleData resolvePhase = FirResolvePhase.BODY_RESOLVE - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.Error this.diagnostic = diagnostic symbol = it } @@ -178,7 +178,7 @@ class CandidateFactory private constructor( buildErrorProperty { moduleData = context.session.moduleData resolvePhase = FirResolvePhase.BODY_RESOLVE - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.Error name = FirErrorPropertySymbol.NAME this.diagnostic = diagnostic symbol = it diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt index 18695954801..0546e56f5b2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt @@ -229,7 +229,7 @@ private class TypeAliasConstructorsSubstitutingScope( processor( buildConstructorCopy(originalConstructorSymbol.fir) { symbol = FirConstructorSymbol(originalConstructorSymbol.callableId) - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.TypeAliasConstructor this.typeParameters.clear() this.typeParameters += typeParameters.map { buildConstructedClassTypeParameterRef { symbol = it.symbol } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt index 4700ba2f4c5..2dcb0a30f40 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt @@ -436,7 +436,7 @@ class FirSyntheticCallGenerator( ): FirSimpleFunctionBuilder { return FirSimpleFunctionBuilder().apply { moduleData = session.moduleData - origin = FirDeclarationOrigin.Synthetic + origin = FirDeclarationOrigin.Synthetic.FakeFunction this.symbol = symbol this.name = name status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt index 78f50ff3fa3..2193f5e1d3f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt @@ -23,7 +23,17 @@ sealed class FirDeclarationOrigin( object Library : Java("Java(Library)") } - object Synthetic : FirDeclarationOrigin() + sealed class Synthetic : FirDeclarationOrigin() { + object DataClassMember : Synthetic() + object ValueClassMember : Synthetic() + object JavaProperty : Synthetic() + object DelegateField : Synthetic() + object PluginFile : Synthetic() + object Error : Synthetic() + object TypeAliasConstructor : Synthetic() + object FakeFunction : Synthetic() + object ForwardDeclaration : Synthetic() + } object DynamicScope : FirDeclarationOrigin() object SamConstructor : FirDeclarationOrigin() object Enhancement : FirDeclarationOrigin() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt index d4066be2bc9..9271ac7331c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticProperty.kt @@ -51,7 +51,7 @@ class FirSyntheticProperty( get() = null override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Synthetic + get() = FirDeclarationOrigin.Synthetic.JavaProperty override val initializer: FirExpression? get() = null diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt index cd46e809811..b3b4e8f2745 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyAccessor.kt @@ -34,7 +34,7 @@ class FirSyntheticPropertyAccessor( get() = delegate.moduleData override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Synthetic + get() = FirDeclarationOrigin.Synthetic.JavaProperty override val returnTypeRef: FirTypeRef get() = delegate.returnTypeRef diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt index d736eb5a260..15e4cd24fee 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt @@ -34,7 +34,7 @@ inline val FirDeclaration.isFromLibrary: Boolean inline val FirDeclaration.isPrecompiled: Boolean get() = origin == FirDeclarationOrigin.Precompiled inline val FirDeclaration.isSynthetic: Boolean - get() = origin == FirDeclarationOrigin.Synthetic + get() = origin is FirDeclarationOrigin.Synthetic // NB: This function checks transitive localness. That is, // if a declaration `isNonLocal`, then its parent also `isNonLocal`.