From cbbb497edf0f446f80b74c4a8a58481d191a3e05 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 8 Jun 2020 15:47:40 +0300 Subject: [PATCH] Make descriptor-based API in ir:tree more granular --- .../backend/jvm/FirJvmBackendClassResolver.kt | 2 + .../fir/backend/jvm/FirJvmClassCodegen.kt | 2 + .../backend/jvm/FirJvmSerializerExtension.kt | 2 + .../fir/backend/Fir2IrDeclarationStorage.kt | 2 + .../generators/DataClassMembersGenerator.kt | 2 + .../fir/symbols/Fir2IrBindableSymbol.kt | 2 + .../common/AbstractClosureAnnotator.kt | 2 + .../common/DeepCopyIrTreeWithDeclarations.kt | 2 + .../backend/common/DescriptorsToIrRemapper.kt | 2 + .../IrElementTransformerVoidWithContext.kt | 4 ++ .../common/TailRecursionCallsCollector.kt | 2 + .../jetbrains/kotlin/backend/common/ir/Ir.kt | 5 ++ .../kotlin/backend/common/ir/IrInlineUtils.kt | 2 + .../kotlin/backend/common/ir/IrUtils.kt | 8 ++- .../lower/AbstractSuspendFunctionsLowering.kt | 2 + .../lower/DefaultArgumentStubGenerator.kt | 22 ++++++-- .../backend/common/lower/EnumWhenLowering.kt | 7 ++- .../common/lower/InnerClassesLowering.kt | 13 ++--- .../common/lower/LocalDeclarationsLowering.kt | 20 ++++--- .../kotlin/backend/common/lower/LowerUtils.kt | 3 ++ .../ProvisionalFunctionExpressionLowering.kt | 1 + .../common/lower/inline/FunctionInlining.kt | 9 ++-- .../common/lower/loops/ProgressionHandlers.kt | 2 + .../common/lower/loops/ProgressionType.kt | 33 ++++++++++-- .../backend/common/lower/loops/Utils.kt | 16 ++++-- .../lower/matchers/IrFunctionMatcher.kt | 2 + .../ir/backend/js/JsDeclarationFactory.kt | 2 + .../ir/backend/js/JsIrBackendContext.kt | 7 ++- .../ir/backend/js/JsSharedVariablesManager.kt | 13 +++-- .../kotlin/ir/backend/js/ir/IrBuilder.kt | 16 +++--- .../backend/js/lower/BridgesConstruction.kt | 2 + .../js/lower/CreateScriptFunctionsPhase.kt | 7 ++- .../ir/backend/js/lower/EnumClassLowering.kt | 7 ++- .../lower/JsDefaultArgumentStubGenerator.kt | 7 ++- ...MoveBodilessDeclarationsToSeparatePlace.kt | 2 + .../js/lower/PrimaryConstructorLowering.kt | 7 ++- .../js/lower/PrivateMembersLowering.kt | 8 +-- .../js/lower/ScriptRemoveReceiverLowering.kt | 2 + .../backend/js/lower/SecondaryCtorLowering.kt | 6 ++- .../ir/backend/js/lower/ThrowableLowering.kt | 12 ++++- .../ir/backend/js/lower/VarargLowering.kt | 21 ++++++-- .../EqualityAndComparisonCallsTransformer.kt | 4 +- .../calls/NumberOperatorCallsTransformer.kt | 12 +++-- ...PrimitiveContainerMemberCallTransformer.kt | 4 +- .../kotlin/ir/backend/js/utils/misc.kt | 8 ++- .../jvm/lower/AddContinuationLowering.kt | 6 +-- .../kotlin/backend/wasm/WasmBackendContext.kt | 2 + .../psi2ir/generators/ClassGenerator.kt | 2 + .../psi2ir/generators/DeclarationGenerator.kt | 2 +- .../IrSyntheticDeclarationGenerator.kt | 2 +- .../generators/OperatorExpressionGenerator.kt | 2 +- .../StandaloneDeclarationGenerator.kt | 4 +- compiler/ir/ir.tree/build.gradle.kts | 8 --- .../kotlin/ir/builders/ExpressionHelpers.kt | 52 ++++++++++++------- .../kotlin/ir/builders/Primitives.kt | 10 +++- .../org/jetbrains/kotlin/ir/builders/Scope.kt | 3 ++ .../kotlin/ir/builders/ScopeHelpers.kt | 36 ------------- .../ir/declarations/IrAnonymousInitializer.kt | 2 + .../kotlin/ir/declarations/IrClass.kt | 2 + .../kotlin/ir/declarations/IrConstructor.kt | 2 + .../kotlin/ir/declarations/IrEnumEntry.kt | 2 + .../kotlin/ir/declarations/IrField.kt | 2 + .../kotlin/ir/declarations/IrFunction.kt | 8 +-- .../declarations/IrLocalDelegatedProperty.kt | 2 + .../kotlin/ir/declarations/IrProperty.kt | 2 + .../kotlin/ir/declarations/IrReturnTarget.kt | 3 ++ .../kotlin/ir/declarations/IrTypeAlias.kt | 3 ++ .../kotlin/ir/declarations/IrTypeParameter.kt | 2 + .../ir/declarations/IrValueDeclaration.kt | 4 +- .../ir/declarations/IrValueParameter.kt | 2 + .../kotlin/ir/declarations/IrVariable.kt | 2 + .../impl/IrAnonymousInitializerImpl.kt | 2 + .../ir/declarations/impl/IrClassImpl.kt | 2 + .../ir/declarations/impl/IrConstructorImpl.kt | 2 + .../ir/declarations/impl/IrEnumEntryImpl.kt | 2 + .../impl/IrErrorDeclarationImpl.kt | 2 + .../impl/IrExternalPackageFragmentImpl.kt | 3 ++ .../ir/declarations/impl/IrFieldImpl.kt | 2 + .../kotlin/ir/declarations/impl/IrFileImpl.kt | 2 + .../ir/declarations/impl/IrFunctionImpl.kt | 9 +++- .../impl/IrLocalDelegatedPropertyImpl.kt | 2 + .../ir/declarations/impl/IrPropertyImpl.kt | 10 +++- .../ir/declarations/impl/IrScriptImpl.kt | 3 ++ .../ir/declarations/impl/IrTypeAliasImpl.kt | 2 + .../declarations/impl/IrTypeParameterImpl.kt | 2 + .../declarations/impl/IrValueParameterImpl.kt | 3 ++ .../ir/declarations/impl/IrVariableImpl.kt | 2 + .../ir/declarations/lazy/IrLazyClass.kt | 2 + .../ir/declarations/lazy/IrLazyConstructor.kt | 2 + .../lazy/IrLazyDeclarationBase.kt | 2 + .../declarations/lazy/IrLazyEnumEntryImpl.kt | 2 + .../ir/declarations/lazy/IrLazyField.kt | 2 + .../ir/declarations/lazy/IrLazyFunction.kt | 2 + .../declarations/lazy/IrLazyFunctionBase.kt | 2 + .../ir/declarations/lazy/IrLazyProperty.kt | 2 + .../ir/declarations/lazy/IrLazyTypeAlias.kt | 2 + .../declarations/lazy/IrLazyTypeParameter.kt | 2 + .../lazy/LazyScopedTypeParametersResolver.kt | 2 + .../kotlin/ir/descriptors/IrBuiltIns.kt | 2 - .../ir/descriptors/IrFunctionFactory.kt | 3 ++ .../kotlin/ir/descriptors/IrOperators.kt | 5 ++ .../ir/descriptors/WrappedDescriptors.kt | 18 ++++++- .../expressions/IrMemberAccessExpression.kt | 4 ++ .../jetbrains/kotlin/ir/expressions/IrTry.kt | 3 ++ .../kotlin/ir/expressions/impl/IrBlockImpl.kt | 2 + .../kotlin/ir/expressions/impl/IrCallImpl.kt | 6 ++- .../expressions/impl/IrConstructorCallImpl.kt | 11 ++-- .../impl/IrDelegatingConstructorCallImpl.kt | 3 ++ .../impl/IrEnumConstructorCallImpl.kt | 3 ++ .../impl/IrFunctionReferenceImpl.kt | 2 + .../impl/IrInstanceInitializerCallImpl.kt | 2 + .../ir/expressions/impl/IrReturnImpl.kt | 2 + .../kotlin/ir/expressions/impl/IrTryImpl.kt | 2 + .../ir/symbols/IrClassifierEqualityChecker.kt | 2 + .../kotlin/ir/symbols/IrDelegatingSymbol.kt | 4 ++ .../jetbrains/kotlin/ir/symbols/IrSymbol.kt | 8 +++ .../ir/symbols/impl/IrPrivateSymbolBase.kt | 3 ++ .../ir/symbols/impl/IrPublicSymbolBase.kt | 2 + .../kotlin/ir/types/IrTypeSystemContext.kt | 2 + .../org/jetbrains/kotlin/ir/types/irTypes.kt | 3 ++ .../kotlin/ir/util/AdditionalIrUtils.kt | 6 +-- .../kotlin/ir/util/ConstantValueGenerator.kt | 7 ++- .../ir/util/DataClassMembersGenerator.kt | 25 ++++++--- .../ir/util/DeclarationStubGenerator.kt | 2 + .../ir/util/DeepCopyIrTreeWithSymbols.kt | 2 + .../kotlin/ir/util/DeepCopySymbolRemapper.kt | 2 + .../ir/util/ExpectDeclarationRemover.kt | 2 + .../org/jetbrains/kotlin/ir/util/IrUtils.kt | 17 +++++- .../kotlin/ir/util/RenderIrElement.kt | 3 ++ .../ir/util/ScopedTypeParametersResolver.kt | 4 ++ .../jetbrains/kotlin/ir/util/SymbolTable.kt | 26 ++++++++++ .../kotlin/ir/util/TypeTranslator.kt | 6 ++- .../org/jetbrains/kotlin/ir/util/overrides.kt | 6 ++- .../kotlin/ir/AbstractIrTextTestCase.kt | 9 ++-- .../parcel/ir/IrParcelSerializerFactory.kt | 4 +- .../parcel/ir/ParcelableIrTransformer.kt | 2 + .../synthetic/codegen/AndroidIrExtension.kt | 3 ++ .../build.gradle.kts | 9 ++++ .../compiler/backend/ir/GeneratorHelpers.kt | 2 + .../ir/SerializableCompanionIrGenerator.kt | 2 + .../backend/ir/SerializableIrGenerator.kt | 2 + .../backend/ir/SerializerForEnumsGenerator.kt | 2 + .../backend/ir/SerializerIrGenerator.kt | 2 + 143 files changed, 605 insertions(+), 187 deletions(-) delete mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ScopeHelpers.kt diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmBackendClassResolver.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmBackendClassResolver.kt index 9130ee5187d..404d8e6e9f2 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmBackendClassResolver.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmBackendClassResolver.kt @@ -11,9 +11,11 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.fir.backend.Fir2IrComponents import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.org.objectweb.asm.Type class FirJvmBackendClassResolver(val components: Fir2IrComponents) : JvmBackendClassResolver { + @DescriptorBasedIr override fun resolveToClassDescriptors(type: Type): List { if (type.sort != Type.OBJECT) return emptyList() 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 284360e998e..8c345bb2ba8 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 @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.coneTypeUnsafe +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrFunction @@ -96,6 +97,7 @@ class FirJvmClassCodegen( } } + @OptIn(DescriptorBasedIr::class) override fun generateKotlinMetadataAnnotation() { val localDelegatedProperties = (irClass.attributeOwnerId as? IrClass)?.let(context.localDelegatedProperties::get) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt index bee9b8bc910..e7a6f4858d6 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.serialization.FirElementSerializer import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension import org.jetbrains.kotlin.fir.serialization.nonSourceAnnotations import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME @@ -75,6 +76,7 @@ class FirJvmSerializerExtension @JvmOverloads constructor( return classBuilderMode != ClassBuilderMode.ABI || nestedClass.effectiveVisibility != FirEffectiveVisibilityImpl.Private } + @OptIn(DescriptorBasedIr::class) override fun serializeClass( klass: FirClass<*>, proto: ProtoBuf.Class.Builder, diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 10ab39eac91..35661150d71 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.* @@ -45,6 +46,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +@OptIn(DescriptorBasedIr::class) class Fir2IrDeclarationStorage( private val components: Fir2IrComponents, private val moduleDescriptor: FirModuleDescriptor, 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 112f1ba7f61..695ba9291b7 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 @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.IrGeneratorContextBase import org.jetbrains.kotlin.ir.declarations.* @@ -50,6 +51,7 @@ import org.jetbrains.kotlin.name.Name * fir own logic that traverses class hierarchies in fir elements. Also, this one creates and passes IR elements, instead of providing how * to declare them, to [DataClassMembersGenerator]. */ +@OptIn(DescriptorBasedIr::class) class DataClassMembersGenerator(val components: Fir2IrComponents) { fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List = diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt index 30bab56a5c5..171038110e4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/symbols/Fir2IrBindableSymbol.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.symbols import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.symbols.IrBindableSymbol @@ -36,6 +37,7 @@ abstract class Fir2IrBindableSymbol WrappedEnumEntryDescriptor().apply { bind(owner) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/AbstractClosureAnnotator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/AbstractClosureAnnotator.kt index 97407db2bee..8a94485ad35 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/AbstractClosureAnnotator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/AbstractClosureAnnotator.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.backend.common import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFunction @@ -30,6 +31,7 @@ import java.util.* class Closure(val capturedValues: List) +@OptIn(DescriptorBasedIr::class) abstract class AbstractClosureAnnotator : IrElementVisitorVoid { protected abstract fun recordFunctionClosure(functionDescriptor: FunctionDescriptor, closure: Closure) protected abstract fun recordClassClosure(classDescriptor: ClassDescriptor, closure: Closure) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDeclarations.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDeclarations.kt index 6bd4876325a..6665340c37c 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDeclarations.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDeclarations.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.backend.common import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.descriptors.WrappedVariableDescriptor @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.ir.util.DescriptorsRemapper import org.jetbrains.kotlin.ir.visitors.acceptVoid @Suppress("UNCHECKED_CAST") +@OptIn(DescriptorBasedIr::class) fun T.deepCopyWithVariables(): T { val descriptorsRemapper = object : DescriptorsRemapper { override fun remapDeclaredVariable(descriptor: VariableDescriptor) = WrappedVariableDescriptor() diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DescriptorsToIrRemapper.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DescriptorsToIrRemapper.kt index 4ee3a819285..f721e2c5bfa 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DescriptorsToIrRemapper.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DescriptorsToIrRemapper.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.backend.common import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.* @@ -50,6 +51,7 @@ object DescriptorsToIrRemapper : DescriptorsRemapper { WrappedValueParameterDescriptor(descriptor.annotations, descriptor.source) } +@OptIn(DescriptorBasedIr::class) object WrappedDescriptorPatcher : IrElementVisitorVoid { override fun visitElement(element: IrElement) { element.acceptChildrenVoid(this) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrElementTransformerVoidWithContext.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrElementTransformerVoidWithContext.kt index 9d5665f0007..60d4e0592a5 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrElementTransformerVoidWithContext.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrElementTransformerVoidWithContext.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.backend.common +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.Scope @@ -101,6 +102,7 @@ abstract class IrElementTransformerVoidWithContext : IrElementTransformerVoid() protected val allScopes get() = scopeStack protected val currentDeclarationParent get() = scopeStack.lastOrNull { it.irElement is IrDeclarationParent }?.irElement as? IrDeclarationParent + @DescriptorBasedIr fun printScopeStack() { scopeStack.forEach { println(it.scope.scopeOwner) } } @@ -138,6 +140,7 @@ abstract class IrElementTransformerVoidWithContext : IrElementTransformerVoid() } } +@OptIn(DescriptorBasedIr::class) abstract class IrElementVisitorVoidWithContext : IrElementVisitorVoid { private val scopeStack = mutableListOf() @@ -198,6 +201,7 @@ abstract class IrElementVisitorVoidWithContext : IrElementVisitorVoid { protected val parentScope get() = if (scopeStack.size < 2) null else scopeStack[scopeStack.size - 2] protected val allScopes get() = scopeStack + @DescriptorBasedIr fun printScopeStack() { scopeStack.forEach { println(it.scope.scopeOwner) } } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt index fa1957567b5..73e1cd7fc04 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/TailRecursionCallsCollector.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.backend.common +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFunction @@ -34,6 +35,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor * It is also not guaranteed that each returned call is detected as tail recursion by the frontend. * However any returned call can be correctly optimized as tail recursion. */ +@OptIn(DescriptorBasedIr::class) fun collectTailRecursionCalls(irFunction: IrFunction): Set { if ((irFunction as? IrSimpleFunction)?.isTailrec != true) { return emptySet() diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt index ce51952c101..62d841bb704 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/Ir.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrPackageFragment @@ -109,6 +110,8 @@ open class BuiltinSymbolsBase(protected val irBuiltIns: IrBuiltIns, protected va val intProgression = progression("IntProgression") val longProgression = progression("LongProgression") val progressionClasses = listOfNotNull(charProgression, intProgression, longProgression, uIntProgression, uLongProgression) + + @DescriptorBasedIr val progressionClassesTypes = progressionClasses.map { it.descriptor.defaultType }.toSet() val getProgressionLastElementByReturnType = builtInsPackage("kotlin", "internal") @@ -143,6 +146,8 @@ open class BuiltinSymbolsBase(protected val irBuiltIns: IrBuiltIns, protected va val long = symbolTable.referenceClass(builtIns.long) val integerClasses = listOf(byte, short, int, long) + + @DescriptorBasedIr val integerClassesTypes = integerClasses.map { it.descriptor.defaultType } val arrayOf = getSimpleFunction(Name.identifier("arrayOf")) { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt index 4cbfeda267b..2bfdb9c8eb8 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.backend.common.ir import org.jetbrains.kotlin.backend.common.lower.VariableRemapper +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* @@ -86,6 +87,7 @@ private fun IrBody.move( // TODO use a generic inliner (e.g. JS/Native's FunctionInlining.Inliner) // Inline simple function calls without type parameters, default parameters, or varargs. +@OptIn(DescriptorBasedIr::class) fun IrFunction.inline(target: IrDeclarationParent, arguments: List = listOf()): IrReturnableBlock = IrReturnableBlockImpl(startOffset, endOffset, returnType, IrReturnableBlockSymbolImpl(descriptor), null, symbol).apply { statements += body!!.move(this@inline, target, symbol, valueParameters.zip(arguments).toMap()).statements diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 6e8ddf4e3be..b1179b72857 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.Scope @@ -130,6 +131,7 @@ fun IrCall.getAnnotationClass(): IrClass { val IrTypeParametersContainer.classIfConstructor get() = if (this is IrConstructor) parentAsClass else this +@OptIn(DescriptorBasedIr::class) fun IrValueParameter.copyTo( irFunction: IrFunction, origin: IrDeclarationOrigin = this.origin, @@ -172,6 +174,7 @@ fun IrValueParameter.copyTo( } } +@OptIn(DescriptorBasedIr::class) fun IrTypeParameter.copyToWithoutSuperTypes( target: IrTypeParametersContainer, index: Int = this.index, @@ -185,6 +188,7 @@ fun IrTypeParameter.copyToWithoutSuperTypes( } } +@OptIn(DescriptorBasedIr::class) fun IrFunction.copyReceiverParametersFrom(from: IrFunction) { dispatchReceiverParameter = from.dispatchReceiverParameter?.let { IrValueParameterImpl(it.startOffset, it.endOffset, it.origin, it.descriptor, it.type, it.varargElementType).also { @@ -457,6 +461,7 @@ fun IrClass.createParameterDeclarations() { } } +@OptIn(DescriptorBasedIr::class) fun IrFunction.createDispatchReceiverParameter(origin: IrDeclarationOrigin? = null) { assert(dispatchReceiverParameter == null) @@ -479,7 +484,7 @@ val IrFunction.allParameters: List get() = if (this is IrConstructor) { listOf( this.constructedClass.thisReceiver - ?: error(this.descriptor) + ?: error(this.render()) ) + explicitParameters } else { explicitParameters @@ -548,6 +553,7 @@ fun IrClass.addFakeOverridesViaIncorrectHeuristic(implementedMembers: List(val context: C) : FileLoweringPass { protected object STATEMENT_ORIGIN_COROUTINE_IMPL : IrStatementOriginImpl("COROUTINE_IMPL") diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index aa07ecb8aa5..ab10eaab6b5 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.ir.* import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter @@ -282,7 +283,11 @@ open class DefaultParameterInjector( expression.transformChildrenVoid() return visitFunctionAccessExpression(expression) { with(expression) { - IrDelegatingConstructorCallImpl(startOffset, endOffset, type, it as IrConstructorSymbol, typeArgumentsCount) + IrDelegatingConstructorCallImpl( + startOffset, endOffset, type, it as IrConstructorSymbol, + typeArgumentsCount = typeArgumentsCount, + valueArgumentsCount = it.owner.valueParameters.size + ) } } } @@ -300,7 +305,11 @@ open class DefaultParameterInjector( expression.transformChildrenVoid() return visitFunctionAccessExpression(expression) { with(expression) { - IrEnumConstructorCallImpl(startOffset, endOffset, type, it as IrConstructorSymbol) + IrEnumConstructorCallImpl( + startOffset, endOffset, type, it as IrConstructorSymbol, + typeArgumentsCount = typeArgumentsCount, + valueArgumentsCount = it.owner.valueParameters.size + ) } } } @@ -309,7 +318,13 @@ open class DefaultParameterInjector( expression.transformChildrenVoid() return visitFunctionAccessExpression(expression) { with(expression) { - IrCallImpl(startOffset, endOffset, type, it, typeArgumentsCount, DEFAULT_DISPATCH_CALL, superQualifierSymbol) + IrCallImpl( + startOffset, endOffset, type, it, + typeArgumentsCount = typeArgumentsCount, + valueArgumentsCount = it.owner.valueParameters.size, + origin = DEFAULT_DISPATCH_CALL, + superQualifierSymbol = superQualifierSymbol + ) } } } @@ -480,6 +495,7 @@ private fun IrFunction.generateDefaultsFunction( return null } +@OptIn(DescriptorBasedIr::class) private fun IrFunction.generateDefaultsFunctionImpl( context: CommonBackendContext, newOrigin: IrDeclarationOrigin, diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/EnumWhenLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/EnumWhenLowering.kt index e623db4d684..f6b2b686364 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/EnumWhenLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/EnumWhenLowering.kt @@ -102,7 +102,12 @@ open class EnumWhenLowering(protected val context: CommonBackendContext) : IrEle else -> return super.visitCall(expression) } val subjectOrdinal = topmostOrdinalProvider.value - return IrCallImpl(expression.startOffset, expression.endOffset, expression.type, expression.symbol).apply { + return IrCallImpl( + expression.startOffset, expression.endOffset, + expression.type, expression.symbol, + typeArgumentsCount = 0, + valueArgumentsCount = 2 + ).apply { putValueArgument(0, IrGetValueImpl(lhs.startOffset, lhs.endOffset, subjectOrdinal.type, subjectOrdinal.symbol)) putValueArgument(1, IrConstImpl.int(rhs.startOffset, rhs.endOffset, context.irBuiltIns.intType, entryOrdinal)) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 2ab37dde75b..6270c4f8d1b 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -17,13 +17,11 @@ import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.types.classOrNull -import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid -import org.jetbrains.kotlin.utils.addToStdlib.cast class InnerClassesLowering(val context: BackendContext) : DeclarationTransformer { @@ -225,7 +223,9 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe val newCallee = context.declarationFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor) val newCall = IrDelegatingConstructorCallImpl( - expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, expression.typeArgumentsCount + expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, + typeArgumentsCount = expression.typeArgumentsCount, + valueArgumentsCount = newCallee.valueParameters.size ).apply { copyTypeArgumentsFrom(expression) } newCall.putValueArgument(0, dispatchReceiver) @@ -258,9 +258,10 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe endOffset, type, newCallee.symbol, - typeArgumentsCount, - newReflectionTarget?.symbol, - origin + typeArgumentsCount = typeArgumentsCount, + valueArgumentsCount = newCallee.valueParameters.size, + reflectionTarget = newReflectionTarget?.symbol, + origin = origin ) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index 7ed35fd32d2..990bcee7c02 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET @@ -47,7 +48,6 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.util.* interface LocalNameProvider { @@ -229,6 +229,7 @@ class LocalDeclarationsLowering( abbreviation.annotations ) + @OptIn(DescriptorBasedIr::class) private inner class LocalDeclarationsTransformer( val irElement: IrElement, val container: IrDeclaration, val classesToLower: Set? ) { @@ -358,7 +359,8 @@ class LocalDeclarationsLowering( expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, newCallee.symbol, - expression.typeArgumentsCount + typeArgumentsCount = expression.typeArgumentsCount, + valueArgumentsCount = newCallee.valueParameters.size ).also { it.fillArguments2(expression, newCallee) it.copyTypeArgumentsFrom(expression) @@ -416,9 +418,10 @@ class LocalDeclarationsLowering( expression.startOffset, expression.endOffset, expression.type, // TODO functional type for transformed descriptor newCallee.symbol, - newCallee.typeParameters.size, - newReflectionTarget?.symbol, - expression.origin + typeArgumentsCount = newCallee.typeParameters.size, + valueArgumentsCount = newCallee.valueParameters.size, + reflectionTarget = newReflectionTarget?.symbol, + origin = expression.origin ).also { it.fillArguments2(expression, newCallee) it.setLocalTypeArguments(oldCallee) @@ -519,9 +522,10 @@ class LocalDeclarationsLowering( oldCall.startOffset, oldCall.endOffset, newCallee.returnType, newCallee.symbol, - newCallee.typeParameters.size, - oldCall.origin, - oldCall.superQualifierSymbol + typeArgumentsCount = newCallee.typeParameters.size, + valueArgumentsCount = newCallee.valueParameters.size, + origin = oldCall.origin, + superQualifierSymbol = oldCall.superQualifierSymbol ).also { it.setLocalTypeArguments(oldCall.symbol.owner) it.copyTypeArgumentsFrom(oldCall, shift = newCallee.typeParameters.size - oldCall.typeArgumentsCount) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt index 08ece5dbeee..da6415b5b07 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LowerUtils.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.BackendContext import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET @@ -63,6 +64,7 @@ open class VariableRemapper(val mapping: Map) : AbstractVariableRemapper() { override fun remapVariable(value: IrValueDeclaration): IrValueDeclaration? = mapping[value.descriptor] @@ -158,6 +160,7 @@ open class IrBuildingTransformer(private val context: BackendContext) : IrElemen } } +@OptIn(DescriptorBasedIr::class) fun IrConstructor.callsSuper(irBuiltIns: IrBuiltIns): Boolean { val constructedClass = parent as IrClass val superClass = constructedClass.superTypes diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt index 929757f20ea..8421987cade 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt @@ -42,6 +42,7 @@ class ProvisionalFunctionExpressionLowering : startOffset, endOffset, type, function.symbol, typeArgumentsCount = 0, + valueArgumentsCount = function.valueParameters.size, reflectionTarget = null, origin = origin ) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt index 0ead06f1adf..daaab501374 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.ir.Symbols import org.jetbrains.kotlin.backend.common.ir.createTemporaryVariableWithWrappedDescriptor import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.config.languageVersionSettings +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET @@ -36,6 +37,7 @@ interface InlineFunctionResolver { fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction } +@OptIn(DescriptorBasedIr::class) open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) : InlineFunctionResolver { override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction { val descriptor = symbol.descriptor.original @@ -56,6 +58,7 @@ open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) } } +@OptIn(DescriptorBasedIr::class) class FunctionInlining( val context: CommonBackendContext, val inlineFunctionResolver: InlineFunctionResolver @@ -164,10 +167,6 @@ class FunctionInlining( statements.transform { it.transform(transformer, data = null) } statements.addAll(0, evaluationStatements) - val isCoroutineIntrinsicCall = callSite.symbol.descriptor.isBuiltInSuspendCoroutineUninterceptedOrReturn( - context.configuration.languageVersionSettings - ) - return IrReturnableBlockImpl( startOffset = callSite.startOffset, endOffset = callSite.endOffset, @@ -414,7 +413,7 @@ class FunctionInlining( } else -> { - val message = "Incomplete expression: call to ${callee.descriptor} " + + val message = "Incomplete expression: call to ${callee.render()} " + "has no argument at index ${parameter.index}" throw Error(message) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionHandlers.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionHandlers.kt index 9d24cb7351f..d8d913ca692 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionHandlers.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionHandlers.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.lower.matchers.Quantifier import org.jetbrains.kotlin.backend.common.lower.matchers.SimpleCalleeMatcher import org.jetbrains.kotlin.backend.common.lower.matchers.createIrCallMatcher import org.jetbrains.kotlin.backend.common.lower.matchers.singleArgumentExtension +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrVariable @@ -555,6 +556,7 @@ internal class CharSequenceIndicesHandler(context: CommonBackendContext) : Indic } /** Builds a [HeaderInfo] for calls to reverse an iterable. */ +@OptIn(DescriptorBasedIr::class) internal class ReversedHandler(context: CommonBackendContext, private val visitor: HeaderInfoBuilder) : HeaderInfoFromCallHandler { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionType.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionType.kt index 4bb68854563..ba917621a47 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionType.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/ProgressionType.kt @@ -10,6 +10,7 @@ package org.jetbrains.kotlin.backend.common.lower.loops import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.ir.Symbols import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.irChar import org.jetbrains.kotlin.ir.builders.irInt import org.jetbrains.kotlin.ir.builders.irLong @@ -48,8 +49,12 @@ internal sealed class ProgressionType( it.name == numberCastFunctionName && it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null && it.valueParameters.isEmpty() } - IrCallImpl(startOffset, endOffset, castFun.returnType, castFun.symbol) - .apply { dispatchReceiver = this@castIfNecessary } + IrCallImpl( + startOffset, endOffset, + castFun.returnType, castFun.symbol, + typeArgumentsCount = 0, + valueArgumentsCount = 0 + ).apply { dispatchReceiver = this@castIfNecessary } } companion object { @@ -139,14 +144,25 @@ internal abstract class UnsignedProgressionType( if (type == unsignedType) return this return if (unsafeCoerceIntrinsic != null) { - IrCallImpl(startOffset, endOffset, unsignedType, unsafeCoerceIntrinsic).apply { + IrCallImpl( + startOffset, endOffset, + unsignedType, + unsafeCoerceIntrinsic, + typeArgumentsCount = 2, + valueArgumentsCount = 1 + ).apply { putTypeArgument(0, fromType) putTypeArgument(1, unsignedType) putValueArgument(0, this@asUnsigned) } } else { // Fallback to calling `toUInt/ULong()` extension function. - IrCallImpl(startOffset, endOffset, unsignedConversionFunction.owner.returnType, unsignedConversionFunction).apply { + IrCallImpl( + startOffset, endOffset, unsignedConversionFunction.owner.returnType, + unsignedConversionFunction, + typeArgumentsCount = 0, + valueArgumentsCount = 0 + ).apply { extensionReceiver = this@asUnsigned } } @@ -157,7 +173,12 @@ internal abstract class UnsignedProgressionType( if (type == toType) return this return if (unsafeCoerceIntrinsic != null) { - IrCallImpl(startOffset, endOffset, toType, unsafeCoerceIntrinsic).apply { + IrCallImpl( + startOffset, endOffset, toType, + unsafeCoerceIntrinsic, + typeArgumentsCount = 2, + valueArgumentsCount = 1 + ).apply { putTypeArgument(0, unsignedType) putTypeArgument(1, toType) putValueArgument(0, this@asSigned) @@ -169,6 +190,7 @@ internal abstract class UnsignedProgressionType( } } +@OptIn(DescriptorBasedIr::class) internal class UIntProgressionType(symbols: Symbols) : UnsignedProgressionType( symbols, @@ -186,6 +208,7 @@ internal class UIntProgressionType(symbols: Symbols) : override fun DeclarationIrBuilder.zeroStepExpression() = irInt(0) } +@OptIn(DescriptorBasedIr::class) internal class ULongProgressionType(symbols: Symbols) : UnsignedProgressionType( symbols, diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/Utils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/Utils.kt index ab141b7824d..b230c05e683 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/Utils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/Utils.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.backend.common.lower.loops import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder import org.jetbrains.kotlin.ir.builders.createTmpVariable import org.jetbrains.kotlin.ir.builders.irGet -import org.jetbrains.kotlin.ir.declarations.IrValueDeclaration import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConstKind @@ -16,7 +15,6 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrGetValue import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl -import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.getClass import org.jetbrains.kotlin.ir.types.isNothing @@ -36,7 +34,12 @@ internal fun IrExpression.negate(): IrExpression { it.name == OperatorNameConventions.UNARY_MINUS && it.valueParameters.isEmpty() } - IrCallImpl(startOffset, endOffset, type, unaryMinusFun.symbol).apply { + IrCallImpl( + startOffset, endOffset, type, + unaryMinusFun.symbol, + valueArgumentsCount = 0, + typeArgumentsCount = 0 + ).apply { dispatchReceiver = this@negate } } @@ -54,7 +57,12 @@ internal fun IrExpression.decrement(): IrExpression { it.name == OperatorNameConventions.DEC && it.valueParameters.isEmpty() } - IrCallImpl(startOffset, endOffset, type, decFun.symbol).apply { + IrCallImpl( + startOffset, endOffset, type, + decFun.symbol, + valueArgumentsCount = 0, + typeArgumentsCount = 0 + ).apply { dispatchReceiver = this@decrement } } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/matchers/IrFunctionMatcher.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/matchers/IrFunctionMatcher.kt index 587a9cdc2c1..a960130020d 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/matchers/IrFunctionMatcher.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/matchers/IrFunctionMatcher.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.backend.common.lower.matchers +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.types.IrType @@ -51,6 +52,7 @@ internal class ParameterCountMatcher( } } +@OptIn(DescriptorBasedIr::class) internal class FqNameMatcher( val restriction: (FqName) -> Boolean ) : IrFunctionMatcher { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt index 9c0e3668907..ecd7ae9ddf3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsMapping import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder @@ -94,6 +95,7 @@ class JsDeclarationFactory(mapping: JsMapping) : DeclarationFactory { return originalInnerClassPrimaryConstructorByClass[innerClass] } + @OptIn(DescriptorBasedIr::class) private fun createInnerClassConstructorWithOuterThisParameter(oldConstructor: IrConstructor): IrConstructor { val irClass = oldConstructor.parent as IrClass val outerThisType = (irClass.parent as IrClass).defaultType diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt index 662fd417bd9..785c7032459 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt @@ -14,10 +14,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor import org.jetbrains.kotlin.incremental.components.NoLookupLocation -import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.SourceManager -import org.jetbrains.kotlin.ir.SourceRangeInfo -import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET +import org.jetbrains.kotlin.ir.* import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.utils.OperatorNames import org.jetbrains.kotlin.ir.declarations.* @@ -60,6 +57,8 @@ class JsIrBackendContext( val externalPackageFragment = mutableMapOf() val externalDeclarations = hashSetOf() + + @OptIn(DescriptorBasedIr::class) val bodilessBuiltInsPackageFragment: IrPackageFragment = run { class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSymbol { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt index 80cdc6c5aca..574b7ba5b76 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsSharedVariablesManager.kt @@ -45,10 +45,15 @@ class JsSharedVariablesManager(val builtIns: IrBuiltIns, val implicitDeclaration val constructorSymbol = closureBoxConstructorDeclaration.symbol val irCall = - IrConstructorCallImpl.fromSymbolDescriptor(initializer.startOffset, initializer.endOffset, closureBoxType, constructorSymbol) - .apply { - putValueArgument(0, initializer) - } + IrConstructorCallImpl( + initializer.startOffset, initializer.endOffset, + closureBoxType, constructorSymbol, + valueArgumentsCount = 1, + typeArgumentsCount = 0, + constructorTypeArgumentsCount = 0 + ).apply { + putValueArgument(0, initializer) + } val descriptor = WrappedVariableDescriptor() return IrVariableImpl( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt index f1c49df66ae..c1b6687762d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ir/IrBuilder.kt @@ -26,20 +26,23 @@ object JsIrBuilder { object SYNTHESIZED_STATEMENT : IrStatementOriginImpl("SYNTHESIZED_STATEMENT") object SYNTHESIZED_DECLARATION : IrDeclarationOriginImpl("SYNTHESIZED_DECLARATION") - fun buildCall(target: IrFunctionSymbol, type: IrType? = null, typeArguments: List? = null): IrCall = - IrCallImpl( + fun buildCall(target: IrFunctionSymbol, type: IrType? = null, typeArguments: List? = null): IrCall { + val owner = target.owner + return IrCallImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, - type ?: target.owner.returnType, + type ?: owner.returnType, target, - target.owner.typeParameters.size, - SYNTHESIZED_STATEMENT + typeArgumentsCount = owner.typeParameters.size, + valueArgumentsCount = owner.valueParameters.size, + origin = SYNTHESIZED_STATEMENT ).apply { typeArguments?.let { assert(typeArguments.size == typeArgumentsCount) it.withIndex().forEach { (i, t) -> putTypeArgument(i, t) } } } + } fun buildReturn(targetSymbol: IrFunctionSymbol, value: IrExpression, type: IrType) = IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, targetSymbol, value) @@ -191,9 +194,6 @@ object JsIrBuilder { fun buildComposite(type: IrType, statements: List = emptyList()) = IrCompositeImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements) - fun buildFunctionReference(type: IrType, symbol: IrFunctionSymbol, reflectionTarget: IrFunctionSymbol? = symbol) = - IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, 0, reflectionTarget, null) - fun buildFunctionExpression(type: IrType, function: IrSimpleFunction) = IrFunctionExpressionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, function, SYNTHESIZED_STATEMENT) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt index 90f37c5235d..8ef6b0a2284 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/BridgesConstruction.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.common.ir.isMethodOfAny import org.jetbrains.kotlin.backend.common.ir.isSuspend import org.jetbrains.kotlin.backend.common.lower.* import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder @@ -48,6 +49,7 @@ import org.jetbrains.kotlin.ir.util.* // fun foo(t: Any?) = foo(t as Int) // Constructed bridge // } // +@OptIn(DescriptorBasedIr::class) class BridgesConstruction(val context: CommonBackendContext) : DeclarationTransformer { private val specialBridgeMethods = SpecialBridgeMethods(context) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt index 3aebf1af353..ada990a9673 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CreateScriptFunctionsPhase.kt @@ -131,6 +131,11 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri } private fun createCall(function: IrFunction): IrCall { - return IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, function.returnType, function.symbol) + return IrCallImpl( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, function.returnType, + function.symbol, + valueArgumentsCount = function.valueParameters.size, + typeArgumentsCount = function.typeParameters.size + ) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt index 1e354aea0bb..0dbeb919d5e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt @@ -528,7 +528,12 @@ class EnumSyntheticFunctionsLowering(val context: JsIrBackendContext): Declarati private fun List.toArrayLiteral(arrayType: IrType, elementType: IrType): IrExpression { val irVararg = IrVarargImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, elementType, this) - return IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, context.intrinsics.arrayLiteral).apply { + return IrCallImpl( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, + context.intrinsics.arrayLiteral, + typeArgumentsCount = 0, + valueArgumentsCount = 1 + ).apply { putValueArgument(0, irVararg) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt index 99edca49884..9e99500c9b6 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt @@ -80,6 +80,7 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP context.irBuiltIns.anyType, originalFunction.symbol, typeArgumentsCount = 0, + valueArgumentsCount = originalFunction.valueParameters.size, reflectionTarget = originalFunction.symbol, origin = BIND_CALL ) @@ -91,8 +92,10 @@ class JsDefaultCallbackGenerator(val context: JsIrBackendContext): BodyLoweringP endOffset, context.irBuiltIns.anyType, context.intrinsics.jsBind.symbol, - BIND_CALL, - superQualifierSymbol + valueArgumentsCount = 2, + typeArgumentsCount = 0, + origin = BIND_CALL, + superQualifierSymbol = superQualifierSymbol ) }.apply { putValueArgument(0, irCall.dispatchReceiver?.deepCopyWithSymbols()) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt index c2c204f7f1d..45e6161a7aa 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.backend.common.ir.addChild import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.utils.getJsModule @@ -49,6 +50,7 @@ private class DescriptorlessIrFileSymbol : IrFileSymbol { _owner = owner } + @DescriptorBasedIr override val descriptor: PackageFragmentDescriptor get() = error("Operation is unsupported") diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt index 3c83304315e..f32373f993d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrimaryConstructorLowering.kt @@ -71,7 +71,12 @@ class DelegateToSyntheticPrimaryConstructor(context: JsCommonBackendContext) : B override fun visitDeclaration(declaration: IrDeclaration) = declaration // optimize visiting override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) = expression.run { - IrDelegatingConstructorCallImpl(startOffset, endOffset, type, primary.symbol) + IrDelegatingConstructorCallImpl( + startOffset, endOffset, type, + primary.symbol, + valueArgumentsCount = primary.valueParameters.size, + typeArgumentsCount = primary.typeParameters.size + ) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt index f05cc12b7fd..f4ea1c45ae1 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt @@ -199,9 +199,11 @@ class PrivateMemberBodiesLowering(val context: JsIrBackendContext) : BodyLowerin val newExpression = IrCallImpl( expression.startOffset, expression.endOffset, expression.type, - staticTarget.symbol, expression.typeArgumentsCount, - expression.origin, - expression.superQualifierSymbol + staticTarget.symbol, + typeArgumentsCount = expression.typeArgumentsCount, + valueArgumentsCount = expression.valueArgumentsCount + 1, + origin = expression.origin, + superQualifierSymbol = expression.superQualifierSymbol ) newExpression.extensionReceiver = expression.extensionReceiver diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt index 55afe380e07..c5b6c04785c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.descriptors.ScriptDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl @@ -36,6 +37,7 @@ class ScriptRemoveReceiverLowering(val context: CommonBackendContext) : FileLowe private fun IrExpression.nullConst() = IrConstImpl.constNull(startOffset, endOffset, type.makeNullable()) + @OptIn(DescriptorBasedIr::class) fun lower(script: IrScript): List { val transformer: IrElementTransformerVoid = object : IrElementTransformerVoid() { override fun visitCall(expression: IrCall): IrExpression { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt index f8844d3138e..33c10f30337 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/SecondaryCtorLowering.kt @@ -272,7 +272,11 @@ private class CallsiteRedirectionTransformer(private val context: JsIrBackendCon private fun replaceSecondaryConstructorWithFactoryFunction( call: IrFunctionAccessExpression, newTarget: IrSimpleFunctionSymbol - ) = IrCallImpl(call.startOffset, call.endOffset, call.type, newTarget, call.typeArgumentsCount).apply { + ) = IrCallImpl( + call.startOffset, call.endOffset, call.type, newTarget, + typeArgumentsCount = call.typeArgumentsCount, + valueArgumentsCount = newTarget.owner.valueParameters.size + ).apply { copyTypeArgumentsFrom(call) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt index 775eac097b7..cab6f26fe5b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt @@ -72,7 +72,11 @@ class ThrowableLowering( val (messageArg, causeArg) = expression.extractThrowableArguments() return expression.run { - IrCallImpl(startOffset, endOffset, type, newThrowableFunction).also { + IrCallImpl( + startOffset, endOffset, type, newThrowableFunction, + valueArgumentsCount = 2, + typeArgumentsCount = 0 + ).also { it.putValueArgument(0, messageArg) it.putValueArgument(1, causeArg) } @@ -89,7 +93,11 @@ class ThrowableLowering( val thisReceiver = IrGetValueImpl(expression.startOffset, expression.endOffset, klass.thisReceiver!!.symbol) return expression.run { - IrCallImpl(startOffset, endOffset, type, extendThrowableFunction).also { + IrCallImpl( + startOffset, endOffset, type, extendThrowableFunction, + valueArgumentsCount = 3, + typeArgumentsCount = 0 + ).also { it.putValueArgument(0, thisReceiver) it.putValueArgument(1, messageArg) it.putValueArgument(2, causeArg) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/VarargLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/VarargLowering.kt index 5a3ae31cd11..696dad10a5b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/VarargLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/VarargLowering.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.BodyLoweringPass +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.declarations.IrDeclaration @@ -30,6 +31,7 @@ private class VarargTransformer( val context: JsIrBackendContext ) : IrElementTransformerVoid() { + @OptIn(DescriptorBasedIr::class) private fun List.toArrayLiteral(type: IrType, varargElementType: IrType): IrExpression { // TODO: Use symbols when builtins symbol table is fixes @@ -47,8 +49,15 @@ private class VarargTransformer( val irVararg = IrVarargImpl(startOffset, endOffset, type, varargElementType, this) - return IrCallImpl(startOffset, endOffset, type, intrinsic).apply { - if (intrinsic.owner.typeParameters.isNotEmpty()) putTypeArgument(0, varargElementType) + return IrCallImpl( + startOffset, endOffset, + type, intrinsic, + typeArgumentsCount = if (intrinsic.owner.typeParameters.isNotEmpty()) 1 else 0, + valueArgumentsCount = 1 + ).apply { + if (typeArgumentsCount == 1) { + putTypeArgument(0, varargElementType) + } putValueArgument(0, irVararg) } } @@ -149,7 +158,9 @@ private class VarargTransformer( expression.startOffset, expression.endOffset, arrayInfo.primitiveArrayType, - copyFunction + copyFunction, + typeArgumentsCount = 1, + valueArgumentsCount = 1 ).apply { putTypeArgument(0, arrayInfo.primitiveArrayType) putValueArgument(0, segment) @@ -175,7 +186,9 @@ private class VarargTransformer( expression.startOffset, expression.endOffset, arrayInfo.primitiveArrayType, - concatFun + concatFun, + typeArgumentsCount = 0, + valueArgumentsCount = 1 ).apply { putValueArgument(0, arrayLiteral) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt index 0dfa0b61463..122e9d0b014 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/EqualityAndComparisonCallsTransformer.kt @@ -51,7 +51,9 @@ class EqualityAndComparisonCallsTransformer(context: JsIrBackendContext) : Calls call.startOffset, call.endOffset, comparator.owner.returnType, - comparator + comparator, + typeArgumentsCount = 0, + valueArgumentsCount = 2 ).apply { putValueArgument(0, irCall(call, intrinsics.longCompareToLong, argumentsAsReceivers = true)) putValueArgument(1, JsIrBuilder.buildInt(irBuiltIns.intType, 0)) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/NumberOperatorCallsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/NumberOperatorCallsTransformer.kt index f802d174f72..d7d3937a208 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/NumberOperatorCallsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/NumberOperatorCallsTransformer.kt @@ -208,7 +208,9 @@ class NumberOperatorCallsTransformer(context: JsIrBackendContext) : CallsTransfo call.startOffset, call.endOffset, intrinsics.longToDouble.owner.returnType, - intrinsics.longToDouble + intrinsics.longToDouble, + typeArgumentsCount = 0, + valueArgumentsCount = 0 ).apply { dispatchReceiver = arg }) @@ -219,7 +221,9 @@ class NumberOperatorCallsTransformer(context: JsIrBackendContext) : CallsTransfo call.startOffset, call.endOffset, intrinsics.longToFloat.owner.returnType, - intrinsics.longToFloat + intrinsics.longToFloat, + typeArgumentsCount = 0, + valueArgumentsCount = 0 ).apply { dispatchReceiver = arg }) @@ -230,7 +234,9 @@ class NumberOperatorCallsTransformer(context: JsIrBackendContext) : CallsTransfo call.startOffset, call.endOffset, intrinsics.jsNumberToLong.owner.returnType, - intrinsics.jsNumberToLong + intrinsics.jsNumberToLong, + typeArgumentsCount = 0, + valueArgumentsCount = 1 ).apply { putValueArgument(0, call.dispatchReceiver) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/PrimitiveContainerMemberCallTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/PrimitiveContainerMemberCallTransformer.kt index e92e4fe6259..1ff85833401 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/PrimitiveContainerMemberCallTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/calls/PrimitiveContainerMemberCallTransformer.kt @@ -38,7 +38,9 @@ class PrimitiveContainerMemberCallTransformer(private val context: JsIrBackendCo call.startOffset, call.endOffset, call.type, - context.intrinsics.primitiveToSizeConstructor[elementType]!! + context.intrinsics.primitiveToSizeConstructor[elementType]!!, + typeArgumentsCount = 0, + valueArgumentsCount = 1 ).apply { putValueArgument(0, call.getValueArgument(0)) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/misc.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/misc.kt index 6d13fec0ddb..f38e9748761 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/misc.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/misc.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.ir.backend.js.utils import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.declarations.* @@ -37,7 +36,12 @@ fun IrDeclaration.hasStaticDispatch() = when (this) { fun List.toJsArrayLiteral(context: JsIrBackendContext, arrayType: IrType, elementType: IrType): IrExpression { val irVararg = IrVarargImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, elementType, this) - return IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, context.intrinsics.arrayLiteral).apply { + return IrCallImpl( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, arrayType, + context.intrinsics.arrayLiteral, + valueArgumentsCount = 1, + typeArgumentsCount = 0 + ).apply { putValueArgument(0, irVararg) } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt index 4210f88652d..bd71f63323c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AddContinuationLowering.kt @@ -276,7 +276,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) : // TODO: fix the generic signature -- type parameters of FunctionN should be substituted private fun IrClass.addInvokeCallingCreate( create: IrFunction, - invokeSuspend: IrFunction, + invokeSuspend: IrSimpleFunction, invokeToOverride: IrSimpleFunctionSymbol ) = addFunctionOverride(invokeToOverride.owner) { function -> val newlyCreatedObject = irCall(create).also { createCall -> @@ -292,7 +292,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) : // versions; for other lambdas, there's no point in generating a non-overriding `create` separately. private fun IrClass.addInvokeCallingConstructor( constructor: IrFunction, - invokeSuspend: IrFunction, + invokeSuspend: IrSimpleFunction, invokeToOverride: IrSimpleFunctionSymbol, fieldsForBound: List, fieldsForUnbound: List @@ -334,7 +334,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) : return irGet(result) } - private fun IrBlockBodyBuilder.callInvokeSuspend(invokeSuspend: IrFunction, lambda: IrExpression): IrExpression { + private fun IrBlockBodyBuilder.callInvokeSuspend(invokeSuspend: IrSimpleFunction, lambda: IrExpression): IrExpression { // SingletonReferencesLowering has finished a while ago, so `irUnit()` won't work anymore. val unitClass = context.irBuiltIns.unitClass val unitField = this@AddContinuationLowering.context.declarationFactory.getFieldForObjectInstance(unitClass.owner) diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt index 4dcae054c4d..3e72ffb4eb6 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.js.JsDeclarationFactory import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext import org.jetbrains.kotlin.ir.backend.js.JsMapping @@ -80,6 +81,7 @@ class WasmBackendContext( } class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSymbol { + @DescriptorBasedIr override val descriptor: PackageFragmentDescriptor get() = error("Operation is unsupported") diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index b466cf9c939..79a11dc6585 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.backend.common.CodegenUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl @@ -55,6 +56,7 @@ import org.jetbrains.kotlin.types.TypeProjectionImpl import org.jetbrains.kotlin.types.TypeSubstitutor import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize +@OptIn(DescriptorBasedIr::class) class ClassGenerator( declarationGenerator: DeclarationGenerator ) : DeclarationGeneratorExtension(declarationGenerator) { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt index 428e60f079e..658a7705de8 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt @@ -174,7 +174,7 @@ abstract class DeclarationGeneratorExtension(val declarationGenerator: Declarati inline fun T.buildWithScope(builder: (T) -> Unit): T = also { irDeclaration -> - context.symbolTable.withScope(irDeclaration.descriptor) { + context.symbolTable.withScope(irDeclaration) { builder(irDeclaration) } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt index febcb6fe83a..c0aa1bfaf87 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/IrSyntheticDeclarationGenerator.kt @@ -39,7 +39,7 @@ class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisi contributedDescriptors.removeAll(declaredDescriptors) - symbolTable.withScope(irClass.descriptor) { + symbolTable.withScope(irClass) { contributedDescriptors.forEach { it.accept(descriptorGenerator, irClass) } } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt index 63a739bf253..74e931dde81 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt @@ -499,7 +499,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat ?: throw AssertionError("No type for !! argument") val expressionType = argumentType.makeNotNullable() - val checkNotNull = context.irBuiltIns.checkNotNull + val checkNotNull = context.irBuiltIns.checkNotNullSymbol.descriptor val checkNotNullSubstituted = checkNotNull.substitute( TypeSubstitutor.create( diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt index 4c0544f2e28..25ea92a8014 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt @@ -78,7 +78,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { val irClass = IrClassImpl(startOffset, endOffset, origin, symbol, descriptor) - symbolTable.withScope(descriptor) { + symbolTable.withScope(irClass) { irClass.metadata = MetadataSource.Class(descriptor) generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters) @@ -162,7 +162,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { val irConstructor = IrConstructorImpl(startOffset, endOffset, origin, symbol, IrUninitializedType, descriptor) irConstructor.metadata = MetadataSource.Function(descriptor) - symbolTable.withScope(descriptor) { + symbolTable.withScope(irConstructor) { val ctorTypeParameters = descriptor.typeParameters.filter { it.containingDeclaration === descriptor } generateScopedTypeParameterDeclarations(irConstructor, ctorTypeParameters) generateValueParameterDeclarations(irConstructor, descriptor, defaultArgumentFactory) diff --git a/compiler/ir/ir.tree/build.gradle.kts b/compiler/ir/ir.tree/build.gradle.kts index ce4670be612..85c902645a9 100644 --- a/compiler/ir/ir.tree/build.gradle.kts +++ b/compiler/ir/ir.tree/build.gradle.kts @@ -13,12 +13,4 @@ dependencies { sourceSets { "main" { projectDefault() } "test" {} -} - -tasks { - val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { - kotlinOptions { - freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" - } - } } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt index 65034b4aa1f..e28953227e3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.parentAsClass +import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.addToStdlib.assertedCast @@ -45,12 +46,6 @@ fun IrStatementsBuilder.irTemporary( return temporary } -fun IrStatementsBuilder.defineTemporary(value: IrExpression, nameHint: String? = null): VariableDescriptor { - val temporary = scope.createTemporaryVariable(value, nameHint) - +temporary - return temporary.descriptor -} - fun IrStatementsBuilder.irTemporaryVarDeclaration( type: IrType, nameHint: String? = null, @@ -72,12 +67,6 @@ fun IrStatementsBuilder.irTemporaryVar( } -fun IrStatementsBuilder.defineTemporaryVar(value: IrExpression, nameHint: String? = null): VariableDescriptor { - val temporary = scope.createTemporaryVariable(value, nameHint, isMutable = true) - +temporary - return temporary.descriptor -} - fun IrBuilderWithScope.irExprBody(value: IrExpression) = IrExpressionBodyImpl(startOffset, endOffset, value) @@ -89,7 +78,7 @@ fun IrBuilderWithScope.irReturn(value: IrExpression) = startOffset, endOffset, context.irBuiltIns.nothingType, scope.scopeOwnerSymbol.assertedCast { - "Function scope expected: ${scope.scopeOwner}" + "Function scope expected: ${scope.scopeOwnerSymbol.owner.render()}" }, value ) @@ -240,11 +229,29 @@ fun IrBuilderWithScope.irCallConstructor(callee: IrConstructorSymbol, typeArgume } } -fun IrBuilderWithScope.irCall(callee: IrSimpleFunctionSymbol, type: IrType): IrCall = - IrCallImpl(startOffset, endOffset, type, callee) +fun IrBuilderWithScope.irCall( + callee: IrSimpleFunctionSymbol, + type: IrType, + valueArgumentsCount: Int = callee.owner.valueParameters.size, + typeArgumentsCount: Int = callee.owner.typeParameters.size +): IrCall = + IrCallImpl( + startOffset, endOffset, type, callee, + typeArgumentsCount = typeArgumentsCount, + valueArgumentsCount = valueArgumentsCount + ) -fun IrBuilderWithScope.irCall(callee: IrConstructorSymbol, type: IrType): IrConstructorCall = - IrConstructorCallImpl.fromSymbolDescriptor(startOffset, endOffset, type, callee) +fun IrBuilderWithScope.irCall( + callee: IrConstructorSymbol, + type: IrType, + constructedClass: IrClass = callee.owner.parentAsClass +): IrConstructorCall = + IrConstructorCallImpl( + startOffset, endOffset, type, callee, + valueArgumentsCount = callee.owner.valueParameters.size, + typeArgumentsCount = callee.owner.typeParameters.size + constructedClass.typeParameters.size, + constructorTypeArgumentsCount = callee.owner.typeParameters.size + ) fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, type: IrType): IrFunctionAccessExpression = when (callee) { @@ -263,7 +270,12 @@ fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol): IrFunctionAccessExpress irCall(callee, callee.owner.returnType) fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, descriptor: FunctionDescriptor, type: IrType): IrCall = - IrCallImpl(startOffset, endOffset, type, callee as IrSimpleFunctionSymbol) + IrCallImpl( + startOffset, endOffset, type, + callee as IrSimpleFunctionSymbol, + valueArgumentsCount = callee.owner.valueParameters.size, + typeArgumentsCount = callee.owner.typeParameters.size + ) fun IrBuilderWithScope.irCall(callee: IrFunction): IrFunctionAccessExpression = irCall(callee.symbol) @@ -283,12 +295,12 @@ fun IrBuilderWithScope.irDelegatingConstructorCall(callee: IrConstructor): IrDel ) fun IrBuilderWithScope.irCallOp( - callee: IrFunctionSymbol, + callee: IrSimpleFunctionSymbol, type: IrType, dispatchReceiver: IrExpression, argument: IrExpression? = null ): IrMemberAccessExpression = - irCall(callee, type).apply { + irCall(callee, type, valueArgumentsCount = if (argument != null) 1 else 0, typeArgumentsCount = 0).apply { this.dispatchReceiver = dispatchReceiver if (argument != null) putValueArgument(0, argument) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Primitives.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Primitives.kt index 29aa4cb2053..64ff3a89f62 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Primitives.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Primitives.kt @@ -33,7 +33,12 @@ fun primitiveOp1( origin: IrStatementOrigin, dispatchReceiver: IrExpression ): IrExpression = - IrCallImpl(startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, origin = origin).also { + IrCallImpl( + startOffset, endOffset, primitiveOpReturnType, primitiveOpSymbol, + typeArgumentsCount = 0, + valueArgumentsCount = 0, + origin = origin + ).also { it.dispatchReceiver = dispatchReceiver } @@ -47,7 +52,8 @@ fun primitiveOp2( IrCallImpl( startOffset, endOffset, primitiveOpReturnType, - primitiveOpSymbol, typeArgumentsCount = 0, + primitiveOpSymbol, + typeArgumentsCount = 0, valueArgumentsCount = 2, origin = origin ).apply { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt index ab6558e9889..d5984f1eeff 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.builders import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin @@ -34,7 +35,9 @@ import org.jetbrains.kotlin.ir.types.toKotlinType import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.KotlinType +@OptIn(DescriptorBasedIr::class) class Scope(val scopeOwnerSymbol: IrSymbol) { + @DescriptorBasedIr val scopeOwner: DeclarationDescriptor get() = scopeOwnerSymbol.descriptor fun getLocalDeclarationParent(): IrDeclarationParent { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ScopeHelpers.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ScopeHelpers.kt deleted file mode 100644 index 2523e849ea4..00000000000 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ScopeHelpers.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.builders - -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.MemberDescriptor - -inline fun Scope.assertCastOwner() = - scopeOwner as? T ?: throw AssertionError("Unexpected scopeOwner: $scopeOwner") - -fun Scope.functionOwner(): FunctionDescriptor = - assertCastOwner() - -fun Scope.classOwner(): ClassDescriptor = - scopeOwner.let { - when (it) { - is ClassDescriptor -> it - is MemberDescriptor -> it.containingDeclaration as ClassDescriptor - else -> throw AssertionError("Unexpected scopeOwner: $scopeOwner") - } - } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt index c07fa2cd271..67002992444 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt @@ -17,10 +17,12 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol interface IrAnonymousInitializer : IrSymbolDeclaration { + @DescriptorBasedIr override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks val isStatic: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt index 264a2cad767..24bdad33559 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.ir.declarations +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -24,6 +25,7 @@ interface IrClass : IrSymbolDeclaration, IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer { + @DescriptorBasedIr override val descriptor: ClassDescriptor override var visibility: Visibility diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt index e2479deeb0d..9f85fece52d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt @@ -18,10 +18,12 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol interface IrConstructor : IrFunction, IrSymbolDeclaration { + @DescriptorBasedIr override val descriptor: ClassConstructorDescriptor override var visibility: Visibility diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt index e3aba16399a..9ed691bbd3f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt @@ -17,10 +17,12 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol interface IrEnumEntry : IrSymbolDeclaration, IrDeclarationWithName { + @DescriptorBasedIr override val descriptor: ClassDescriptor var correspondingClass: IrClass? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt index 10b39636bce..a7c7c816c1e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol @@ -15,6 +16,7 @@ interface IrField : IrSymbolDeclaration, IrOverridableDeclaration, IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent { + @DescriptorBasedIr override val descriptor: PropertyDescriptor val type: IrType diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index 85cb64f30de..be5f8710adc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.ir.types.IrType interface IrFunction : IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget { + @DescriptorBasedIr override val descriptor: FunctionDescriptor override val symbol: IrFunctionSymbol @@ -44,7 +46,7 @@ interface IrFunction : override val metadata: MetadataSource? } - +@DescriptorBasedIr fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter = valueParameters.getOrElse(parameter.index) { throw AssertionError("No IrValueParameter for $parameter") @@ -54,9 +56,7 @@ fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValue } } -fun IrFunction.getDefault(parameter: ValueParameterDescriptor): IrExpressionBody? = - getIrValueParameter(parameter).defaultValue - +@DescriptorBasedIr fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) { getIrValueParameter(parameter).defaultValue = expressionBody } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt index 3cf06d19b7d..fb61c08d3dc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -25,6 +26,7 @@ interface IrLocalDelegatedProperty : IrDeclarationWithName, IrSymbolOwner { + @DescriptorBasedIr override val descriptor: VariableDescriptorWithAccessors override val symbol: IrLocalDelegatedPropertySymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt index 8b578d1cf86..85244f04e95 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -27,6 +28,7 @@ interface IrProperty : IrOverridableMember, IrSymbolOwner { + @DescriptorBasedIr override val descriptor: PropertyDescriptor override val symbol: IrPropertySymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt index c048ae700bc..1592456c448 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt @@ -6,9 +6,12 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol interface IrReturnTarget : IrSymbolOwner { + @DescriptorBasedIr val descriptor: FunctionDescriptor + override val symbol: IrReturnTargetSymbol } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt index 554ba7d9119..5fa38db9ffc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -15,7 +16,9 @@ interface IrTypeAlias : IrDeclarationWithVisibility, IrTypeParametersContainer { + @DescriptorBasedIr override val descriptor: TypeAliasDescriptor + val isActual: Boolean val expandedType: IrType } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt index f13063b5d82..3572057f9ed 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt @@ -17,12 +17,14 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.types.Variance interface IrTypeParameter : IrSymbolDeclaration, IrDeclarationWithName { + @DescriptorBasedIr override val descriptor: TypeParameterDescriptor val variance: Variance diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt index 1645002f7c2..fc4c37496c9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt @@ -6,12 +6,14 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ValueDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.types.IrType interface IrValueDeclaration : IrDeclarationWithName, IrSymbolOwner { + @DescriptorBasedIr override val descriptor: ValueDescriptor - override val symbol: IrValueSymbol + override val symbol: IrValueSymbol val type: IrType } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt index 1014ddd2a76..9d3bc173d7c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt @@ -17,12 +17,14 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer interface IrValueParameter : IrValueDeclaration, IrSymbolDeclaration { + @DescriptorBasedIr override val descriptor: ParameterDescriptor val index: Int diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt index 332f0d024fd..902402e5fc7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt @@ -17,10 +17,12 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol interface IrVariable : IrValueDeclaration, IrSymbolDeclaration { + @DescriptorBasedIr override val descriptor: VariableDescriptor val isVar: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt index a3a16eb2b6a..1d1d1d7b15b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.impl.carriers.AnonymousInitializerCarrier @@ -39,6 +40,7 @@ class IrAnonymousInitializerImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: ClassDescriptor get() = symbol.descriptor override var bodyField: IrBlockBody? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt index 3e5337ca16f..c3fea2fb002 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.carriers.ClassCarrier import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -76,6 +77,7 @@ class IrClassImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: ClassDescriptor get() = symbol.descriptor override var visibilityField: Visibility = visibility diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt index 74b733827ab..c0466ba7bdc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.carriers.ConstructorCarrier import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -70,6 +71,7 @@ class IrConstructorImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt index efc8dd514fb..ea2025e13cc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrEnumEntry @@ -42,6 +43,7 @@ class IrEnumEntryImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: ClassDescriptor get() = symbol.descriptor override var correspondingClassField: IrClass? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt index 3e0c353c942..1fab6eed12e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt @@ -17,12 +17,14 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration import org.jetbrains.kotlin.ir.declarations.impl.carriers.ErrorCarrier import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +@OptIn(DescriptorBasedIr::class) class IrErrorDeclarationImpl( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt index e36ce85d3e9..db148602b21 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrDeclaration @@ -40,10 +41,12 @@ class IrExternalPackageFragmentImpl( symbol.bind(this) } + @DescriptorBasedIr override val packageFragmentDescriptor: PackageFragmentDescriptor get() = symbol.descriptor override val declarations: MutableList = ArrayList() + @OptIn(DescriptorBasedIr::class) override val containerSource get() = (symbol.descriptor as? DeserializedMemberDescriptor)?.containerSource override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt index 7c52fcd577e..cffd96893c0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.carriers.FieldCarrier import org.jetbrains.kotlin.ir.expressions.IrExpressionBody @@ -69,6 +70,7 @@ class IrFieldImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: PropertyDescriptor = symbol.descriptor override var initializerField: IrExpressionBody? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt index ffa24d56888..462a9e747ee 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.SourceManager import org.jetbrains.kotlin.ir.declarations.* @@ -44,6 +45,7 @@ class IrFileImpl( symbol.bind(this) } + @DescriptorBasedIr override val packageFragmentDescriptor: PackageFragmentDescriptor get() = symbol.descriptor override val declarations: MutableList = ArrayList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index afbe0232ff1..e36b38612d0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionCarrier import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor @@ -38,6 +39,7 @@ abstract class IrFunctionCommonImpl( IrSimpleFunction, FunctionCarrier { + @DescriptorBasedIr abstract override val descriptor: FunctionDescriptor override var overriddenSymbolsField: List = emptyList() @@ -127,6 +129,7 @@ class IrFunctionImpl( IrSimpleFunctionSymbolImpl(descriptor), returnType, descriptor ) + @DescriptorBasedIr override val descriptor: FunctionDescriptor get() = symbol.descriptor init { @@ -160,9 +163,11 @@ class IrFakeOverrideFunctionImpl( override val symbol: IrSimpleFunctionSymbol get() = _symbol ?: error("$this has not acquired a symbol yet") - override val descriptor get() = - _symbol?.descriptor ?: WrappedSimpleFunctionDescriptor() + @DescriptorBasedIr + override val descriptor + get() = _symbol?.descriptor ?: WrappedSimpleFunctionDescriptor() + @OptIn(DescriptorBasedIr::class) fun acquireSymbol(symbol: IrSimpleFunctionSymbol) { assert(_symbol == null) { "$this already has symbol _symbol" } _symbol = symbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt index 0eb50253037..8e46a15bbea 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.carriers.LocalDelegatedPropertyCarrier import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol @@ -44,6 +45,7 @@ class IrLocalDelegatedPropertyImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: VariableDescriptorWithAccessors get() = symbol.descriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt index 1719d6bc326..14715e21563 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.carriers.PropertyCarrier import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor @@ -49,6 +50,7 @@ abstract class IrPropertyCommonImpl( IrProperty, PropertyCarrier { + @DescriptorBasedIr abstract override val descriptor: PropertyDescriptor override var backingFieldField: IrField? = null @@ -214,6 +216,8 @@ class IrPropertyImpl( init { symbol.bind(this) } + + @DescriptorBasedIr override val descriptor: PropertyDescriptor = symbol.descriptor } @@ -238,9 +242,11 @@ class IrFakeOverridePropertyImpl( override val symbol: IrPropertySymbol get() = _symbol ?: error("$this has not acquired a symbol yet") - override val descriptor get() = - _symbol?.descriptor ?: WrappedPropertyDescriptor() + @DescriptorBasedIr + override val descriptor + get() = _symbol?.descriptor ?: WrappedPropertyDescriptor() + @OptIn(DescriptorBasedIr::class) fun acquireSymbol(symbol: IrPropertySymbol) { assert(_symbol == null) { "$this already has symbol _symbol" } _symbol = symbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt index 50f87cad650..89f8a954eb7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ScriptDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* @@ -42,6 +43,8 @@ class IrScriptImpl( override val statements: MutableList = mutableListOf() override lateinit var thisReceiver: IrValueParameter + + @DescriptorBasedIr override val descriptor: ScriptDescriptor = symbol.descriptor init { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt index 4dd05634e93..16f07a9fb2a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrTypeAlias import org.jetbrains.kotlin.ir.declarations.IrTypeParameter @@ -36,6 +37,7 @@ class IrTypeAliasImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: TypeAliasDescriptor get() = symbol.descriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt index ee0f2300248..fba817eb3ca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.impl.carriers.TypeParameterCarrier @@ -60,6 +61,7 @@ class IrTypeParameterImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: TypeParameterDescriptor get() = symbol.descriptor override val superTypes: MutableList = SmartList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt index 75073755d05..9e0ab1c439a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.impl.carriers.ValueParameterCarrier @@ -46,6 +47,7 @@ class IrValueParameterImpl( IrValueParameter, ValueParameterCarrier { + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, @@ -64,6 +66,7 @@ class IrValueParameterImpl( isNoinline = descriptor.safeAs()?.isNoinline ?: false ) + @DescriptorBasedIr override val descriptor: ParameterDescriptor = symbol.descriptor init { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt index a4d8eebe3ac..bdd1b1220b5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrVariable @@ -84,6 +85,7 @@ class IrVariableImpl( symbol.bind(this) } + @DescriptorBasedIr override val descriptor: VariableDescriptor get() = symbol.descriptor override var initializer: IrExpression? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt index f26c5d99aa6..7629e4152f7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -20,6 +21,7 @@ import org.jetbrains.kotlin.metadata.deserialization.NameResolver import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor +@OptIn(DescriptorBasedIr::class) class IrLazyClass( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt index fc0de1d8567..d70b8900480 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyConstructor.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrTypeParameter @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.ir.util.withScope import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name +@OptIn(DescriptorBasedIr::class) class IrLazyConstructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt index 22f319db44c..36873cb4eed 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.types.KotlinType +@OptIn(DescriptorBasedIr::class) abstract class IrLazyDeclarationBase( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyEnumEntryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyEnumEntryImpl.kt index 3f51a6f09f8..b7a227b89d6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyEnumEntryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyEnumEntryImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrEnumEntry @@ -28,6 +29,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name +@OptIn(DescriptorBasedIr::class) class IrLazyEnumEntryImpl( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt index 4568a3c69f3..97aaf97c9c5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrField @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name +@OptIn(DescriptorBasedIr::class) class IrLazyField( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt index b68355814d0..da3ccd89859 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunction.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -18,6 +19,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor +@OptIn(DescriptorBasedIr::class) class IrLazyFunction( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt index 7dea34945d7..2fd8cd26efe 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter @@ -18,6 +19,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name +@OptIn(DescriptorBasedIr::class) abstract class IrLazyFunctionBase( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt index 3e56e08b4f7..805b6f8fdb6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyProperty.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrProperty @@ -21,6 +22,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.hasBackingField +@OptIn(DescriptorBasedIr::class) class IrLazyProperty( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt index 32bb224d8a1..22cf5ce2820 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrTypeAlias import org.jetbrains.kotlin.ir.declarations.IrTypeParameter @@ -20,6 +21,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name +@OptIn(DescriptorBasedIr::class) class IrLazyTypeAlias( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeParameter.kt index 773e86ff937..b8d9cd2b05b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeParameter.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer @@ -19,6 +20,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance +@OptIn(DescriptorBasedIr::class) class IrLazyTypeParameter( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyScopedTypeParametersResolver.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyScopedTypeParametersResolver.kt index 0b1985fd395..b4cca65ba3a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyScopedTypeParametersResolver.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyScopedTypeParametersResolver.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable @@ -26,6 +27,7 @@ class LazyScopedTypeParametersResolver(private val symbolTable: ReferenceSymbolT typeParameterScopes.removeFirst() } + @DescriptorBasedIr override fun resolveScopedTypeParameter(typeParameterDescriptor: TypeParameterDescriptor): IrTypeParameterSymbol? { //Just support accessor scoped symbols resolve in external declaration //there should be enough to process only parent typeparameters diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt index c0a66f0fd10..90f5257c898 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt @@ -286,8 +286,6 @@ class IrBuiltIns( val checkNotNullSymbol = defineCheckNotNullOperator() - val checkNotNull = checkNotNullSymbol.descriptor - private fun TypeConstructor.makeNonNullType() = KotlinTypeFactory.simpleType(Annotations.EMPTY, this, listOf(), false) private fun TypeConstructor.makeNullableType() = KotlinTypeFactory.simpleType(Annotations.EMPTY, this, listOf(), true) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt index ebfea51e183..f7a437a9c35 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.builtins.KOTLIN_REFLECT_FQ_NAME import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance +@OptIn(DescriptorBasedIr::class) abstract class IrAbstractFunctionFactory { abstract fun functionClassDescriptor(arity: Int): FunctionClassDescriptor @@ -75,6 +77,7 @@ abstract class IrAbstractFunctionFactory { } } +@OptIn(DescriptorBasedIr::class) class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTable: SymbolTable) : IrAbstractFunctionFactory() { // TODO: Lazieness diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt index 884e7ff23a0..f388eecc020 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrOperators.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.descriptors import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrBody @@ -81,6 +82,7 @@ class IrBuiltInOperator( override val isOperator: Boolean get() = false override var correspondingPropertySymbol: IrPropertySymbol? by NullValueDelegate() + @DescriptorBasedIr override val descriptor: FunctionDescriptor get() = symbol.descriptor override fun accept(visitor: IrElementVisitor, data: D): R { @@ -106,7 +108,9 @@ class IrBuiltInOperator( class IrBuiltInOperatorValueParameter(override val symbol: IrValueParameterSymbol, override val index: Int, override val type: IrType) : IrValueParameter, IrBuiltInOperatorBase() { + @DescriptorBasedIr override val descriptor: ParameterDescriptor get() = symbol.descriptor + override val varargElementType: IrType? get() = null override val isCrossinline: Boolean get() = false override val isNoinline: Boolean get() = false @@ -133,6 +137,7 @@ class IrBuiltInOperatorTypeParameter( override val isReified: Boolean ) : IrTypeParameter, IrBuiltInOperatorBase() { + @DescriptorBasedIr override val descriptor: TypeParameterDescriptor get() = symbol.descriptor override val superTypes: MutableList = SmartList() override val name: Name = Name.identifier("T$index") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt index a9c6de13ef3..6775c35a70f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* @@ -30,6 +31,7 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.types.* +@OptIn(DescriptorBasedIr::class) abstract class WrappedDeclarationDescriptor(annotations: Annotations) : DeclarationDescriptor { private val annotations_ = annotations @@ -159,6 +161,7 @@ abstract class WrappedCallableDescriptor( // TODO: (Roman Artemev) do not create this kind of descriptor for dispatch receiver parameters // WrappedReceiverParameterDescriptor should be used instead +@OptIn(DescriptorBasedIr::class) open class WrappedValueParameterDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -203,6 +206,7 @@ open class WrappedValueParameterDescriptor( } } +@OptIn(DescriptorBasedIr::class) open class WrappedReceiverParameterDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -240,6 +244,7 @@ open class WrappedReceiverParameterDescriptor( } } +@OptIn(DescriptorBasedIr::class) open class WrappedTypeParameterDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -305,6 +310,7 @@ open class WrappedTypeParameterDescriptor( } +@OptIn(DescriptorBasedIr::class) open class WrappedVariableDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -340,6 +346,7 @@ open class WrappedVariableDescriptor( } } +@OptIn(DescriptorBasedIr::class) open class WrappedVariableDescriptorWithAccessor() : VariableDescriptorWithAccessors, WrappedCallableDescriptor(Annotations.EMPTY, SourceElement.NO_SOURCE) { override fun getName(): Name = owner.name @@ -370,6 +377,7 @@ open class WrappedVariableDescriptorWithAccessor() : VariableDescriptorWithAcces } +@OptIn(DescriptorBasedIr::class) open class WrappedSimpleFunctionDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -454,10 +462,12 @@ open class WrappedSimpleFunctionDescriptor( } } +@OptIn(DescriptorBasedIr::class) class WrappedFunctionDescriptorWithContainerSource( override val containerSource: DeserializedContainerSource? ) : WrappedSimpleFunctionDescriptor(), DescriptorWithContainerSource +@OptIn(DescriptorBasedIr::class) open class WrappedClassConstructorDescriptor( annotations: Annotations = Annotations.EMPTY, sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -552,6 +562,7 @@ open class WrappedClassConstructorDescriptor( } } +@OptIn(DescriptorBasedIr::class) open class WrappedClassDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -669,6 +680,7 @@ class LazyTypeConstructor( get() = SupertypeLoopChecker.EMPTY } +@OptIn(DescriptorBasedIr::class) open class WrappedEnumEntryDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -765,7 +777,7 @@ open class WrappedEnumEntryDescriptor( override fun isDefinitelyNotSamInterface() = true } - +@OptIn(DescriptorBasedIr::class) open class WrappedPropertyDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -875,6 +887,7 @@ class WrappedPropertyDescriptorWithContainerSource( override var containerSource: DeserializedContainerSource? ) : WrappedPropertyDescriptor(), DescriptorWithContainerSource +@OptIn(DescriptorBasedIr::class) abstract class WrappedPropertyAccessorDescriptor(annotations: Annotations, sourceElement: SourceElement) : WrappedSimpleFunctionDescriptor(annotations, sourceElement), PropertyAccessorDescriptor { override fun isDefault(): Boolean = false @@ -902,6 +915,7 @@ class WrappedPropertySetterDescriptor(annotations: Annotations, sourceElement: S override fun getOriginal(): WrappedPropertySetterDescriptor = this } +@OptIn(DescriptorBasedIr::class) open class WrappedTypeAliasDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -958,6 +972,7 @@ open class WrappedTypeAliasDescriptor( } } +@OptIn(DescriptorBasedIr::class) open class WrappedFieldDescriptor( annotations: Annotations = Annotations.EMPTY, private val sourceElement: SourceElement = SourceElement.NO_SOURCE @@ -1062,6 +1077,7 @@ open class WrappedFieldDescriptor( override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null } +@OptIn(DescriptorBasedIr::class) private fun getContainingDeclaration(declaration: IrDeclarationWithName): DeclarationDescriptor { val parent = declaration.parent val parentDescriptor = (parent as IrSymbolOwner).symbol.descriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt index c8b64e12fff..2a48a6df46c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter @@ -80,6 +81,7 @@ fun IrMemberAccessExpression.removeValueArgument(valueParameterDescriptor: Value removeValueArgument(valueParameterDescriptor.index) } +@DescriptorBasedIr inline fun T.mapTypeParameters(transform: (TypeParameterDescriptor) -> IrType) : T = apply { val descriptor = symbol.descriptor as CallableDescriptor @@ -88,6 +90,7 @@ inline fun T.mapTypeParameters(transform: (TypePa } } +@DescriptorBasedIr inline fun T.mapValueParameters(transform: (ValueParameterDescriptor) -> IrExpression?): T = apply { val descriptor = symbol.descriptor as CallableDescriptor @@ -96,6 +99,7 @@ inline fun T.mapValueParameters(transform: (Value } } +@DescriptorBasedIr inline fun T.mapValueParametersIndexed(transform: (Int, ValueParameterDescriptor) -> IrExpression?): T = apply { val descriptor = symbol.descriptor as CallableDescriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt index 5df1c39533e..d3e19051858 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.visitors.IrElementTransformer @@ -30,7 +31,9 @@ interface IrTry : IrExpression { } interface IrCatch : IrElement { + @DescriptorBasedIr val parameter: VariableDescriptor + var catchParameter: IrVariable var result: IrExpression diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt index b11f476b901..482f06f863c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrBlockImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.expressions.IrBlock import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock @@ -75,6 +76,7 @@ class IrReturnableBlockImpl( IrContainerExpressionBase(startOffset, endOffset, type, origin), IrReturnableBlock { + @DescriptorBasedIr override val descriptor = symbol.descriptor constructor( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt index 97558eb0451..933413072b4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.ir.expressions.impl +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.typeParametersCount @@ -23,6 +24,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementVisitor class IrCallImpl( @@ -45,10 +47,11 @@ class IrCallImpl( init { if (symbol is IrConstructorSymbol) { - throw AssertionError("Should be IrConstructorCall: ${symbol.descriptor}") + throw AssertionError("Should be IrConstructorCall: ${this.render()}") } } + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, @@ -61,6 +64,7 @@ class IrCallImpl( origin, superQualifierSymbol ) + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt index 261101c63d7..45e3bd6ad24 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.ir.expressions.impl -import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin @@ -32,6 +32,7 @@ class IrConstructorCallImpl( companion object { + @DescriptorBasedIr fun fromSymbolDescriptor( startOffset: Int, endOffset: Int, @@ -47,10 +48,10 @@ class IrConstructorCallImpl( startOffset, endOffset, type, constructorSymbol, - totalTypeParametersCount, - totalTypeParametersCount - classTypeParametersCount, - valueParametersCount, - origin + typeArgumentsCount = totalTypeParametersCount, + constructorTypeArgumentsCount = totalTypeParametersCount - classTypeParametersCount, + valueArgumentsCount = valueParametersCount, + origin = origin ) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt index e2623cbb718..a8dcb104500 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall import org.jetbrains.kotlin.ir.expressions.typeParametersCount import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -40,6 +41,7 @@ class IrDelegatingConstructorCallImpl( ), IrDelegatingConstructorCall { + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, @@ -47,6 +49,7 @@ class IrDelegatingConstructorCallImpl( symbol: IrConstructorSymbol ) : this(startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size) + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt index e6f4cbda889..a2599d552a3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.ir.expressions.impl +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall import org.jetbrains.kotlin.ir.expressions.typeParametersCount import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -39,6 +40,7 @@ class IrEnumConstructorCallImpl( ), IrEnumConstructorCall { + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, @@ -46,6 +48,7 @@ class IrEnumConstructorCallImpl( symbol: IrConstructorSymbol ) : this(startOffset, endOffset, type, symbol, symbol.descriptor.typeParametersCount, symbol.descriptor.valueParameters.size) + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt index 38145709de6..d2597643ab1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.ir.expressions.impl +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol @@ -43,6 +44,7 @@ class IrFunctionReferenceImpl( ), IrFunctionReference { + @DescriptorBasedIr constructor( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt index f25f0140acb..fbd31965d2c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrInstanceInitializerCallImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -31,6 +32,7 @@ class IrInstanceInitializerCallImpl( IrTerminalExpressionBase(startOffset, endOffset, type), IrInstanceInitializerCall { + @DescriptorBasedIr override val classDescriptor: ClassDescriptor get() = classSymbol.descriptor override fun accept(visitor: IrElementVisitor, data: D): R { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt index 04e669ff8ae..2a6801d22a7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrReturnImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrReturn import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol @@ -34,6 +35,7 @@ class IrReturnImpl( IrExpressionBase(startOffset, endOffset, type), IrReturn { + @DescriptorBasedIr override val returnTarget: FunctionDescriptor get() = returnTargetSymbol.descriptor override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt index 6072cadaf61..d9597bd5cd2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.IrCatch @@ -100,6 +101,7 @@ class IrCatchImpl( override lateinit var catchParameter: IrVariable override lateinit var result: IrExpression + @DescriptorBasedIr override val parameter: VariableDescriptor get() = catchParameter.descriptor override fun accept(visitor: IrElementVisitor, data: D): R { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt index b326e676c05..01811a8180a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrClassifierEqualityChecker.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.symbols import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName import org.jetbrains.kotlin.ir.declarations.IrPackageFragment @@ -22,6 +23,7 @@ interface IrClassifierEqualityChecker { fun getHashCode(symbol: IrClassifierSymbol): Int } +@OptIn(DescriptorBasedIr::class) object FqNameEqualityChecker : IrClassifierEqualityChecker { override fun areEqual(left: IrClassifierSymbol, right: IrClassifierSymbol): Boolean { if (left === right) return true diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrDelegatingSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrDelegatingSymbol.kt index e2562c8fb65..18f5b9cb9d8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrDelegatingSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrDelegatingSymbol.kt @@ -1,13 +1,17 @@ package org.jetbrains.kotlin.ir.symbols import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.util.IdSignature abstract class IrDelegatingSymbol, B : IrSymbolOwner, D : DeclarationDescriptor>(var delegate: S) : IrBindableSymbol { override val owner: B get() = delegate.owner + + @DescriptorBasedIr override val descriptor: D get() = delegate.descriptor + override val isBound: Boolean get() = delegate.isBound override val isPublicApi: Boolean get() = delegate.isPublicApi diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt index cfe47f65bb5..d7a658a8fcf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt @@ -43,12 +43,15 @@ interface IrSymbol { interface IrBindableSymbol : IrSymbol { override val owner: B + + @DescriptorBasedIr override val descriptor: D fun bind(owner: B) } interface IrPackageFragmentSymbol : IrSymbol { + @DescriptorBasedIr override val descriptor: PackageFragmentDescriptor override fun accept(visitor: IrSymbolVisitor, data: D): R = @@ -93,6 +96,7 @@ interface IrFieldSymbol : interface IrClassifierSymbol : IrSymbol, TypeConstructorMarker { + @DescriptorBasedIr override val descriptor: ClassifierDescriptor override fun accept(visitor: IrSymbolVisitor, data: D): R = @@ -123,7 +127,9 @@ interface IrTypeParameterSymbol : interface IrValueSymbol : IrSymbol { + @DescriptorBasedIr override val descriptor: ValueDescriptor + override val owner: IrValueDeclaration override fun accept(visitor: IrSymbolVisitor, data: D): R = @@ -147,7 +153,9 @@ interface IrVariableSymbol : interface IrReturnTargetSymbol : IrSymbol { + @DescriptorBasedIr override val descriptor: FunctionDescriptor + override val owner: IrReturnTarget override fun accept(visitor: IrSymbolVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt index 470d6e223fa..40e7df88f7c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPrivateSymbolBase.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.symbols.impl import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.render +@OptIn(DescriptorBasedIr::class) abstract class IrSymbolBase(override val descriptor: D) : IrSymbol { override fun toString(): String { if (isBound) return owner.render() @@ -81,6 +83,7 @@ class IrExternalPackageFragmentSymbolImpl(descriptor: PackageFragmentDescriptor) IrBindableSymbolBase(descriptor), IrExternalPackageFragmentSymbol +@OptIn(DescriptorBasedIr::class) class IrAnonymousInitializerSymbolImpl(descriptor: ClassDescriptor) : IrBindableSymbolBase(descriptor), IrAnonymousInitializerSymbol { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt index c4cfb3fff5f..048f9dd78dd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/IrPublicSymbolBase.kt @@ -6,12 +6,14 @@ package org.jetbrains.kotlin.ir.symbols.impl import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.WrappedDeclarationDescriptor import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.render +@OptIn(DescriptorBasedIr::class) abstract class IrPublicSymbolBase( override val descriptor: D, override val signature: IdSignature diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt index b7dd2c2d0f8..a9274665f3d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeSystemContext.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.IrConst @@ -30,6 +31,7 @@ import org.jetbrains.kotlin.types.checker.convertVariance import org.jetbrains.kotlin.types.model.* import org.jetbrains.kotlin.ir.types.isPrimitiveType as irTypePredicates_isPrimitiveType +@OptIn(DescriptorBasedIr::class) interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesContext, TypeSystemCommonBackendContext { val irBuiltIns: IrBuiltIns diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt index aeafdde1f22..4533ded5dec 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.types import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -63,6 +64,7 @@ fun IrType.makeNullable() = else this +@DescriptorBasedIr fun IrType.toKotlinType(): KotlinType { originalKotlinType?.let { return it @@ -85,6 +87,7 @@ fun IrClassSymbol.createType(hasQuestionMark: Boolean, arguments: List, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt index f173c213054..a2b97516ab1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt @@ -6,10 +6,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.SourceManager -import org.jetbrains.kotlin.ir.SourceRangeInfo -import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET +import org.jetbrains.kotlin.ir.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -160,6 +157,7 @@ val IrDeclaration.isLocal: Boolean return false } +@DescriptorBasedIr val IrDeclaration.module get() = this.descriptor.module const val SYNTHETIC_OFFSET = -2 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt index 1f6b6540e0f..774df50035f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ConstantValueGenerator.kt @@ -148,10 +148,13 @@ class ConstantValueGenerator( val startOffset = psi?.takeUnless { it.containingFile.fileType.isBinary }?.startOffset ?: UNDEFINED_OFFSET val endOffset = psi?.takeUnless { it.containingFile.fileType.isBinary }?.endOffset ?: UNDEFINED_OFFSET - val irCall = IrConstructorCallImpl.fromSymbolDescriptor( + val irCall = IrConstructorCallImpl( startOffset, endOffset, annotationType.toIrType(), - primaryConstructorSymbol + primaryConstructorSymbol, + valueArgumentsCount = primaryConstructorDescriptor.valueParameters.size, + typeArgumentsCount = 0, + constructorTypeArgumentsCount = 0 ) for (valueParameter in primaryConstructorDescriptor.valueParameters) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt index b1094c41842..80ab451ce00 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* @@ -33,6 +34,7 @@ import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound * * Generating synthetic members of inline class can use this as well, in particular, members from Any: equals, hashCode, and toString. */ +@OptIn(DescriptorBasedIr::class) abstract class DataClassMembersGenerator( val context: IrGeneratorContext, val symbolTable: SymbolTable, @@ -42,7 +44,7 @@ abstract class DataClassMembersGenerator( inline fun T.buildWithScope(builder: (T) -> Unit): T = also { irDeclaration -> - symbolTable.withScope(irDeclaration.descriptor) { + symbolTable.withScope(irDeclaration) { builder(irDeclaration) } } @@ -95,7 +97,8 @@ abstract class DataClassMembersGenerator( +irReturn( irCall( constructorSymbol, - irClass.defaultType + irClass.defaultType, + constructedClass = irClass ).apply { mapTypeParameters(::transform) mapValueParameters { @@ -126,13 +129,13 @@ abstract class DataClassMembersGenerator( private val intClass = context.builtIns.int private val intType = context.builtIns.intType - private val intTimesSymbol: IrFunctionSymbol = + private val intTimesSymbol: IrSimpleFunctionSymbol = intClass.findFirstFunction("times") { KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, intType) } - .let { symbolTable.referenceFunction(it) } + .let { symbolTable.referenceSimpleFunction(it) } - private val intPlusSymbol: IrFunctionSymbol = + private val intPlusSymbol: IrSimpleFunctionSymbol = intClass.findFirstFunction("plus") { KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, intType) } - .let { symbolTable.referenceFunction(it) } + .let { symbolTable.referenceSimpleFunction(it) } fun generateHashCodeMethodBody(properties: List) { val irIntType = context.irBuiltIns.intType @@ -171,8 +174,14 @@ abstract class DataClassMembersGenerator( symbolTable.referenceSimpleFunction(it.original) } - return irCall(hashCodeFunctionSymbol, context.irBuiltIns.intType).apply { - if (hashCodeFunctionSymbol.descriptor.dispatchReceiverParameter != null) { + val hasDispatchReceiver = hashCodeFunctionSymbol.descriptor.dispatchReceiverParameter != null + return irCall( + hashCodeFunctionSymbol, + context.irBuiltIns.intType, + valueArgumentsCount = if (hasDispatchReceiver) 0 else 1, + typeArgumentsCount = 0 + ).apply { + if (hasDispatchReceiver) { dispatchReceiver = irValue } else { putValueArgument(0, irValue) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 4cadd12160b..419787a1ea9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl @@ -38,6 +39,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.addToStdlib.safeAs +@OptIn(DescriptorBasedIr::class) class DeclarationStubGenerator( val moduleDescriptor: ModuleDescriptor, val symbolTable: SymbolTable, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 029ed35698c..03691bda3ca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.ScriptDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* @@ -47,6 +48,7 @@ interface SymbolRenamer { object DEFAULT : SymbolRenamer } +@OptIn(DescriptorBasedIr::class) open class DeepCopyIrTreeWithSymbols( private val symbolRemapper: SymbolRemapper, private val typeRemapper: TypeRemapper, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt index bc574e6b647..4dc35451a5d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopySymbolRemapper.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrBlock @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid +@OptIn(DescriptorBasedIr::class) open class DeepCopySymbolRemapper( private val descriptorsRemapper: DescriptorsRemapper = DescriptorsRemapper.Default ) : IrElementVisitorVoid, SymbolRemapper { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExpectDeclarationRemover.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExpectDeclarationRemover.kt index 63c305480f4..6ec21324c46 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExpectDeclarationRemover.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ExpectDeclarationRemover.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.MemberDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver // `doRemove` means should expect-declaration be removed from IR +@OptIn(DescriptorBasedIr::class) class ExpectDeclarationRemover(val symbolTable: ReferenceSymbolTable, private val doRemove: Boolean) : IrElementVisitorVoid { override fun visitElement(element: IrElement) { element.acceptChildrenVoid(this) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 485148fbf2c..621f30c570a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* @@ -34,6 +35,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs * Binds the arguments explicitly represented in the IR to the parameters of the accessed function. * The arguments are to be evaluated in the same order as they appear in the resulting list. */ +@DescriptorBasedIr fun IrMemberAccessExpression.getArguments(): List> { val res = mutableListOf>() val descriptor = symbol.descriptor as CallableDescriptor @@ -62,6 +64,7 @@ fun IrMemberAccessExpression.getArguments(): List> { val res = mutableListOf>() val irFunction = symbol.owner @@ -121,6 +124,7 @@ fun IrMemberAccessExpression.getArgumentsWithIr(): List) { val descriptor = symbol.descriptor as CallableDescriptor descriptor.dispatchReceiverParameter?.let { @@ -145,6 +149,7 @@ fun IrMemberAccessExpression.addArguments(args: Map>) = this.addArguments(args.toMap()) @@ -156,14 +161,17 @@ fun IrExpression.isFalseConst() = this is IrConst<*> && this.kind == IrConstKind fun IrExpression.isIntegerConst(value: Int) = this is IrConst<*> && this.kind == IrConstKind.Int && this.value == value +@OptIn(DescriptorBasedIr::class) fun IrExpression.coerceToUnit(builtins: IrBuiltIns): IrExpression { val valueType = getKotlinType(this) return coerceToUnitIfNeeded(valueType, builtins) } +@DescriptorBasedIr private fun getKotlinType(irExpression: IrExpression) = irExpression.type.toKotlinType() +@DescriptorBasedIr fun IrExpression.coerceToUnitIfNeeded(valueType: KotlinType, irBuiltIns: IrBuiltIns): IrExpression { return if (KotlinTypeChecker.DEFAULT.isSubtypeOf(valueType, irBuiltIns.unitType.toKotlinType())) this @@ -190,6 +198,7 @@ fun IrExpression.coerceToUnitIfNeeded(valueType: IrType, irBuiltIns: IrBuiltIns) ) } +@DescriptorBasedIr fun IrMemberAccessExpression.usesDefaultArguments(): Boolean = (symbol.descriptor as CallableDescriptor).valueParameters.any { this.getValueArgument(it) == null } @@ -294,11 +303,13 @@ tailrec fun IrElement.getPackageFragment(): IrPackageFragment? { } } +@OptIn(DescriptorBasedIr::class) fun IrAnnotationContainer.getAnnotation(name: FqName): IrConstructorCall? = annotations.find { it.symbol.owner.parentAsClass.descriptor.fqNameSafe == name } +@OptIn(DescriptorBasedIr::class) fun IrAnnotationContainer.hasAnnotation(name: FqName) = annotations.any { it.symbol.owner.parentAsClass.descriptor.fqNameSafe == name @@ -366,6 +377,7 @@ fun IrValueParameter.hasDefaultValue(): Boolean = DFS.ifAny( { current -> current.defaultValue != null } ) +@DescriptorBasedIr fun IrValueParameter.copy(newDescriptor: ParameterDescriptor): IrValueParameter { assert(this.descriptor.type == newDescriptor.type) @@ -473,8 +485,9 @@ fun irCall( type, newSymbol, typeArgumentsCount, - origin, - newSuperQualifierSymbol + valueArgumentsCount = newSymbol.owner.valueParameters.size, + origin = origin, + superQualifierSymbol = newSuperQualifierSymbol ).apply { copyTypeAndValueArgumentsFrom( call, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt index 115928538c3..500af06ede7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.util import com.intellij.openapi.util.text.StringUtil import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* @@ -700,6 +701,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: Nothing?): String = "DYN_MEMBER memberName='${expression.memberName}' type=${expression.type.render()}" + @OptIn(DescriptorBasedIr::class) override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: Nothing?): String = "ERROR_DECL ${declaration.descriptor::class.java.simpleName} " + descriptorRendererForErrorDeclarations.renderDescriptor(declaration.descriptor.original) @@ -713,6 +715,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl private val descriptorRendererForErrorDeclarations = DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES } +@DescriptorBasedIr internal fun IrDeclaration.name(): String = descriptor.name.toString() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ScopedTypeParametersResolver.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ScopedTypeParametersResolver.kt index fece90d0487..e1fc6dcee67 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ScopedTypeParametersResolver.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/ScopedTypeParametersResolver.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import java.util.* @@ -14,9 +15,11 @@ interface TypeParametersResolver { fun enterTypeParameterScope(typeParametersContainer: IrTypeParametersContainer) fun leaveTypeParameterScope() + @DescriptorBasedIr fun resolveScopedTypeParameter(typeParameterDescriptor: TypeParameterDescriptor): IrTypeParameterSymbol? } +@OptIn(DescriptorBasedIr::class) class ScopedTypeParametersResolver : TypeParametersResolver { private val typeParameterScopes = ArrayDeque>() @@ -33,6 +36,7 @@ class ScopedTypeParametersResolver : TypeParametersResolver { typeParameterScopes.removeFirst() } + @DescriptorBasedIr override fun resolveScopedTypeParameter(typeParameterDescriptor: TypeParameterDescriptor): IrTypeParameterSymbol? { for (scope in typeParameterScopes) { val local = scope[typeParameterDescriptor] diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index ecd6d5df4ac..64eacabda85 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.declarations.lazy.IrLazySymbolTable @@ -62,10 +63,14 @@ interface ReferenceSymbolTable { fun referenceTypeParameterFromLinker(classifier: TypeParameterDescriptor, sig: IdSignature): IrTypeParameterSymbol fun referenceTypeAliasFromLinker(descriptor: TypeAliasDescriptor, sig: IdSignature): IrTypeAliasSymbol + @DescriptorBasedIr fun enterScope(owner: DeclarationDescriptor) + fun enterScope(owner: IrDeclaration) + @DescriptorBasedIr fun leaveScope(owner: DeclarationDescriptor) + fun leaveScope(owner: IrDeclaration) } @@ -102,6 +107,7 @@ open class SymbolTable( return createOwner(symbol) } + @OptIn(DescriptorBasedIr::class) inline fun declare(sig: IdSignature, createSymbol: () -> S, createOwner: (S) -> B): B { val existing = get(sig) val symbol = if (existing == null) { @@ -169,6 +175,7 @@ open class SymbolTable( return s } + @OptIn(DescriptorBasedIr::class) inline fun referenced(sig: IdSignature, orElse: () -> S): S { return get(sig) ?: run { val new = orElse() @@ -304,10 +311,12 @@ open class SymbolTable( scope[descriptor] = symbol } + @DescriptorBasedIr fun enterScope(owner: DeclarationDescriptor) { currentScope = Scope(owner, currentScope) } + @DescriptorBasedIr fun leaveScope(owner: DeclarationDescriptor) { currentScope?.owner.let { assert(it == owner) { "Unexpected leaveScope: owner=$owner, currentScope.owner=$it" } @@ -556,6 +565,7 @@ open class SymbolTable( return IrFieldSymbolImpl(descriptor) } + @OptIn(DescriptorBasedIr::class) fun declareField( startOffset: Int, endOffset: Int, @@ -625,6 +635,7 @@ open class SymbolTable( } + @OptIn(DescriptorBasedIr::class) fun declareProperty( startOffset: Int, endOffset: Int, @@ -858,6 +869,7 @@ open class SymbolTable( val unboundTypeParameters: Set get() = globalTypeParameterSymbolTable.unboundSymbols + @OptIn(DescriptorBasedIr::class) fun declareValueParameter( startOffset: Int, endOffset: Int, @@ -880,6 +892,7 @@ open class SymbolTable( valueParameterFactory ) + @OptIn(DescriptorBasedIr::class) fun introduceValueParameter(irValueParameter: IrValueParameter) { valueParameterSymbolTable.introduceLocal(irValueParameter.descriptor, irValueParameter.symbol) } @@ -953,18 +966,22 @@ open class SymbolTable( throw AssertionError("Undefined local delegated property referenced: $descriptor") } + @DescriptorBasedIr override fun enterScope(owner: DeclarationDescriptor) { scopedSymbolTables.forEach { it.enterScope(owner) } } + @OptIn(DescriptorBasedIr::class) override fun enterScope(owner: IrDeclaration) { enterScope(owner.descriptor) } + @DescriptorBasedIr override fun leaveScope(owner: DeclarationDescriptor) { scopedSymbolTables.forEach { it.leaveScope(owner) } } + @OptIn(DescriptorBasedIr::class) override fun leaveScope(owner: IrDeclaration) { leaveScope(owner.descriptor) } @@ -1014,6 +1031,7 @@ open class SymbolTable( } } +@DescriptorBasedIr inline fun SymbolTable.withScope(owner: D, block: SymbolTable.(D) -> T): T { enterScope(owner) val result = block(owner) @@ -1021,6 +1039,14 @@ inline fun SymbolTable.withScope(owner: D, block: return result } +inline fun SymbolTable.withScope(owner: D, block: SymbolTable.(D) -> T): T { + enterScope(owner) + val result = block(owner) + leaveScope(owner) + return result +} + +@DescriptorBasedIr inline fun ReferenceSymbolTable.withReferenceScope(owner: D, block: ReferenceSymbolTable.(D) -> T): T { enterScope(owner) val result = block(owner) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt index daa973d77eb..cdb8cebeedd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/TypeTranslator.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol @@ -25,6 +26,7 @@ import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes import java.util.* +@OptIn(DescriptorBasedIr::class) class TypeTranslator( private val symbolTable: ReferenceSymbolTable, val languageVersionSettings: LanguageVersionSettings, @@ -41,14 +43,14 @@ class TypeTranslator( fun enterScope(irElement: IrTypeParametersContainer) { typeParametersResolver.enterTypeParameterScope(irElement) if (enterTableScope) { - symbolTable.enterScope(irElement.descriptor) + symbolTable.enterScope(irElement) } } fun leaveScope(irElement: IrTypeParametersContainer) { typeParametersResolver.leaveTypeParameterScope() if (enterTableScope) { - symbolTable.leaveScope(irElement.descriptor) + symbolTable.leaveScope(irElement) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt index ced6792cbd1..618a3fa595a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/overrides.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction @@ -15,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType +@DescriptorBasedIr fun SymbolTable.declareSimpleFunctionWithOverrides( startOffset: Int, endOffset: Int, @@ -34,7 +36,7 @@ fun SymbolTable.declareSimpleFunctionWithOverrides( generateOverriddenFunctionSymbols(declaration, this) } - +@DescriptorBasedIr fun generateOverriddenFunctionSymbols( declaration: IrSimpleFunction, symbolTable: ReferenceSymbolTable @@ -44,6 +46,7 @@ fun generateOverriddenFunctionSymbols( } } +@DescriptorBasedIr fun SymbolTable.declareFieldWithOverrides( startOffset: Int, endOffset: Int, @@ -56,6 +59,7 @@ fun SymbolTable.declareFieldWithOverrides( generateOverriddenFieldSymbols(declaration, this, hasBackingField) } +@DescriptorBasedIr fun generateOverriddenFieldSymbols( declaration: IrField, symbolTable: SymbolTable, diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt index d421302c471..83a08e7fc0c 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt @@ -206,7 +206,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { visitDeclaration(declaration) require((declaration.origin == IrDeclarationOrigin.FAKE_OVERRIDE) == declaration.isFakeOverride) { - "${declaration.descriptor}: origin: ${declaration.origin}; isFakeOverride: ${declaration.isFakeOverride}" + "${declaration.render()}: origin: ${declaration.origin}; isFakeOverride: ${declaration.isFakeOverride}" } } @@ -214,10 +214,11 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { visitDeclaration(declaration) require((declaration.origin == IrDeclarationOrigin.FAKE_OVERRIDE) == declaration.isFakeOverride) { - "${declaration.descriptor}: origin: ${declaration.origin}; isFakeOverride: ${declaration.isFakeOverride}" + "${declaration.render()}: origin: ${declaration.origin}; isFakeOverride: ${declaration.isFakeOverride}" } } + @OptIn(DescriptorBasedIr::class) override fun visitFunction(declaration: IrFunction) { visitDeclaration(declaration) @@ -258,7 +259,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { visitFunction(declaration) require((declaration.origin == IrDeclarationOrigin.FAKE_OVERRIDE) == declaration.isFakeOverride) { - "${declaration.descriptor}: origin: ${declaration.origin}; isFakeOverride: ${declaration.isFakeOverride}" + "${declaration.render()}: origin: ${declaration.origin}; isFakeOverride: ${declaration.isFakeOverride}" } } @@ -302,12 +303,14 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { } } + @OptIn(DescriptorBasedIr::class) override fun visitClass(declaration: IrClass) { visitDeclaration(declaration) checkTypeParameters(declaration.descriptor, declaration, declaration.descriptor.declaredTypeParameters) } + @DescriptorBasedIr private fun checkTypeParameters( descriptor: DeclarationDescriptor, declaration: IrTypeParametersContainer, diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializerFactory.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializerFactory.kt index 80ea34e86b3..78576cc4b32 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializerFactory.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializerFactory.kt @@ -6,12 +6,12 @@ package org.jetbrains.kotlin.android.parcel.ir import org.jetbrains.kotlin.android.parcel.serializers.RAWVALUE_ANNOTATION_FQNAME +import org.jetbrains.kotlin.backend.jvm.codegen.psiElement import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.resolve.source.PsiSourceElement class IrParcelSerializerFactory(symbols: AndroidSymbols) { /** @@ -209,7 +209,7 @@ class IrParcelSerializerFactory(symbols: AndroidSymbols) { // for writeToParcel/createFromParcel. For Java classes (or compiled Kotlin classes annotated with // @Parcelize), we'll have a field in the class itself. Finally, with Parcelable instances which were // manually implemented in Kotlin, we'll instead have an @JvmField property getter in the companion object. - return if (classifier.modality == Modality.FINAL && classifier.descriptor.source is PsiSourceElement + return if (classifier.modality == Modality.FINAL && classifier.psiElement != null && (classifier.isParcelize || classifier.hasCreatorField) ) { wrapNullableSerializerIfNeeded(irType, IrEfficientParcelableParcelSerializer(classifier)) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt index ceb4c7cf97f..a41042ee979 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* @@ -39,6 +40,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addToStdlib.safeAs +@OptIn(DescriptorBasedIr::class) class ParcelableIrTransformer(private val context: IrPluginContext, private val androidSymbols: AndroidSymbols) : ParcelableExtensionBase, IrElementVisitorVoid { private val serializerFactory = IrParcelSerializerFactory(androidSymbols) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt index 3ec2c70bbbe..5876833e236 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder import org.jetbrains.kotlin.backend.common.lower.irBlock import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* @@ -50,6 +51,7 @@ abstract class AndroidIrExtension : IrGenerationExtension { } } +@OptIn(DescriptorBasedIr::class) private class AndroidIrTransformer(val extension: AndroidIrExtension, val pluginContext: IrPluginContext) : IrElementTransformerVoidWithContext() { @@ -201,6 +203,7 @@ private class AndroidIrTransformer(val extension: AndroidIrExtension, val plugin private fun FqName.child(name: String) = child(Name.identifier(name)) +@DescriptorBasedIr private fun IrSimpleFunction.callWithRanges(source: IrExpression) = IrCallImpl(source.startOffset, source.endOffset, returnType, symbol) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts b/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts index dedd76e52d4..942739481d2 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle.kts @@ -46,3 +46,12 @@ projectTest(parallel = true) { } apply(from = "$rootDir/gradle/kotlinPluginPublication.gradle.kts") + + +tasks { + val compileKotlin by existing(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=org.jetbrains.kotlin.ir.DescriptorBasedIr" + } + } +} diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt index 6cb2292ec6c..64771dd064c 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.deepCopyWithVariables import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.* @@ -36,6 +37,7 @@ import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.* import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext import org.jetbrains.kotlinx.serialization.compiler.resolve.* +@OptIn(DescriptorBasedIr::class) interface IrBuilderExtension { val compilerContext: SerializationPluginContext diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt index 1c451bd6e72..4d502462e7a 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlinx.serialization.compiler.backend.ir import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope import org.jetbrains.kotlin.ir.builders.irGet import org.jetbrains.kotlin.ir.builders.irInt @@ -28,6 +29,7 @@ import org.jetbrains.kotlinx.serialization.compiler.backend.common.findTypeSeria import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext import org.jetbrains.kotlinx.serialization.compiler.resolve.* +@OptIn(DescriptorBasedIr::class) class SerializableCompanionIrGenerator( val irClass: IrClass, override val compilerContext: SerializationPluginContext, diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt index 84a3ba79baf..09a33d385b5 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.codegen.CompilationException import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -29,6 +30,7 @@ import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPlug import org.jetbrains.kotlinx.serialization.compiler.resolve.* import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.MISSING_FIELD_EXC +@OptIn(DescriptorBasedIr::class) class SerializableIrGenerator( val irClass: IrClass, override val compilerContext: SerializationPluginContext, diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt index d8b11a50877..8ca98ff9f16 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlinx.serialization.compiler.backend.ir import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrProperty @@ -27,6 +28,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext import org.jetbrains.kotlinx.serialization.compiler.resolve.* +@OptIn(DescriptorBasedIr::class) class SerializerForEnumsGenerator( irClass: IrClass, compilerContext: SerializationPluginContext, diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt index 678da55896e..2386f6c5667 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder import org.jetbrains.kotlin.backend.common.lower.irIfThen import org.jetbrains.kotlin.backend.common.lower.irThrow import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.DescriptorBasedIr import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrAnonymousInitializerImpl @@ -45,6 +46,7 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.UN // Is creating synthetic origin is a good idea or not? object SERIALIZABLE_PLUGIN_ORIGIN : IrDeclarationOriginImpl("SERIALIZER") +@OptIn(DescriptorBasedIr::class) open class SerializerIrGenerator(val irClass: IrClass, final override val compilerContext: SerializationPluginContext, bindingContext: BindingContext) : SerializerCodegen(irClass.descriptor, bindingContext), IrBuilderExtension {