From e8c3c70369155bab993c592b66a3e915a777d7cf Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 7 Jul 2020 22:13:51 +0200 Subject: [PATCH] IR: make IrDeclarationWithVisibility.visibility mutable It was mutable anyway in many subclasses. This is needed in order to avoid depending on concrete IR implementations in the JVM IR backend where it's necessary to be able to change visibility. --- .../fir/lazy/Fir2IrLazySimpleFunction.kt | 5 ++++- .../backend/jvm/lower/ToArrayLowering.kt | 3 +-- .../kotlin/ir/declarations/IrClass.kt | 20 ++++--------------- .../kotlin/ir/declarations/IrConstructor.kt | 5 ----- .../kotlin/ir/declarations/IrDeclaration.kt | 2 +- .../ir/declarations/impl/IrFieldImpl.kt | 2 +- .../ir/declarations/impl/IrPropertyImpl.kt | 4 ++-- .../ir/declarations/impl/IrTypeAliasImpl.kt | 2 +- .../ir/declarations/lazy/IrLazyField.kt | 2 +- .../ir/declarations/lazy/IrLazyProperty.kt | 2 +- .../ir/declarations/lazy/IrLazyTypeAlias.kt | 2 +- 11 files changed, 17 insertions(+), 32 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt index 90e7a44b2c9..6bfdd4fc1e2 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt @@ -72,8 +72,11 @@ class Fir2IrLazySimpleFunction( override val name: Name get() = fir.name - override val visibility: Visibility + override var visibility: Visibility get() = fir.visibility + set(_) { + error("Mutating Fir2Ir lazy elements is not possible") + } override val modality: Modality get() = fir.modality!! diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ToArrayLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ToArrayLowering.kt index 348ad0f5424..0c1f34e5b3c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ToArrayLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ToArrayLowering.kt @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.ir.builders.irReturn import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.defaultType @@ -97,7 +96,7 @@ private class ToArrayLowering(private val context: JvmBackendContext) : ClassLow } private fun IrClass.findOrCreate(indirectSubclass: Boolean, matcher: (IrSimpleFunction) -> Boolean, fallback: () -> IrSimpleFunction) { - val existing = functions.find(matcher) as? IrFunctionImpl + val existing = functions.find(matcher) if (existing != null) { // This is an explicit override of a method defined in `kotlin.collections.AbstractCollection` // or `java.util.Collection`. From here on, the frontend will check the existence of implementations; 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 e77404781ef..11f0b8bff56 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,7 +16,10 @@ package org.jetbrains.kotlin.ir.declarations -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -28,8 +31,6 @@ interface IrClass : @ObsoleteDescriptorBasedAPI override val descriptor: ClassDescriptor - override var visibility: Visibility - val kind: ClassKind var modality: Modality val isCompanion: Boolean @@ -54,16 +55,3 @@ fun IrClass.addMember(member: IrDeclaration) { fun IrClass.addAll(members: List) { declarations.addAll(members) } - -fun IrClass.getInstanceInitializerMembers() = - declarations.filter { - when (it) { - is IrAnonymousInitializer -> - true - is IrProperty -> - it.backingField?.initializer != null - is IrField -> - it.initializer != null - else -> false - } - } 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 16df356e0f9..a5c93c63f69 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 @@ -17,17 +17,12 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor -import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol - interface IrConstructor : IrFunction, IrSymbolDeclaration { @ObsoleteDescriptorBasedAPI override val descriptor: ClassConstructorDescriptor - override var visibility: Visibility - val isPrimary: Boolean } - diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index 25b13304e93..9c13df2d4a4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -55,7 +55,7 @@ interface IrOverridableDeclaration : IrDeclaration { } interface IrDeclarationWithVisibility : IrDeclaration { - val visibility: Visibility + var visibility: Visibility } interface IrDeclarationWithName : IrDeclaration { 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 49edc85ef76..dc9c1f4b20a 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 @@ -38,7 +38,7 @@ class IrFieldImpl( override val symbol: IrFieldSymbol, override val name: Name, override val type: IrType, - override val visibility: Visibility, + override var visibility: Visibility, override val isFinal: Boolean, override val isExternal: Boolean, override val isStatic: Boolean 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 3b8e6808b58..f5a83c2139e 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 @@ -33,7 +33,7 @@ abstract class IrPropertyCommonImpl( endOffset: Int, origin: IrDeclarationOrigin, override val name: Name, - override val visibility: Visibility, + override var visibility: Visibility, override val modality: Modality, override val isVar: Boolean, override val isConst: Boolean, @@ -113,7 +113,7 @@ class IrPropertyImpl( origin: IrDeclarationOrigin, override val symbol: IrPropertySymbol, override val name: Name, - override val visibility: Visibility, + override var visibility: Visibility, override val modality: Modality, override val isVar: Boolean, override val isConst: Boolean, 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 36e0ae22d07..87ddd368656 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 @@ -24,7 +24,7 @@ class IrTypeAliasImpl( endOffset: Int, override val symbol: IrTypeAliasSymbol, override val name: Name, - override val visibility: Visibility, + override var visibility: Visibility, override val expandedType: IrType, override val isActual: Boolean, origin: IrDeclarationOrigin 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 4d49e1744b6..bb0403d5c31 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 @@ -32,7 +32,7 @@ class IrLazyField( override val symbol: IrFieldSymbol, override val descriptor: PropertyDescriptor, override val name: Name, - override val visibility: Visibility, + override var visibility: Visibility, override val isFinal: Boolean, override val isExternal: Boolean, override val isStatic: Boolean, 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 a95d303427d..286534c46c2 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 @@ -27,7 +27,7 @@ class IrLazyProperty( override val symbol: IrPropertySymbol, override val descriptor: PropertyDescriptor, override val name: Name, - override val visibility: Visibility, + override var visibility: Visibility, override val modality: Modality, override val isVar: Boolean, override val isConst: Boolean, 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 b9b10f4935d..89d5aee9d7c 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 @@ -29,7 +29,7 @@ class IrLazyTypeAlias( override val symbol: IrTypeAliasSymbol, override val descriptor: TypeAliasDescriptor, override val name: Name, - override val visibility: Visibility, + override var visibility: Visibility, override val isActual: Boolean, stubGenerator: DeclarationStubGenerator, typeTranslator: TypeTranslator