diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassNameCollectionClassBuilderFactory.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassNameCollectionClassBuilderFactory.kt index a2f9e72c3b3..6a51dfade95 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassNameCollectionClassBuilderFactory.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassNameCollectionClassBuilderFactory.kt @@ -26,9 +26,8 @@ import org.jetbrains.org.objectweb.asm.FieldVisitor import org.jetbrains.org.objectweb.asm.MethodVisitor public abstract class ClassNameCollectionClassBuilderFactory( - private val delegate: ClassBuilderFactory - -) : ClassBuilderFactory by delegate { + delegate: ClassBuilderFactory +) : DelegatingClassBuilderFactory(delegate) { protected abstract fun handleClashingNames(internalName: String, origin: JvmDeclarationOrigin) @@ -36,18 +35,6 @@ public abstract class ClassNameCollectionClassBuilderFactory( return ClassNameCollectionClassBuilder(origin, delegate.newClassBuilder(origin)) } - public override fun asBytes(builder: ClassBuilder?): ByteArray? { - return delegate.asBytes((builder as ClassNameCollectionClassBuilder)._delegate) - } - - public override fun asText(builder: ClassBuilder?): String? { - return delegate.asText((builder as ClassNameCollectionClassBuilder)._delegate) - } - - public override fun close() { - delegate.close() - } - private inner class ClassNameCollectionClassBuilder( private val classCreatedFor: JvmDeclarationOrigin, internal val _delegate: ClassBuilder diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/DelegatingClassBuilderFactory.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/DelegatingClassBuilderFactory.kt new file mode 100644 index 00000000000..24318e5a9b3 --- /dev/null +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/DelegatingClassBuilderFactory.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2015 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.codegen + +import com.intellij.psi.PsiElement +import com.intellij.util.containers.MultiMap +import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData +import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin +import org.jetbrains.kotlin.resolve.jvm.diagnostics.MemberKind +import org.jetbrains.kotlin.resolve.jvm.diagnostics.RawSignature +import org.jetbrains.org.objectweb.asm.FieldVisitor +import org.jetbrains.org.objectweb.asm.MethodVisitor + +public abstract class DelegatingClassBuilderFactory( + protected val delegate: ClassBuilderFactory + +) : ClassBuilderFactory by delegate { + + abstract override fun newClassBuilder(origin: JvmDeclarationOrigin): DelegatingClassBuilder + + public override fun asBytes(builder: ClassBuilder?): ByteArray? { + return delegate.asBytes((builder as DelegatingClassBuilder).getDelegate()) + } + + public override fun asText(builder: ClassBuilder?): String? { + return delegate.asText((builder as DelegatingClassBuilder).getDelegate()) + } +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SignatureCollectingClassBuilderFactory.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/SignatureCollectingClassBuilderFactory.kt index b7264bdd071..a8174c54e91 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SignatureCollectingClassBuilderFactory.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SignatureCollectingClassBuilderFactory.kt @@ -26,9 +26,8 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin import org.jetbrains.kotlin.resolve.jvm.diagnostics.RawSignature public abstract class SignatureCollectingClassBuilderFactory( - private val delegate: ClassBuilderFactory - -) : ClassBuilderFactory by delegate { + delegate: ClassBuilderFactory +) : DelegatingClassBuilderFactory(delegate) { protected abstract fun handleClashingSignatures(data: ConflictingJvmDeclarationsData) protected abstract fun onClassDone(classOrigin: JvmDeclarationOrigin, @@ -39,18 +38,6 @@ public abstract class SignatureCollectingClassBuilderFactory( return SignatureCollectingClassBuilder(origin, delegate.newClassBuilder(origin)) } - public override fun asBytes(builder: ClassBuilder?): ByteArray? { - return delegate.asBytes((builder as SignatureCollectingClassBuilder)._delegate) - } - - public override fun asText(builder: ClassBuilder?): String? { - return delegate.asText((builder as SignatureCollectingClassBuilder)._delegate) - } - - public override fun close() { - delegate.close() - } - private inner class SignatureCollectingClassBuilder( private val classCreatedFor: JvmDeclarationOrigin, internal val _delegate: ClassBuilder diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationClassBuilderFactory.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationClassBuilderFactory.java index 9819fa9650f..3a8223e869e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationClassBuilderFactory.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationClassBuilderFactory.java @@ -20,41 +20,20 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.codegen.ClassBuilder; import org.jetbrains.kotlin.codegen.ClassBuilderFactory; import org.jetbrains.kotlin.codegen.ClassBuilderMode; +import org.jetbrains.kotlin.codegen.DelegatingClassBuilderFactory; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin; -public class OptimizationClassBuilderFactory implements ClassBuilderFactory { - private final ClassBuilderFactory delegate; +public class OptimizationClassBuilderFactory extends DelegatingClassBuilderFactory { private final boolean disableOptimization; public OptimizationClassBuilderFactory(ClassBuilderFactory delegate, boolean disableOptimization) { - this.delegate = delegate; + super(delegate); this.disableOptimization = disableOptimization; } @NotNull @Override - public ClassBuilderMode getClassBuilderMode() { - return delegate.getClassBuilderMode(); - } - - @NotNull - @Override - public ClassBuilder newClassBuilder(@NotNull JvmDeclarationOrigin origin) { - return new OptimizationClassBuilder(delegate.newClassBuilder(origin), disableOptimization); - } - - @Override - public String asText(ClassBuilder builder) { - return delegate.asText(((OptimizationClassBuilder) builder).getDelegate()); - } - - @Override - public byte[] asBytes(ClassBuilder builder) { - return delegate.asBytes(((OptimizationClassBuilder) builder).getDelegate()); - } - - @Override - public void close() { - delegate.close(); + public OptimizationClassBuilder newClassBuilder(@NotNull JvmDeclarationOrigin origin) { + return new OptimizationClassBuilder(getDelegate().newClassBuilder(origin), disableOptimization); } } diff --git a/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/AnnotationCollectorExtension.kt b/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/AnnotationCollectorExtension.kt index b49e063f65b..7f4235f4f6a 100644 --- a/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/AnnotationCollectorExtension.kt +++ b/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/AnnotationCollectorExtension.kt @@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.codegen.ClassBuilder import org.jetbrains.kotlin.codegen.ClassBuilderFactory import org.jetbrains.kotlin.codegen.DelegatingClassBuilder +import org.jetbrains.kotlin.codegen.DelegatingClassBuilderFactory import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.resolve.BindingContext @@ -63,28 +64,18 @@ public abstract class AnnotationCollectorExtensionBase(val supportInheritedAnnot protected abstract fun closeWriter() private inner class AnnotationCollectorClassBuilderFactory( - private val delegateFactory: ClassBuilderFactory, + delegateFactory: ClassBuilderFactory, val writer: Writer, val diagnostics: DiagnosticSink - ) : ClassBuilderFactory { + ) : DelegatingClassBuilderFactory(delegateFactory) { - override fun newClassBuilder(origin: JvmDeclarationOrigin): ClassBuilder { - return AnnotationCollectorClassBuilder(delegateFactory.newClassBuilder(origin), writer, diagnostics) - } - - override fun getClassBuilderMode() = delegateFactory.getClassBuilderMode() - - override fun asText(builder: ClassBuilder?): String? { - return delegateFactory.asText((builder as AnnotationCollectorClassBuilder).delegateClassBuilder) - } - - override fun asBytes(builder: ClassBuilder?): ByteArray? { - return delegateFactory.asBytes((builder as AnnotationCollectorClassBuilder).delegateClassBuilder) + override fun newClassBuilder(origin: JvmDeclarationOrigin): DelegatingClassBuilder { + return AnnotationCollectorClassBuilder(delegate.newClassBuilder(origin), writer, diagnostics) } override fun close() { closeWriter() - delegateFactory.close() + delegate.close() } }