jvm-abi-gen: Use the configured MessageCollector to write ABI jars
This commit is contained in:
committed by
Alexander Udalov
parent
6d518c8e57
commit
023db4f376
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.jvm.abi
|
||||
|
||||
import com.intellij.mock.MockProject
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
|
||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||
@@ -30,7 +32,8 @@ class JvmAbiComponentRegistrar : ComponentRegistrar {
|
||||
// Use the single-pass implementation, using the new ABI flag in the metadata.
|
||||
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
||||
val builderExtension = JvmAbiClassBuilderInterceptor()
|
||||
val outputExtension = JvmAbiOutputExtension(File(outputPath), builderExtension.abiClassInfo)
|
||||
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
|
||||
val outputExtension = JvmAbiOutputExtension(File(outputPath), builderExtension.abiClassInfo, messageCollector)
|
||||
ClassBuilderInterceptorExtension.registerExtension(project, builderExtension)
|
||||
ClassFileFactoryFinalizerExtension.registerExtension(project, outputExtension)
|
||||
}
|
||||
|
||||
@@ -16,12 +16,15 @@ import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtensio
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
import org.jetbrains.org.objectweb.asm.*
|
||||
import org.jetbrains.org.objectweb.asm.commons.Method
|
||||
import org.jetbrains.org.objectweb.asm.tree.*
|
||||
import org.jetbrains.org.objectweb.asm.tree.AnnotationNode
|
||||
import org.jetbrains.org.objectweb.asm.tree.FieldNode
|
||||
import org.jetbrains.org.objectweb.asm.tree.ParameterNode
|
||||
import java.io.File
|
||||
|
||||
class JvmAbiOutputExtension(
|
||||
private val outputPath: File,
|
||||
private val abiClassInfos: Map<String, AbiClassInfo>,
|
||||
private val messageCollector: MessageCollector,
|
||||
) : ClassFileFactoryFinalizerExtension {
|
||||
override fun finalizeClassFactory(factory: ClassFileFactory) {
|
||||
// We need to wait until the end to produce any output in order to strip classes
|
||||
@@ -29,7 +32,15 @@ class JvmAbiOutputExtension(
|
||||
val outputFiles = AbiOutputFiles(abiClassInfos, factory)
|
||||
if (outputPath.extension == "jar") {
|
||||
// We don't include the runtime or main class in interface jars and always reset time stamps.
|
||||
CompileEnvironmentUtil.writeToJar(outputPath, false, true, true, null, outputFiles, MessageCollector.NONE)
|
||||
CompileEnvironmentUtil.writeToJar(
|
||||
outputPath,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
null,
|
||||
outputFiles,
|
||||
messageCollector
|
||||
)
|
||||
} else {
|
||||
outputFiles.writeAllTo(outputPath)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user