DelegationClassBuilderFactory class extraction

This commit is contained in:
Michael Bogdanov
2015-07-01 15:57:30 +03:00
parent 35d51a8ea4
commit 17d9b93790
5 changed files with 57 additions and 71 deletions
@@ -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
@@ -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())
}
}
@@ -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
@@ -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);
}
}
@@ -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()
}
}