From 4c88ad408f6224db2702f7bc48774cad2354628f Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 15 Sep 2016 16:30:07 +0300 Subject: [PATCH] Make declaration containers mutable. --- .../kotlin/backend/jvm/JvmBackend.kt | 4 +- .../jetbrains/kotlin/backend/jvm/JvmLower.kt | 8 +--- .../backend/jvm/lower/FileClassLowering.kt | 9 ++--- .../psi2ir/generators/ModuleGenerator.kt | 4 +- .../kotlin/ir/declarations/IrClass.kt | 9 ----- .../ir/declarations/IrDeclarationContainer.kt | 10 +---- .../kotlin/ir/declarations/IrFile.kt | 12 +----- .../ir/declarations/impl/IrClassImpl.kt | 17 --------- .../kotlin/ir/declarations/impl/IrFileImpl.kt | 38 +------------------ 9 files changed, 14 insertions(+), 97 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackend.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackend.kt index 6abac3736f5..986ab0ed39c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackend.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackend.kt @@ -26,9 +26,9 @@ class JvmBackend(context: JvmBackendContext) { private val codegen = JvmCodegen(context) fun generateFile(irFile: IrFile) { - val loweredFile = lower.lower(irFile) + lower.lower(irFile) - for (loweredClass in loweredFile.declarations) { + for (loweredClass in irFile.declarations) { if (loweredClass !is IrClass) { throw AssertionError("File-level declaration should be IrClass after JvmLower, got: " + loweredClass.render()) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt index a2746d4a5d0..2e5734cae2a 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt @@ -20,11 +20,7 @@ import org.jetbrains.kotlin.backend.jvm.lower.FileClassLowering import org.jetbrains.kotlin.ir.declarations.IrFile class JvmLower(val context: JvmBackendContext) { - fun lower(irFile: IrFile): IrFile { - var newIrFile = irFile - - newIrFile = FileClassLowering(context).lower(newIrFile) - - return newIrFile + fun lower(irFile: IrFile) { + FileClassLowering(context).lower(irFile) } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt index f8f33507ed4..479d0e82cc9 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import java.util.* class FileClassLowering(val context: JvmBackendContext) { - fun lower(irFile: IrFile): IrFile { + fun lower(irFile: IrFile) { val classes = ArrayList() val fileClassMembers = ArrayList() @@ -36,16 +36,15 @@ class FileClassLowering(val context: JvmBackendContext) { fileClassMembers.add(it) } - if (fileClassMembers.isEmpty()) return irFile + if (fileClassMembers.isEmpty()) return val fileClassDescriptor = context.jvmFileClassProvider.createFileClassDescriptor(irFile.fileEntry, irFile.packageFragmentDescriptor) val irFileClass = IrClassImpl(0, irFile.fileEntry.maxOffset, IrDeclarationOrigin.DEFINED, fileClassDescriptor, fileClassMembers) classes.add(irFileClass) - val newIrFile = irFile.toBuilder().apply { declarations.clear(); declarations.addAll(classes) }.build() - - return newIrFile + irFile.declarations.clear() + irFile.declarations.addAll(classes) } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt index 42ce16910e9..4a631e1ad7c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ModuleGenerator.kt @@ -43,11 +43,11 @@ class ModuleGenerator(override val context: GeneratorContext) : Generator { val irFile = createEmptyIrFile(ktFile) for (ktAnnotationEntry in ktFile.annotationEntries) { - irFile.addAnnotation(getOrFail(BindingContext.ANNOTATION, ktAnnotationEntry)) + irFile.fileAnnotations.add(getOrFail(BindingContext.ANNOTATION, ktAnnotationEntry)) } for (ktDeclaration in ktFile.declarations) { - irFile.addDeclaration(irDeclarationGenerator.generateMemberDeclaration(ktDeclaration)) + irFile.declarations.add(irDeclarationGenerator.generateMemberDeclaration(ktDeclaration)) } return irFile 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 e33d5a0e950..b08a7a80bb9 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 @@ -23,15 +23,6 @@ interface IrClass : IrDeclaration, IrDeclarationContainer { get() = IrDeclarationKind.CLASS override val descriptor: ClassDescriptor - - interface Builder : IrDeclarationContainer.Builder { - val startOffset: Int - val endOffset: Int - var origin: IrDeclarationOrigin - val descriptor: ClassDescriptor - - override fun build(): IrClass - } } fun IrClass.getInstanceInitializerMembers() = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt index da992d1b3b9..45751c19a2a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt @@ -17,13 +17,5 @@ package org.jetbrains.kotlin.ir.declarations interface IrDeclarationContainer { - val declarations: List - - fun toBuilder(): Builder - - interface Builder { - val declarations: MutableList - - fun build(): IrDeclarationContainer - } + val declarations: MutableList } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt index 61fe5bcd0b5..05aebed0915 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt @@ -26,19 +26,9 @@ import org.jetbrains.kotlin.name.FqName interface IrFile : IrElement, IrDeclarationContainer { val fileEntry: SourceManager.FileEntry - val fileAnnotations: List + val fileAnnotations: MutableList val packageFragmentDescriptor: PackageFragmentDescriptor - override fun toBuilder(): Builder - - interface Builder : IrDeclarationContainer.Builder { - val fileEntry: SourceManager.FileEntry - val fileAnnotations: MutableList - val packageFragmentDescriptor: PackageFragmentDescriptor - - override fun build(): IrFile - } - override fun transform(transformer: IrElementTransformer, data: D): IrFile = accept(transformer, data) as IrFile } 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 835ab00d610..0f07ae498f3 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 @@ -48,9 +48,6 @@ class IrClassImpl( declarations.addAll(members) } - override fun toBuilder(): IrDeclarationContainer.Builder = - IrClassBuilderImpl(this) - override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitClass(this, data) @@ -64,17 +61,3 @@ class IrClassImpl( } } } - -class IrClassBuilderImpl( - override var startOffset: Int, - override var endOffset: Int, - override var origin: IrDeclarationOrigin, - override var descriptor: ClassDescriptor, - override val declarations: MutableList -) : IrClass.Builder { - constructor(irClass: IrClass) : this(irClass.startOffset, irClass.endOffset, irClass.origin, irClass.descriptor, - irClass.declarations.toMutableList()) - - override fun build(): IrClass = - IrClassImpl(startOffset, endOffset, origin, descriptor, declarations) -} \ No newline at end of file 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 c1a91169251..f264247ecb4 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 @@ -34,33 +34,14 @@ class IrFileImpl( fileEntry: SourceManager.FileEntry, packageFragmentDescriptor: PackageFragmentDescriptor, fileAnnotations: List, declarations: List ) : this(fileEntry, packageFragmentDescriptor) { - addAllAnnotations(fileAnnotations) - addAll(declarations) + this.fileAnnotations.addAll(fileAnnotations) + this.declarations.addAll(declarations) } override val fileAnnotations: MutableList = SmartList() - fun addAnnotation(annotation: AnnotationDescriptor) { - fileAnnotations.add(annotation) - } - - fun addAllAnnotations(annotations: List) { - fileAnnotations.addAll(annotations) - } - override val declarations: MutableList = ArrayList() - fun addDeclaration(declaration: IrDeclaration) { - declarations.add(declaration) - } - - fun addAll(newDeclarations: List) { - declarations.addAll(newDeclarations) - } - - override fun toBuilder(): IrFile.Builder = - IrFileBuilderImpl(this) - override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitFile(this, data) @@ -74,18 +55,3 @@ class IrFileImpl( } } } - -class IrFileBuilderImpl( - override val fileEntry: SourceManager.FileEntry, - override val packageFragmentDescriptor: PackageFragmentDescriptor, - override val fileAnnotations: MutableList, - override val declarations: MutableList -) : IrFile.Builder { - constructor(irFile: IrFile) : this(irFile.fileEntry, - irFile.packageFragmentDescriptor, - irFile.fileAnnotations.toMutableList(), - irFile.declarations.toMutableList()) - - override fun build(): IrFile = - IrFileImpl(fileEntry, packageFragmentDescriptor, fileAnnotations, declarations) -} \ No newline at end of file