From 33ba9e85c08aea44a423480145a4b66ee01879cf Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 27 May 2015 15:49:44 +0300 Subject: [PATCH] Close kapt writer only once --- .../annotation/AnnotationCollectorExtension.kt | 17 +++++++---------- .../AbstractAnnotationProcessorBoxTest.kt | 1 + 2 files changed, 8 insertions(+), 10 deletions(-) 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 3c34d00b8d2..0fc57f6dfbe 100644 --- a/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/AnnotationCollectorExtension.kt +++ b/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/AnnotationCollectorExtension.kt @@ -46,8 +46,6 @@ public abstract class AnnotationCollectorExtensionBase() : ClassBuilderIntercept protected abstract val annotationFilterList: List? - private val classBuilderFactories = arrayListOf() - private val shortenedAnnotationCache = ShortenedNameCache(RecordTypes.SHORTENED_ANNOTATION) private val shortenedPackageNameCache = ShortenedNameCache(RecordTypes.SHORTENED_PACKAGE_NAME) @@ -56,12 +54,11 @@ public abstract class AnnotationCollectorExtensionBase() : ClassBuilderIntercept bindingContext: BindingContext, diagnostics: DiagnosticSink ): ClassBuilderFactory { - val factory = AnnotationCollectorClassBuilderFactory(interceptedFactory, getWriter(diagnostics), diagnostics) - classBuilderFactories.add(factory) - return factory + return AnnotationCollectorClassBuilderFactory(interceptedFactory, getWriter(diagnostics), diagnostics) } protected abstract fun getWriter(diagnostic: DiagnosticSink): Writer + protected abstract fun closeWriter() private inner class AnnotationCollectorClassBuilderFactory( private val delegateFactory: ClassBuilderFactory, @@ -84,11 +81,7 @@ public abstract class AnnotationCollectorExtensionBase() : ClassBuilderIntercept } override fun close() { - for (factory in classBuilderFactories) { - factory.writer.close() - } - classBuilderFactories.clear() - + closeWriter() delegateFactory.close() } } @@ -232,6 +225,10 @@ public class AnnotationCollectorExtension( private var writerInternal: Writer? = null + override fun closeWriter() { + writerInternal?.close() + } + override fun getWriter(diagnostic: DiagnosticSink): Writer { return writerInternal ?: try { with (File(outputFilename)) { diff --git a/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt index d1e7f4ffbc3..8c6acf8fb14 100644 --- a/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt +++ b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt @@ -67,6 +67,7 @@ public abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() { val stringWriter = StringWriter() override fun getWriter(diagnostic: DiagnosticSink) = stringWriter + override fun closeWriter() {} override val annotationFilterList = listOf() }