From 41545cd2b481360f67064137d1832ca6691dbf78 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 30 Apr 2020 15:09:16 +0300 Subject: [PATCH] [FIR] Initialize origin in all places with creating of declarations --- .../fir/backend/jvm/FirJvmClassCodegen.kt | 2 ++ .../generators/DataClassMembersGenerator.kt | 2 ++ .../kotlin/fir/java/JavaSymbolProvider.kt | 2 ++ .../java/scopes/JavaClassEnhancementScope.kt | 9 ++++--- .../kotlin/fir/builder/BaseFirBuilder.kt | 4 +++ .../kotlin/fir/builder/ConversionUtils.kt | 5 ++++ .../fir/lightTree/converter/ConverterUtil.kt | 2 ++ .../converter/DeclarationsConverter.kt | 23 ++++++++++++++--- .../converter/ExpressionsConverter.kt | 4 +++ .../fir/lightTree/fir/ValueParameter.kt | 6 +++-- .../kotlin/fir/builder/PsiConversionUtils.kt | 2 ++ .../kotlin/fir/builder/RawFirBuilder.kt | 25 ++++++++++++++++--- .../src/org/jetbrains/kotlin/fir/CopyUtils.kt | 3 +++ .../deserialization/ClassDeserialization.kt | 4 +++ .../deserialization/FirMemberDeserializer.kt | 9 +++++-- .../deserialization/FirTypeDeserializer.kt | 2 ++ .../kotlin/fir/resolve/SamResolution.kt | 3 +++ .../resolve/calls/ConstructorProcessing.kt | 2 ++ .../resolve/impl/FirBuiltinSymbolProvider.kt | 6 +++++ .../resolve/impl/FirClonableSymbolProvider.kt | 3 +++ .../fir/resolve/inference/FirCallCompleter.kt | 2 ++ .../transformers/FirSyntheticCallGenerator.kt | 3 +++ .../FirDeclarationsResolveTransformer.kt | 1 + .../impl/AbstractFirUseSiteMemberScope.kt | 3 +++ .../scopes/impl/FirClassSubstitutionScope.kt | 7 ++++++ .../jetbrains/kotlin/fir/EnumClassUtils.kt | 4 +++ .../impl/FirDefaultPropertyAccessor.kt | 1 + 27 files changed, 125 insertions(+), 14 deletions(-) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt index 70605448966..ea1523090c8 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmClassCodegen.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.codegen.writeSyntheticClassMetadata import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.FirMetadataSource import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction @@ -55,6 +56,7 @@ class FirJvmClassCodegen( val function = this return buildAnonymousFunction { session = function.session + origin = FirDeclarationOrigin.Source symbol = FirAnonymousFunctionSymbol() returnTypeRef = function.returnTypeRef receiverTypeRef = function.receiverTypeRef 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 cf29d0c43e5..01f8cd29295 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 @@ -231,6 +231,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { } metadata = FirMetadataSource.Function( buildSimpleFunction { + origin = FirDeclarationOrigin.Synthetic this.name = name this.symbol = FirNamedFunctionSymbol(CallableId(classId.packageFqName, classId.relativeClassName, name)) this.status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL) @@ -245,6 +246,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { this.valueParameters.add( buildValueParameter { this.name = irValueParameter.name + origin = FirDeclarationOrigin.Synthetic this.session = components.session this.returnTypeRef = FirImplicitNullableAnyTypeRef(null) this.symbol = FirVariableSymbol(irValueParameter.name) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index c72de980ee1..2275b48f8b8 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -12,6 +12,7 @@ import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary @@ -95,6 +96,7 @@ class JavaSymbolProvider( ): FirTypeParameter { return FirTypeParameterBuilder().apply { this.session = this@JavaSymbolProvider.session + origin = FirDeclarationOrigin.Java this.name = this@toFirTypeParameter.name symbol = firSymbol variance = INVARIANT diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index 568f1ed297f..043ab2696af 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -195,6 +195,7 @@ class JavaClassEnhancementScope( buildValueParameter { source = valueParameter.source session = this@JavaClassEnhancementScope.session + origin = FirDeclarationOrigin.Enhancement returnTypeRef = newTypeRef this.name = valueParameter.name symbol = FirVariableSymbol(this.name) @@ -211,8 +212,6 @@ class JavaClassEnhancementScope( val symbol = FirConstructorSymbol(methodId) if (firMethod.isPrimary) { FirPrimaryConstructorBuilder().apply { - source = firMethod.source - session = this@JavaClassEnhancementScope.session returnTypeRef = newReturnTypeRef status = FirDeclarationStatusImpl(firMethod.visibility, Modality.FINAL).apply { isExpect = false @@ -223,14 +222,15 @@ class JavaClassEnhancementScope( } } else { FirConstructorBuilder().apply { - source = firMethod.source - session = this@JavaClassEnhancementScope.session returnTypeRef = newReturnTypeRef status = firMethod.status this.symbol = symbol } }.apply { + source = firMethod.source + session = this@JavaClassEnhancementScope.session resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES + origin = FirDeclarationOrigin.Enhancement this.valueParameters += newValueParameters this.typeParameters += firMethod.typeParameters } @@ -239,6 +239,7 @@ class JavaClassEnhancementScope( FirSimpleFunctionBuilder().apply { source = firMethod.source session = this@JavaClassEnhancementScope.session + origin = FirDeclarationOrigin.Enhancement returnTypeRef = newReturnTypeRef receiverTypeRef = newReceiverTypeRef this.name = name!! diff --git a/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 4bb73ec5765..168fde3d50a 100644 --- a/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -127,6 +127,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte buildErrorFunction { source = baseSource session = this@BaseFirBuilder.baseSession + origin = FirDeclarationOrigin.Source diagnostic = ConeSimpleDiagnostic(message, kind) symbol = FirErrorFunctionSymbol() } @@ -695,6 +696,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte val componentFunction = buildSimpleFunction { source = parameterSource session = this@DataClassMembersGenerator.session + origin = FirDeclarationOrigin.Source returnTypeRef = firProperty.returnTypeRef receiverTypeRef = null this.name = name @@ -714,6 +716,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte buildSimpleFunction { source = this@DataClassMembersGenerator.source.toFirSourceElement() session = this@DataClassMembersGenerator.session + origin = FirDeclarationOrigin.Source returnTypeRef = classTypeRef name = copyName status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL) @@ -724,6 +727,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte valueParameters += buildValueParameter { source = parameterSource session = this@DataClassMembersGenerator.session + origin = FirDeclarationOrigin.Source returnTypeRef = firProperty.returnTypeRef name = propertyName symbol = FirVariableSymbol(propertyName) diff --git a/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 35d4d63d741..ed6425d2551 100644 --- a/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.builder.buildRawContractDescription +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.builder.* @@ -280,6 +281,7 @@ fun generateTemporaryVariable( buildProperty { this.source = source this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = typeRef ?: buildImplicitTypeRef { this.source = source } @@ -386,6 +388,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( val returnTarget = FirFunctionTarget(null, isLambda = false) getter = buildPropertyAccessor { this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef() isGetter = true status = FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL) @@ -412,11 +415,13 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( if (isVar && (setter == null || setter is FirDefaultPropertyAccessor)) { setter = buildPropertyAccessor { this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = session.builtinTypes.unitType isGetter = false status = FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL) val parameter = buildValueParameter { this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef() name = DELEGATED_SETTER_PARAM symbol = FirVariableSymbol(this@generateAccessorsByDelegate.name) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt index c4dd9b78fa8..f4da426a597 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.generateResolvedAccessExpression +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.builder.buildProperty import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl @@ -112,6 +113,7 @@ fun generateDestructuringBlock( for ((index, entry) in multiDeclaration.entries.withIndex()) { statements += buildProperty { this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = entry.returnTypeRef name = entry.name initializer = buildComponentCall { diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 1f96ac4d8e3..e2718ffe331 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -88,6 +88,7 @@ class DeclarationsConverter( return buildFile { source = file.toFirSourceElement() + origin = FirDeclarationOrigin.Source session = baseSession name = fileName packageFqName = context.packageFqName @@ -391,6 +392,7 @@ class DeclarationsConverter( classBuilder.apply { source = classNode.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = className this.status = status this.classKind = classKind @@ -526,6 +528,7 @@ class DeclarationsConverter( return withChildClassName(ANONYMOUS_OBJECT_NAME) { buildAnonymousObject { source = objectLiteral.toFirSourceElement() + origin = FirDeclarationOrigin.Source session = baseSession classKind = ClassKind.OBJECT scopeProvider = baseScopeProvider @@ -578,6 +581,7 @@ class DeclarationsConverter( return buildEnumEntry { source = enumEntry.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = classWrapper.delegatedSelfTypeRef name = enumEntryName symbol = FirVariableSymbol(CallableId(context.currentClassId, enumEntryName)) @@ -593,6 +597,7 @@ class DeclarationsConverter( buildAnonymousObject { source = this@buildEnumEntry.source session = baseSession + origin = FirDeclarationOrigin.Source classKind = ClassKind.ENUM_ENTRY scopeProvider = baseScopeProvider symbol = FirAnonymousObjectSymbol() @@ -693,6 +698,7 @@ class DeclarationsConverter( buildPrimaryConstructor { source = primaryConstructor?.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = classWrapper.delegatedSelfTypeRef this.status = status symbol = FirConstructorSymbol(callableIdForClassConstructor()) @@ -719,6 +725,7 @@ class DeclarationsConverter( return buildAnonymousInitializer { source = anonymousInitializer.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source body = if (stubMode) buildEmptyExpressionBlock() else firBlock } } @@ -756,6 +763,7 @@ class DeclarationsConverter( return buildConstructor { source = secondaryConstructor.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = delegatedSelfTypeRef this.status = status symbol = FirConstructorSymbol(callableIdForClassConstructor()) @@ -828,6 +836,7 @@ class DeclarationsConverter( return@withChildClassName buildTypeAlias { source = typeAlias.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = typeAliasName status = FirDeclarationStatusImpl(modifiers.getVisibility(), Modality.FINAL).apply { isExpect = modifiers.hasExpect() @@ -885,6 +894,7 @@ class DeclarationsConverter( return buildProperty { source = propertySource session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = returnType name = propertyName this.isVar = isVar @@ -940,11 +950,11 @@ class DeclarationsConverter( val convertedAccessors = accessors.map { convertGetterOrSetter(it, returnType) } this.getter = convertedAccessors.find { it.isGetter } - ?: FirDefaultPropertyGetter(null, session, returnType, modifiers.getVisibility()) + ?: FirDefaultPropertyGetter(null, session, FirDeclarationOrigin.Source, returnType, modifiers.getVisibility()) this.setter = if (isVar) { convertedAccessors.find { it.isSetter } - ?: FirDefaultPropertySetter(null, session, returnType, modifiers.getVisibility()) + ?: FirDefaultPropertySetter(null, session, FirDeclarationOrigin.Source, returnType, modifiers.getVisibility()) } else null val receiver = delegateExpression?.let { @@ -1003,6 +1013,7 @@ class DeclarationsConverter( return buildProperty { source = entry.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = firType ?: implicitType this.name = name isVar = false @@ -1022,6 +1033,7 @@ class DeclarationsConverter( var returnType: FirTypeRef? = null var firValueParameters: FirValueParameter = buildDefaultSetterValueParameter { session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = propertyTypeRef symbol = FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) } @@ -1042,7 +1054,7 @@ class DeclarationsConverter( val sourceElement = getterOrSetter.toFirSourceElement() if (block == null && expression == null) { return FirDefaultPropertyAccessor - .createGetterOrSetter(sourceElement, baseSession, propertyTypeRef, modifiers.getVisibility(), isGetter) + .createGetterOrSetter(sourceElement, baseSession, FirDeclarationOrigin.Source, propertyTypeRef, modifiers.getVisibility(), isGetter) .also { it.annotations += modifiers.annotations } @@ -1051,6 +1063,7 @@ class DeclarationsConverter( return buildPropertyAccessor { source = sourceElement session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = returnType ?: if (isGetter) propertyTypeRef else implicitUnitType symbol = FirPropertyAccessorSymbol() this.isGetter = isGetter @@ -1092,6 +1105,7 @@ class DeclarationsConverter( return buildValueParameter { source = setterParameter.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef name = firValueParameter.name symbol = FirVariableSymbol(firValueParameter.name) @@ -1180,6 +1194,7 @@ class DeclarationsConverter( return functionBuilder.apply { session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = returnType!! context.firFunctionTargets += target @@ -1382,6 +1397,7 @@ class DeclarationsConverter( return buildTypeParameter { source = typeParameter.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = identifier.nameAsSafeName() symbol = FirTypeParameterSymbol() variance = typeParameterModifiers.getVariance() @@ -1592,6 +1608,7 @@ class DeclarationsConverter( val firValueParameter = buildValueParameter { source = valueParameter.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = firType ?: implicitType this.name = name symbol = FirVariableSymbol(name) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 226a9ea94fd..0ee3edabfc2 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.builder.* +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction import org.jetbrains.kotlin.fir.declarations.builder.buildProperty @@ -133,6 +134,7 @@ class ExpressionsConverter( return buildAnonymousFunction { source = expressionSource session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = implicitType receiverTypeRef = implicitType symbol = FirAnonymousFunctionSymbol() @@ -149,6 +151,7 @@ class ExpressionsConverter( val name = Name.special("") val multiParameter = buildValueParameter { session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef() this.name = name symbol = FirVariableSymbol(name) @@ -610,6 +613,7 @@ class ExpressionsConverter( PROPERTY -> subjectVariable = (declarationsConverter.convertPropertyDeclaration(it) as FirVariable<*>).let { variable -> buildProperty { source = it.toFirSourceElement() + origin = FirDeclarationOrigin.Source session = baseSession returnTypeRef = variable.returnTypeRef name = variable.name diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt index 93f8f3565e7..0a5e0aff6e5 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.lightTree.fir import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.convertToArrayType +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildProperty @@ -47,6 +48,7 @@ class ValueParameter( return buildProperty { source = firValueParameter.source this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = type this.name = name initializer = buildQualifiedAccessExpression { @@ -66,8 +68,8 @@ class ValueParameter( isLateInit = false } annotations += this@ValueParameter.firValueParameter.annotations - getter = FirDefaultPropertyGetter(null, session, type, modifiers.getVisibility()) - setter = if (this.isVar) FirDefaultPropertySetter(null, session, type, modifiers.getVisibility()) else null + getter = FirDefaultPropertyGetter(null, session, FirDeclarationOrigin.Source, type, modifiers.getVisibility()) + setter = if (this.isVar) FirDefaultPropertySetter(null, session, FirDeclarationOrigin.Source, type, modifiers.getVisibility()) else null } } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt index 18d212ca79f..8bf9177a35a 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirWhenSubject +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.builder.buildProperty import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl @@ -104,6 +105,7 @@ internal fun generateDestructuringBlock( statements += buildProperty { source = entrySource this.session = session + origin = FirDeclarationOrigin.Source returnTypeRef = entry.typeReference.toFirOrImplicitTypeRef() this.name = name initializer = buildComponentCall { diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 19a9a83c90c..93c712ee8b5 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -271,7 +271,7 @@ class RawFirBuilder( val propertySource = property.toFirSourceElement() val accessorVisibility = this?.visibility ?: property.visibility return FirDefaultPropertyAccessor - .createGetterOrSetter(propertySource, baseSession, propertyTypeRef, accessorVisibility, isGetter) + .createGetterOrSetter(propertySource, baseSession, FirDeclarationOrigin.Source, propertyTypeRef, accessorVisibility, isGetter) .also { if (this != null) { it.extractAnnotationsFrom(this) @@ -283,6 +283,7 @@ class RawFirBuilder( return buildPropertyAccessor { this.source = source session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = if (isGetter) { returnTypeReference?.convertSafe() ?: propertyTypeRef } else { @@ -297,6 +298,7 @@ class RawFirBuilder( valueParameters += buildDefaultSetterValueParameter { this.source = source session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = propertyTypeRef symbol = FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) } @@ -318,6 +320,7 @@ class RawFirBuilder( return buildValueParameter { source = toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = when { typeReference != null -> typeReference.toFirOrErrorType() defaultTypeRef != null -> defaultTypeRef @@ -354,6 +357,7 @@ class RawFirBuilder( return buildProperty { source = parameterSource session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = type receiverTypeRef = null name = propertyName @@ -369,8 +373,8 @@ class RawFirBuilder( symbol = FirPropertySymbol(callableIdForName(propertyName)) isLocal = false this.status = status - getter = FirDefaultPropertyGetter(propertySource, baseSession, type, visibility) - setter = if (isMutable) FirDefaultPropertySetter(propertySource, baseSession, type, visibility) else null + getter = FirDefaultPropertyGetter(propertySource, baseSession, FirDeclarationOrigin.Source, type, visibility) + setter = if (isMutable) FirDefaultPropertySetter(propertySource, baseSession, FirDeclarationOrigin.Source, type, visibility) else null extractAnnotationsTo(this) } } @@ -544,6 +548,7 @@ class RawFirBuilder( return buildPrimaryConstructor { source = constructorSource session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = delegatedSelfTypeRef this.status = status symbol = FirConstructorSymbol(callableIdForClassConstructor()) @@ -559,6 +564,7 @@ class RawFirBuilder( return buildFile { source = file.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = file.name packageFqName = context.packageFqName for (annotationEntry in file.annotationEntries) { @@ -586,6 +592,7 @@ class RawFirBuilder( return buildEnumEntry { source = toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = delegatedEnumSelfTypeRef name = nameAsSafeName status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply { @@ -602,6 +609,7 @@ class RawFirBuilder( buildAnonymousObject { source = toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source classKind = ClassKind.ENUM_ENTRY scopeProvider = this@RawFirBuilder.baseScopeProvider symbol = FirAnonymousObjectSymbol() @@ -669,6 +677,7 @@ class RawFirBuilder( classBuilder.apply { source = classOrObject.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = classOrObject.nameAsSafeName this.status = status this.classKind = classKind @@ -739,6 +748,7 @@ class RawFirBuilder( buildAnonymousObject { source = expression.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source classKind = ClassKind.OBJECT scopeProvider = baseScopeProvider symbol = FirAnonymousObjectSymbol() @@ -774,6 +784,7 @@ class RawFirBuilder( buildTypeAlias { source = typeAlias.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = typeAlias.nameAsSafeName status = FirDeclarationStatusImpl(typeAlias.visibility, Modality.FINAL).apply { isExpect = typeAlias.hasExpectModifier() @@ -832,6 +843,7 @@ class RawFirBuilder( return functionBuilder.apply { source = function.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = returnType context.firFunctionTargets += target @@ -873,6 +885,7 @@ class RawFirBuilder( return buildAnonymousFunction { source = literalSource session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = returnType receiverTypeRef = receiverType symbol = FirAnonymousFunctionSymbol() @@ -886,6 +899,7 @@ class RawFirBuilder( val multiParameter = buildValueParameter { source = valueParameter.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef { source = multiDeclaration.toFirSourceElement() } @@ -959,6 +973,7 @@ class RawFirBuilder( return buildConstructor { source = this@toFirConstructor.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = delegatedSelfTypeRef val explicitVisibility = visibility status = FirDeclarationStatusImpl(explicitVisibility, Modality.FINAL).apply { @@ -1020,6 +1035,7 @@ class RawFirBuilder( return buildProperty { source = propertySource session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = propertyType name = propertyName this.isVar = isVar @@ -1087,6 +1103,7 @@ class RawFirBuilder( return buildAnonymousInitializer { source = initializer.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source body = if (stubMode) buildEmptyExpressionBlock() else initializer.body.toFirBlock() } } @@ -1178,6 +1195,7 @@ class RawFirBuilder( return buildTypeParameter { source = parameter.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source name = parameterName symbol = FirTypeParameterSymbol() variance = parameter.variance @@ -1310,6 +1328,7 @@ class RawFirBuilder( buildProperty { source = ktSubjectExpression.toFirSourceElement() session = baseSession + origin = FirDeclarationOrigin.Source returnTypeRef = ktSubjectExpression.typeReference.toFirOrImplicitType() receiverTypeRef = null this.name = name diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt index 9833e6c7026..6ba2f56c889 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.contracts.description.InvocationKind import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction @@ -62,6 +63,7 @@ fun FirAnonymousFunction.copy( receiverTypeRef: FirTypeRef? = this.receiverTypeRef, source: FirSourceElement? = this.source, session: FirSession = this.session, + origin: FirDeclarationOrigin = this.origin, returnTypeRef: FirTypeRef = this.returnTypeRef, valueParameters: List = this.valueParameters, body: FirBlock? = this.body, @@ -74,6 +76,7 @@ fun FirAnonymousFunction.copy( return buildAnonymousFunction { this.source = source this.session = session + this.origin = origin this.returnTypeRef = returnTypeRef this.receiverTypeRef = receiverTypeRef symbol = this@copy.symbol diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index ed583968ce2..53ee83146c5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.addDeclarations import org.jetbrains.kotlin.fir.declarations.builder.* @@ -84,6 +85,7 @@ fun deserializeClassToSymbol( ) classBuilder.apply { this.session = session + origin = FirDeclarationOrigin.Library name = classId.shortClassName this.status = status classKind = ProtoEnumFlags.classKind(kind) @@ -132,6 +134,7 @@ fun deserializeClassToSymbol( val enumType = ConeClassLikeTypeImpl(symbol.toLookupTag(), emptyArray(), false) val property = buildEnumEntry { this.session = session + origin = FirDeclarationOrigin.Library returnTypeRef = buildResolvedTypeRef { type = enumType } name = enumEntryName this.symbol = FirVariableSymbol(CallableId(classId, enumEntryName)) @@ -200,6 +203,7 @@ private fun AbstractFirRegularClassBuilder.addCloneForArrayIfNeeded(classId: Cla } declarations += buildSimpleFunction { session = this@addCloneForArrayIfNeeded.session + origin = FirDeclarationOrigin.Library resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES returnTypeRef = buildResolvedTypeRef { val typeArguments = if (classId.shortClassName == ARRAY) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 425eb4fd399..12cb926ae59 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -151,6 +151,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val local = c.childContext(proto.typeParameterList) return buildTypeAlias { session = c.session + origin = FirDeclarationOrigin.Library this.name = name status = FirDeclarationStatusImpl(ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), Modality.FINAL).apply { isExpect = Flags.IS_EXPECT_CLASS.get(flags) @@ -176,6 +177,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val isVar = Flags.IS_VAR.get(flags) return buildProperty { session = c.session + origin = FirDeclarationOrigin.Library returnTypeRef = proto.returnType(c.typeTable).toTypeRef(local) receiverTypeRef = proto.receiverType(c.typeTable)?.toTypeRef(local) name = callableName @@ -196,9 +198,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir } annotations += c.annotationDeserializer.loadPropertyAnnotations(proto, local.nameResolver) - getter = FirDefaultPropertyGetter(null, c.session, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))) + getter = FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))) setter = if (isVar) { - FirDefaultPropertySetter(null, c.session, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))) + FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))) } else null this.containerSource = c.containerSource this.initializer = if (Flags.HAS_CONSTANT.get(flags)) { @@ -227,6 +229,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val simpleFunction = buildSimpleFunction { session = c.session + origin = FirDeclarationOrigin.Library returnTypeRef = proto.returnType(local.typeTable).toTypeRef(local) receiverTypeRef = proto.receiverType(local.typeTable)?.toTypeRef(local) name = callableName @@ -283,6 +286,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { FirConstructorBuilder() }.apply { session = c.session + origin = FirDeclarationOrigin.Library returnTypeRef = delegatedSelfType status = FirDeclarationStatusImpl(ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), Modality.FINAL).apply { isExpect = Flags.IS_EXPECT_FUNCTION.get(flags) @@ -317,6 +321,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val name = c.nameResolver.getName(proto.name) buildValueParameter { session = c.session + origin = FirDeclarationOrigin.Library returnTypeRef = proto.type(c.typeTable).toTypeRef(c) this.name = name symbol = FirVariableSymbol(name) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt index 222b836033e..c61e961793d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.deserialization import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary @@ -63,6 +64,7 @@ class FirTypeDeserializer( } builders += FirTypeParameterBuilder().apply { session = this@FirTypeDeserializer.session + origin = FirDeclarationOrigin.Library this.name = name this.symbol = symbol variance = proto.variance.convertVariance() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt index e46f2cd5556..dc72d286834 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt @@ -124,6 +124,7 @@ class FirSamResolverImpl( FirTypeParameterBuilder().apply { source = declaredTypeParameter.source session = firSession + origin = FirDeclarationOrigin.SamConstructor name = declaredTypeParameter.name this.symbol = FirTypeParameterSymbol() variance = Variance.INVARIANT @@ -155,6 +156,7 @@ class FirSamResolverImpl( return buildSimpleFunction { session = firSession name = classId.shortClassName + origin = FirDeclarationOrigin.SamConstructor status = FirDeclarationStatusImpl(firRegularClass.visibility, Modality.FINAL).apply { isExpect = firRegularClass.isExpect isActual = firRegularClass.isActual @@ -182,6 +184,7 @@ class FirSamResolverImpl( valueParameters += buildValueParameter { session = firSession + origin = FirDeclarationOrigin.SamConstructor returnTypeRef = buildResolvedTypeRef { source = firRegularClass.source type = substitutedFunctionType 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 f5fb8595b3d..b86746255d9 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 @@ -235,6 +235,7 @@ private fun prepareSubstitutingScopeForTypeAliasConstructors( buildConstructor { source = this@factory.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = this@factory.returnTypeRef.withReplacedConeType(newReturnType) receiverTypeRef = this@factory.receiverTypeRef status = this@factory.status @@ -248,6 +249,7 @@ private fun prepareSubstitutingScopeForTypeAliasConstructors( buildValueParameter { source = valueParameter.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newParameterType) name = valueParameter.name symbol = FirVariableSymbol(valueParameter.symbol.callableId) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirBuiltinSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirBuiltinSymbolProvider.kt index 0e2880c05a0..c285ae175b8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirBuiltinSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirBuiltinSymbolProvider.kt @@ -157,6 +157,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider: FirRegularClassSymbol(this).apply symbol@{ buildClassImpl klass@{ session = this@FirBuiltinSymbolProvider.session + origin = FirDeclarationOrigin.Synthetic name = relativeClassName.shortName() status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.ABSTRACT).apply { isExpect = false @@ -174,6 +175,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider: (1..arity).map { buildTypeParameter { session = this@FirBuiltinSymbolProvider.session + origin = FirDeclarationOrigin.Synthetic name = Name.identifier("P$it") symbol = FirTypeParameterSymbol() variance = Variance.IN_VARIANCE @@ -185,6 +187,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider: typeParameters.add( buildTypeParameter { session = this@FirBuiltinSymbolProvider.session + origin = FirDeclarationOrigin.Synthetic name = Name.identifier("R") symbol = FirTypeParameterSymbol() variance = Variance.OUT_VARIANCE @@ -260,6 +263,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider: addDeclaration( buildSimpleFunction { session = this@FirBuiltinSymbolProvider.session + origin = FirDeclarationOrigin.Synthetic returnTypeRef = typeArguments.last() this.name = name status = functionStatus @@ -273,6 +277,8 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider: val parameterName = Name.identifier("p${index + 1}") buildValueParameter { session = this@FirBuiltinSymbolProvider.session + origin = FirDeclarationOrigin.Synthetic + resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES returnTypeRef = typeArgument this.name = parameterName symbol = FirVariableSymbol(parameterName) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirClonableSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirClonableSymbolProvider.kt index 8d64c98d2cd..f2851a05c0d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirClonableSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirClonableSymbolProvider.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildClassImpl import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction @@ -37,6 +38,7 @@ class FirClonableSymbolProvider(session: FirSession, scopeProvider: FirScopeProv private val klass = buildClassImpl { resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES + origin = FirDeclarationOrigin.Library this.session = session status = FirDeclarationStatusImpl( Visibilities.PUBLIC, @@ -46,6 +48,7 @@ class FirClonableSymbolProvider(session: FirSession, scopeProvider: FirScopeProv declarations += buildSimpleFunction { this.session = session resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES + origin = FirDeclarationOrigin.Library returnTypeRef = buildResolvedTypeRef { type = session.builtinTypes.anyType.type } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt index e78937d22a2..facd67ec88c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.inference import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall @@ -159,6 +160,7 @@ class FirCallCompleter( val itType = parameters.single() buildValueParameter { session = this@FirCallCompleter.session + origin = FirDeclarationOrigin.Source returnTypeRef = buildResolvedTypeRef { type = itType.approximateLambdaInputType() } this.name = name symbol = FirVariableSymbol(name) 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 6cf1593fce4..6c7fb7d395b 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 @@ -166,6 +166,7 @@ class FirSyntheticCallGenerator( val typeParameter = buildTypeParameter { session = this@FirSyntheticCallGenerator.session + origin = FirDeclarationOrigin.Library name = Name.identifier("K") symbol = typeParameterSymbol variance = Variance.INVARIANT @@ -230,6 +231,7 @@ class FirSyntheticCallGenerator( ): FirSimpleFunctionBuilder { return FirSimpleFunctionBuilder().apply { session = this@FirSyntheticCallGenerator.session + origin = FirDeclarationOrigin.Synthetic this.symbol = symbol this.name = name status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply { @@ -254,6 +256,7 @@ class FirSyntheticCallGenerator( val name = Name.identifier(nameAsString) return buildValueParameter { session = this@FirSyntheticCallGenerator.session + origin = FirDeclarationOrigin.Library this.name = name returnTypeRef = this@toValueParameter isCrossinline = false 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 81e3dffb0cf..ee96ed07f6b 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 @@ -566,6 +566,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor val name = Name.identifier("it") buildValueParameter { session = this@FirDeclarationsResolveTransformer.session + origin = FirDeclarationOrigin.Source returnTypeRef = buildResolvedTypeRef { type = singleParameterType } this.name = name symbol = FirVariableSymbol(name) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt index dac8dee122f..e6072df136e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirUseSiteMemberScope.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirValueParameter @@ -96,6 +97,7 @@ abstract class AbstractFirUseSiteMemberScope( FirSimpleFunctionBuilder().apply { source = firSimpleFunction.source session = firSimpleFunction.session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = firSimpleFunction.returnTypeRef receiverTypeRef = firSimpleFunction.receiverTypeRef name = firSimpleFunction.name @@ -107,6 +109,7 @@ abstract class AbstractFirUseSiteMemberScope( FirValueParameterBuilder().apply { source = parameter.source session = parameter.session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = parameter.returnTypeRef name = parameter.name symbol = FirVariableSymbol(parameter.symbol.callableId) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index c37d247e4b1..8079047711a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -168,6 +168,7 @@ class FirClassSubstitutionScope( FirTypeParameterBuilder().apply { source = typeParameter.source session = typeParameter.session + origin = FirDeclarationOrigin.FakeOverride name = typeParameter.name symbol = FirTypeParameterSymbol() variance = typeParameter.variance @@ -285,6 +286,7 @@ class FirClassSubstitutionScope( return buildSimpleFunction { source = baseFunction.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = baseFunction.returnTypeRef.withReplacedReturnType(newReturnType) receiverTypeRef = baseFunction.receiverTypeRef?.withReplacedConeType(newReceiverType) name = baseFunction.name @@ -298,6 +300,7 @@ class FirClassSubstitutionScope( buildValueParameter { source = valueParameter.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType) name = valueParameter.name symbol = FirVariableSymbol(valueParameter.symbol.callableId) @@ -355,6 +358,7 @@ class FirClassSubstitutionScope( buildProperty { source = baseProperty.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = baseProperty.returnTypeRef.withReplacedReturnType(newReturnType) receiverTypeRef = baseProperty.receiverTypeRef?.withReplacedConeType(newReceiverType) name = baseProperty.name @@ -384,6 +388,7 @@ class FirClassSubstitutionScope( buildField { source = baseField.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = baseField.returnTypeRef.withReplacedConeType(newReturnType) name = baseField.name this.symbol = symbol @@ -428,6 +433,7 @@ class FirClassSubstitutionScope( return buildConstructor { source = baseConstructor.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = baseConstructor.returnTypeRef.withReplacedReturnType(newReturnType) receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(newReceiverType) status = baseConstructor.status @@ -440,6 +446,7 @@ class FirClassSubstitutionScope( buildValueParameter { source = valueParameter.source this.session = session + origin = FirDeclarationOrigin.FakeOverride returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType) name = valueParameter.name symbol = FirVariableSymbol(valueParameter.symbol.callableId) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt index 8d575df5c8b..aba123d92d2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction @@ -31,6 +32,7 @@ private val VALUE = Name.identifier("value") fun AbstractFirRegularClassBuilder.generateValuesFunction(session: FirSession, packageFqName: FqName, classFqName: FqName) { declarations += buildSimpleFunction { source = this@generateValuesFunction.source + origin = FirDeclarationOrigin.Source this.session = session returnTypeRef = buildResolvedTypeRef { source = this@generateValuesFunction.source @@ -55,6 +57,7 @@ fun AbstractFirRegularClassBuilder.generateValuesFunction(session: FirSession, p fun AbstractFirRegularClassBuilder.generateValueOfFunction(session: FirSession, packageFqName: FqName, classFqName: FqName) { declarations += buildSimpleFunction { source = this@generateValueOfFunction.source + origin = FirDeclarationOrigin.Source this.session = session returnTypeRef = buildResolvedTypeRef { source = this@generateValueOfFunction.source @@ -71,6 +74,7 @@ fun AbstractFirRegularClassBuilder.generateValueOfFunction(session: FirSession, symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, ENUM_VALUE_OF)) valueParameters += buildValueParameter vp@{ source = this@generateValueOfFunction.source + origin = FirDeclarationOrigin.Source this@vp.session = session returnTypeRef = FirImplicitStringTypeRef(source) name = VALUE diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index 6c86903180f..1a69f33a520 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -107,6 +107,7 @@ class FirDefaultPropertySetter( buildDefaultSetterValueParameter builder@{ this@builder.source = source this@builder.session = session + this@builder.origin = origin this@builder.returnTypeRef = propertyTypeRef this@builder.symbol = FirVariableSymbol(CallableId(FqName.ROOT, Name.special(""))) }