IR: add IrFactory to IrDeclaration, use in deep copy
This commit is contained in:
@@ -25,6 +25,9 @@ abstract class AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSym
|
||||
val fir: F,
|
||||
open val symbol: Fir2IrBindableSymbol<*, D>
|
||||
) : IrElementBase(startOffset, endOffset), IrDeclaration, IrDeclarationParent, Fir2IrComponents by components {
|
||||
override val factory: IrFactory
|
||||
get() = components.irFactory
|
||||
|
||||
internal fun prepareTypeParameters() {
|
||||
typeParameters = fir.typeParameters.mapIndexedNotNull { index, typeParameter ->
|
||||
if (typeParameter !is FirTypeParameter) return@mapIndexedNotNull null
|
||||
|
||||
@@ -42,6 +42,8 @@ interface IrDeclaration : IrStatement, IrMutableAnnotationContainer {
|
||||
|
||||
var parent: IrDeclarationParent
|
||||
|
||||
val factory: IrFactory
|
||||
|
||||
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrStatement =
|
||||
accept(transformer, data) as IrStatement
|
||||
}
|
||||
|
||||
@@ -32,6 +32,9 @@ abstract class IrDeclarationBase<T : DeclarationCarrier>(
|
||||
IrDeclaration,
|
||||
DeclarationCarrier {
|
||||
|
||||
override val factory: IrFactory
|
||||
get() = IrFactoryImpl
|
||||
|
||||
override var parentField: IrDeclarationParent? = null
|
||||
|
||||
// TODO reduce boilerplate
|
||||
|
||||
@@ -46,6 +46,9 @@ class IrScriptImpl(
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
override val descriptor: ScriptDescriptor = symbol.descriptor
|
||||
|
||||
override val factory: IrFactory
|
||||
get() = error("Create IrScriptImpl directly")
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
@@ -60,6 +61,9 @@ class IrVariableImpl(
|
||||
|
||||
override var initializer: IrExpression? = null
|
||||
|
||||
override val factory: IrFactory
|
||||
get() = error("Create IrVariableImpl directly")
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitVariable(this, data)
|
||||
|
||||
|
||||
+3
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.ir.IrElementBase
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||
@@ -26,11 +25,13 @@ abstract class IrLazyDeclarationBase(
|
||||
private val stubGenerator: DeclarationStubGenerator,
|
||||
protected val typeTranslator: TypeTranslator
|
||||
) : IrElementBase(startOffset, endOffset), IrDeclaration {
|
||||
override val factory: IrFactory
|
||||
get() = stubGenerator.symbolTable.irFactory
|
||||
|
||||
protected fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
||||
|
||||
protected fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
|
||||
IrValueParameterImpl(
|
||||
factory.createValueParameter(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
|
||||
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false
|
||||
)
|
||||
|
||||
@@ -125,7 +125,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitClass(declaration: IrClass): IrClass =
|
||||
IrClassImpl(
|
||||
declaration.factory.createClass(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredClass(declaration.symbol),
|
||||
@@ -151,7 +151,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}.copyAttributes(declaration)
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
||||
IrFunctionImpl(
|
||||
declaration.factory.createFunction(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredFunction(declaration.symbol),
|
||||
@@ -176,7 +176,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitConstructor(declaration: IrConstructor): IrConstructor =
|
||||
IrConstructorImpl(
|
||||
declaration.factory.createConstructor(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredConstructor(declaration.symbol),
|
||||
@@ -209,7 +209,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitProperty(declaration: IrProperty): IrProperty =
|
||||
IrPropertyImpl(
|
||||
declaration.factory.createProperty(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredProperty(declaration.symbol),
|
||||
@@ -236,7 +236,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitField(declaration: IrField): IrField =
|
||||
IrFieldImpl(
|
||||
declaration.factory.createField(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredField(declaration.symbol),
|
||||
@@ -252,7 +252,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty): IrLocalDelegatedProperty =
|
||||
IrLocalDelegatedPropertyImpl(
|
||||
declaration.factory.createLocalDelegatedProperty(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredLocalDelegatedProperty(declaration.symbol),
|
||||
@@ -267,7 +267,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitEnumEntry(declaration: IrEnumEntry): IrEnumEntry =
|
||||
IrEnumEntryImpl(
|
||||
declaration.factory.createEnumEntry(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredEnumEntry(declaration.symbol),
|
||||
@@ -279,7 +279,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer): IrAnonymousInitializer =
|
||||
IrAnonymousInitializerImpl(
|
||||
declaration.factory.createAnonymousInitializer(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
IrAnonymousInitializerSymbolImpl(declaration.descriptor)
|
||||
@@ -309,7 +309,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
private fun copyTypeParameter(declaration: IrTypeParameter): IrTypeParameter =
|
||||
IrTypeParameterImpl(
|
||||
declaration.factory.createTypeParameter(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredTypeParameter(declaration.symbol),
|
||||
@@ -336,7 +336,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
|
||||
IrValueParameterImpl(
|
||||
declaration.factory.createValueParameter(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
|
||||
@@ -352,7 +352,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
}
|
||||
|
||||
override fun visitTypeAlias(declaration: IrTypeAlias): IrTypeAlias =
|
||||
IrTypeAliasImpl(
|
||||
declaration.factory.createTypeAlias(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
symbolRemapper.getDeclaredTypeAlias(declaration.symbol),
|
||||
symbolRenamer.getTypeAliasName(declaration.symbol),
|
||||
@@ -768,7 +768,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
).copyAttributes(expression)
|
||||
|
||||
override fun visitErrorDeclaration(declaration: IrErrorDeclaration): IrErrorDeclaration =
|
||||
IrErrorDeclarationImpl(declaration.startOffset, declaration.endOffset, declaration.descriptor)
|
||||
declaration.factory.createErrorDeclaration(declaration.startOffset, declaration.endOffset, declaration.descriptor)
|
||||
|
||||
override fun visitErrorExpression(expression: IrErrorExpression): IrErrorExpression =
|
||||
IrErrorExpressionImpl(
|
||||
|
||||
+7
-4
@@ -1,11 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.common.overrides
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverrideFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
|
||||
class FakeOverrideCopier(
|
||||
@@ -47,7 +50,7 @@ class FakeOverrideCopier(
|
||||
}
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
||||
IrFakeOverrideFunctionImpl(
|
||||
declaration.factory.createFakeOverrideFunction(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
symbolRenamer.getFunctionName(declaration.symbol),
|
||||
@@ -67,7 +70,7 @@ class FakeOverrideCopier(
|
||||
|
||||
|
||||
override fun visitProperty(declaration: IrProperty): IrProperty =
|
||||
IrFakeOverridePropertyImpl(
|
||||
declaration.factory.createFakeOverrideProperty(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
declaration.name,
|
||||
|
||||
-1
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.backend.common.overrides
|
||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
||||
|
||||
-1
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
|
||||
Reference in New Issue
Block a user