Deprecate ClassBuilderInterceptorExtension

ClassGeneratorExtension is supposed to be used instead.
This commit is contained in:
Alexander Udalov
2023-03-06 16:49:36 +01:00
parent 163a052f98
commit 4f380e876c
8 changed files with 36 additions and 21 deletions
@@ -14,6 +14,8 @@
* limitations under the License.
*/
@file:Suppress("DEPRECATION_ERROR")
package org.jetbrains.kotlin.codegen.extensions
import org.jetbrains.kotlin.codegen.ClassBuilderFactory
@@ -21,6 +23,12 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.resolve.BindingContext
@Deprecated(
"This extension is only supported in K1 and will not work properly in K2. " +
"Please migrate to org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension or " +
"org.jetbrains.kotlin.backend.jvm.extensions.ClassGeneratorExtension.",
level = DeprecationLevel.ERROR
)
interface ClassBuilderInterceptorExtension {
companion object : ProjectExtensionDescriptor<ClassBuilderInterceptorExtension>(
"org.jetbrains.kotlin.classBuilderFactoryInterceptorExtension", ClassBuilderInterceptorExtension::class.java)
@@ -31,4 +39,4 @@ interface ClassBuilderInterceptorExtension {
diagnostics: DiagnosticSink
): ClassBuilderFactory
}
}
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.codegen.*
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
import org.jetbrains.kotlin.codegen.context.CodegenContext
import org.jetbrains.kotlin.codegen.context.RootContext
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
import org.jetbrains.kotlin.codegen.inline.GlobalInlineContext
import org.jetbrains.kotlin.codegen.inline.InlineCache
@@ -405,14 +404,14 @@ class GenerationState private constructor(
this.factory = ClassFileFactory(this, interceptedBuilderFactory, finalizers)
}
@Suppress("UNCHECKED_CAST")
private fun loadClassBuilderInterceptors(): List<ClassBuilderInterceptorExtension> {
@Suppress("UNCHECKED_CAST", "DEPRECATION_ERROR")
private fun loadClassBuilderInterceptors(): List<org.jetbrains.kotlin.codegen.extensions.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>
.invoke(null, project) as List<org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension>
return ClassBuilderInterceptorExtension.getInstances(project) + adapted
return org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.getInstances(project) + adapted
}
fun beforeCompile() {
@@ -67,7 +67,6 @@ import org.jetbrains.kotlin.cli.jvm.index.*
import org.jetbrains.kotlin.cli.jvm.javac.JavacWrapperRegistrar
import org.jetbrains.kotlin.cli.jvm.modules.CliJavaModuleFinder
import org.jetbrains.kotlin.cli.jvm.modules.CliJavaModuleResolver
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
@@ -637,7 +636,8 @@ class KotlinCoreEnvironment private constructor(
ExpressionCodegenExtension.registerExtensionPoint(project)
SyntheticResolveExtension.registerExtensionPoint(project)
SyntheticJavaResolveExtension.registerExtensionPoint(project)
ClassBuilderInterceptorExtension.registerExtensionPoint(project)
@Suppress("DEPRECATION_ERROR")
org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.registerExtensionPoint(project)
ClassGeneratorExtension.registerExtensionPoint(project)
ClassFileFactoryFinalizerExtension.registerExtensionPoint(project)
AnalysisHandlerExtension.registerExtensionPoint(project)
@@ -12,7 +12,6 @@ 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.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
@@ -30,11 +29,14 @@ import org.jetbrains.org.objectweb.asm.RecordComponentVisitor
@Suppress("unused") // Used reflectively in GenerationState.
internal object ClassBuilderExtensionAdapter {
@JvmStatic
fun getExtensions(project: Project): List<ClassBuilderInterceptorExtension> =
@Suppress("DEPRECATION_ERROR")
fun getExtensions(project: Project): List<org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension> =
ClassGeneratorExtension.getInstances(project).map(::ExtensionAdapter)
}
private class ExtensionAdapter(private val extension: ClassGeneratorExtension) : ClassBuilderInterceptorExtension {
@Suppress("DEPRECATION_ERROR")
private class ExtensionAdapter(private val extension: ClassGeneratorExtension) :
org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension {
override fun interceptClassBuilderFactory(
interceptedFactory: ClassBuilderFactory,
bindingContext: BindingContext,
@@ -14,6 +14,9 @@
* limitations under the License.
*/
// Android-extensions is no longer supported, but its code is still used from AS.
@file:Suppress("DEPRECATION_ERROR")
package org.jetbrains.kotlin.android.synthetic.codegen
import com.intellij.psi.PsiElement
@@ -22,7 +25,6 @@ import org.jetbrains.kotlin.codegen.AbstractClassBuilder
import org.jetbrains.kotlin.codegen.ClassBuilder
import org.jetbrains.kotlin.codegen.ClassBuilderFactory
import org.jetbrains.kotlin.codegen.DelegatingClassBuilder
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.resolve.BindingContext
@@ -34,7 +36,8 @@ import org.jetbrains.org.objectweb.asm.RecordComponentVisitor
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
class ParcelableClinitClassBuilderInterceptorExtension : ClassBuilderInterceptorExtension {
class ParcelableClinitClassBuilderInterceptorExtension :
@Suppress("DEPRECATION_ERROR") org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension {
override fun interceptClassBuilderFactory(
interceptedFactory: ClassBuilderFactory,
bindingContext: BindingContext,
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.android.synthetic.res.CliAndroidPackageFragmentProvi
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.compiler.plugin.*
import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -119,7 +118,10 @@ class AndroidComponentRegistrar : ComponentRegistrar {
ExpressionCodegenExtension.registerExtension(project, ParcelableCodegenExtension())
IrGenerationExtension.registerExtension(project, ParcelableIrGeneratorExtension())
SyntheticResolveExtension.registerExtension(project, ParcelableResolveExtension())
ClassBuilderInterceptorExtension.registerExtension(project, ParcelableClinitClassBuilderInterceptorExtension())
@Suppress("DEPRECATION_ERROR")
org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.registerExtension(
project, ParcelableClinitClassBuilderInterceptorExtension()
)
StorageComponentContainerContributor.registerExtension(project, ParcelizeDeclarationCheckerComponentContainerContributor())
}
@@ -150,8 +152,10 @@ class AndroidComponentRegistrar : ComponentRegistrar {
StorageComponentContainerContributor.registerExtension(project,
AndroidExtensionPropertiesComponentContainerContributor())
ClassBuilderInterceptorExtension.registerExtension(project,
CliAndroidOnDestroyClassBuilderInterceptorExtension(globalCacheImpl))
@Suppress("DEPRECATION_ERROR")
org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.registerExtension(
project, CliAndroidOnDestroyClassBuilderInterceptorExtension(globalCacheImpl)
)
PackageFragmentProviderExtension.registerExtension(project,
CliAndroidPackageFragmentProviderExtension(isExperimental))
@@ -25,7 +25,6 @@ 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.descriptors.ClassDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.psi.KtElement
@@ -34,7 +33,8 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.org.objectweb.asm.MethodVisitor
import org.jetbrains.org.objectweb.asm.Opcodes
abstract class AbstractAndroidOnDestroyClassBuilderInterceptorExtension : ClassBuilderInterceptorExtension {
abstract class AbstractAndroidOnDestroyClassBuilderInterceptorExtension :
@Suppress("DEPRECATION_ERROR") org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension {
override fun interceptClassBuilderFactory(
interceptedFactory: ClassBuilderFactory,
bindingContext: BindingContext,
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
@@ -42,7 +41,7 @@ fun KtUsefulTestCase.createTestEnvironment(configuration: CompilerConfiguration,
ExpressionCodegenExtension.registerExtension(project, CliAndroidExtensionsExpressionCodegenExtension(true, CacheImplementation.DEFAULT))
IrGenerationExtension.registerExtension(project, CliAndroidIrExtension(true, CacheImplementation.DEFAULT))
StorageComponentContainerContributor.registerExtension(project, AndroidExtensionPropertiesComponentContainerContributor())
ClassBuilderInterceptorExtension.registerExtension(
@Suppress("DEPRECATION_ERROR") org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.registerExtension(
project, CliAndroidOnDestroyClassBuilderInterceptorExtension(CacheImplementation.DEFAULT)
)
PackageFragmentProviderExtension.registerExtension(project, CliAndroidPackageFragmentProviderExtension(true))