From 4f380e876c4e58bd0b572f7f402ca5add823bdc2 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 6 Mar 2023 16:49:36 +0100 Subject: [PATCH] Deprecate ClassBuilderInterceptorExtension ClassGeneratorExtension is supposed to be used instead. --- .../extensions/ClassBuilderInterceptorExtension.kt | 10 +++++++++- .../kotlin/codegen/state/GenerationState.kt | 9 ++++----- .../kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt | 4 ++-- .../jvm/extensions/ClassBuilderExtensionAdapter.kt | 8 +++++--- ...rcelableClinitClassBuilderInterceptorExtension.kt | 7 +++++-- .../android/synthetic/AndroidComponentRegistrar.kt | 12 ++++++++---- ...droidOnDestroyClassBuilderInterceptorExtension.kt | 4 ++-- .../android/synthetic/test/CompilerTestUtils.kt | 3 +-- 8 files changed, 36 insertions(+), 21 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/extensions/ClassBuilderInterceptorExtension.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/extensions/ClassBuilderInterceptorExtension.kt index 9c103571c2b..e74dde66106 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/extensions/ClassBuilderInterceptorExtension.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/extensions/ClassBuilderInterceptorExtension.kt @@ -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( "org.jetbrains.kotlin.classBuilderFactoryInterceptorExtension", ClassBuilderInterceptorExtension::class.java) @@ -31,4 +39,4 @@ interface ClassBuilderInterceptorExtension { diagnostics: DiagnosticSink ): ClassBuilderFactory -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index f3b226c13dd..4863bd754cc 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -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 { + @Suppress("UNCHECKED_CAST", "DEPRECATION_ERROR") + private fun loadClassBuilderInterceptors(): List { // 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 + .invoke(null, project) as List - return ClassBuilderInterceptorExtension.getInstances(project) + adapted + return org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension.getInstances(project) + adapted } fun beforeCompile() { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 246aaa9a39f..43aebfceb4c 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -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) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/extensions/ClassBuilderExtensionAdapter.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/extensions/ClassBuilderExtensionAdapter.kt index 5f4840575c9..b98a1b104fb 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/extensions/ClassBuilderExtensionAdapter.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/extensions/ClassBuilderExtensionAdapter.kt @@ -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 = + @Suppress("DEPRECATION_ERROR") + fun getExtensions(project: Project): List = 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, diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableClinitClassBuilderInterceptorExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableClinitClassBuilderInterceptorExtension.kt index 72fb7fc1c06..d762ff22463 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableClinitClassBuilderInterceptorExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableClinitClassBuilderInterceptorExtension.kt @@ -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, diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt index ab9003ddcfe..ffff23122e2 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt @@ -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)) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidOnDestroyClassBuilderInterceptorExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidOnDestroyClassBuilderInterceptorExtension.kt index 83f09f54a79..3258a4608e9 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidOnDestroyClassBuilderInterceptorExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidOnDestroyClassBuilderInterceptorExtension.kt @@ -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, diff --git a/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/synthetic/test/CompilerTestUtils.kt b/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/synthetic/test/CompilerTestUtils.kt index ad114886b1d..eb688c1d43a 100755 --- a/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/synthetic/test/CompilerTestUtils.kt +++ b/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/synthetic/test/CompilerTestUtils.kt @@ -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))