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
|
package org.jetbrains.kotlin.jvm.abi
|
||||||
|
|
||||||
import com.intellij.mock.MockProject
|
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.ClassBuilderInterceptorExtension
|
||||||
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
|
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
|
||||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
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.
|
// Use the single-pass implementation, using the new ABI flag in the metadata.
|
||||||
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
||||||
val builderExtension = JvmAbiClassBuilderInterceptor()
|
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)
|
ClassBuilderInterceptorExtension.registerExtension(project, builderExtension)
|
||||||
ClassFileFactoryFinalizerExtension.registerExtension(project, outputExtension)
|
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.kotlin.load.java.JvmAnnotationNames
|
||||||
import org.jetbrains.org.objectweb.asm.*
|
import org.jetbrains.org.objectweb.asm.*
|
||||||
import org.jetbrains.org.objectweb.asm.commons.Method
|
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
|
import java.io.File
|
||||||
|
|
||||||
class JvmAbiOutputExtension(
|
class JvmAbiOutputExtension(
|
||||||
private val outputPath: File,
|
private val outputPath: File,
|
||||||
private val abiClassInfos: Map<String, AbiClassInfo>,
|
private val abiClassInfos: Map<String, AbiClassInfo>,
|
||||||
|
private val messageCollector: MessageCollector,
|
||||||
) : ClassFileFactoryFinalizerExtension {
|
) : ClassFileFactoryFinalizerExtension {
|
||||||
override fun finalizeClassFactory(factory: ClassFileFactory) {
|
override fun finalizeClassFactory(factory: ClassFileFactory) {
|
||||||
// We need to wait until the end to produce any output in order to strip classes
|
// 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)
|
val outputFiles = AbiOutputFiles(abiClassInfos, factory)
|
||||||
if (outputPath.extension == "jar") {
|
if (outputPath.extension == "jar") {
|
||||||
// We don't include the runtime or main class in interface jars and always reset time stamps.
|
// 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 {
|
} else {
|
||||||
outputFiles.writeAllTo(outputPath)
|
outputFiles.writeAllTo(outputPath)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user