JVM IR: introduce ClassGeneratorExtension
This is a low-level extension point for Kotlin/JVM, which is supposed to be used instead of ClassBuilderInterceptorExtension. #KT-54758 Fixed #KT-56814 Fixed
This commit is contained in:
@@ -397,7 +397,7 @@ class GenerationState private constructor(
|
||||
?.let { destination -> SignatureDumpingBuilderFactory(it, File(destination)) } ?: it
|
||||
}
|
||||
)
|
||||
.wrapWith(ClassBuilderInterceptorExtension.getInstances(project)) { classBuilderFactory, extension ->
|
||||
.wrapWith(loadClassBuilderInterceptors()) { classBuilderFactory, extension ->
|
||||
extension.interceptClassBuilderFactory(classBuilderFactory, originalFrontendBindingContext, diagnostics)
|
||||
}
|
||||
|
||||
@@ -405,6 +405,16 @@ class GenerationState private constructor(
|
||||
this.factory = ClassFileFactory(this, interceptedBuilderFactory, finalizers)
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private fun loadClassBuilderInterceptors(): List<ClassBuilderInterceptorExtension> {
|
||||
// Using Class.forName here because we're in the old JVM backend, and we need to load extensions declared in the JVM IR backend.
|
||||
val adapted = Class.forName("org.jetbrains.kotlin.backend.jvm.extensions.ClassBuilderExtensionAdapter")
|
||||
.getDeclaredMethod("getExtensions", Project::class.java)
|
||||
.invoke(null, project) as List<ClassBuilderInterceptorExtension>
|
||||
|
||||
return ClassBuilderInterceptorExtension.getInstances(project) + adapted
|
||||
}
|
||||
|
||||
fun beforeCompile() {
|
||||
markUsed()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user