From ff84c19eff231ad0fd0e6774573ec1f88c8d63c6 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Wed, 14 Sep 2022 13:41:21 +0200 Subject: [PATCH] Make kotlin-android-extensions always cause a compilation error. kotlin-android-extensions are deprecated and have been scheduled for removal in 1.8.0. https://android-developers.googleblog.com/2022/02/discontinuing-kotlin-synthetics-for-views.html --- .../targets/android/internal/AndroidSubplugin.kt | 4 ++-- .../android-extensions-compiler/build.gradle.kts | 1 + .../android/synthetic/AndroidComponentRegistrar.kt | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt index 32e747c281b..cf8f85752da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt @@ -36,8 +36,8 @@ class AndroidExtensionsSubpluginIndicator @Inject internal constructor(private v registry.register(KotlinAndroidExtensionModelBuilder()) project.plugins.apply(AndroidSubplugin::class.java) - project.logger.warn( - "Warning: The 'kotlin-android-extensions' Gradle plugin is deprecated. " + + project.logger.error( + "Error: The 'kotlin-android-extensions' Gradle plugin is no longer supported. " + "Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start " + "working with View Binding (https://developer.android.com/topic/libraries/view-binding) " + "and the 'kotlin-parcelize' plugin." diff --git a/plugins/android-extensions/android-extensions-compiler/build.gradle.kts b/plugins/android-extensions/android-extensions-compiler/build.gradle.kts index 960d284658a..c91e6143ee2 100644 --- a/plugins/android-extensions/android-extensions-compiler/build.gradle.kts +++ b/plugins/android-extensions/android-extensions-compiler/build.gradle.kts @@ -20,6 +20,7 @@ dependencies { compileOnly(project(":compiler:ir.backend.common")) compileOnly(project(":compiler:backend.jvm")) compileOnly(project(":compiler:ir.tree")) + compileOnly(project(":compiler:cli")) compileOnly(project(":kotlin-android-extensions-runtime")) compileOnly(intellijCore()) compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) 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 9028a6c1a92..ab9003ddcfe 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 @@ -30,6 +30,8 @@ import org.jetbrains.kotlin.android.synthetic.res.AndroidVariant import org.jetbrains.kotlin.android.synthetic.res.CliAndroidLayoutXmlFileManager import org.jetbrains.kotlin.android.synthetic.res.CliAndroidPackageFragmentProviderExtension 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.* @@ -103,6 +105,16 @@ class AndroidCommandLineProcessor : CommandLineProcessor { @Suppress("DEPRECATION") class AndroidComponentRegistrar : ComponentRegistrar { companion object { + fun reportRemovedError(configuration: CompilerConfiguration) { + val errorMessage = + "The Android extensions ('kotlin-android-extensions') compiler plugin is no longer supported. " + + "Please use kotlin parcelize and view binding. " + + "More information: https://goo.gle/kotlin-android-extensions-deprecation" + configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) + ?.report(CompilerMessageSeverity.ERROR, errorMessage, null) + ?: throw IllegalStateException(errorMessage) + } + fun registerParcelExtensions(project: Project) { ExpressionCodegenExtension.registerExtension(project, ParcelableCodegenExtension()) IrGenerationExtension.registerExtension(project, ParcelableIrGeneratorExtension()) @@ -153,6 +165,8 @@ class AndroidComponentRegistrar : ComponentRegistrar { } override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) { + reportRemovedError(configuration) + val features = configuration.get(AndroidConfigurationKeys.FEATURES) ?: AndroidExtensionsFeature.values().toSet() val isExperimental = configuration.get(AndroidConfigurationKeys.EXPERIMENTAL) == "true"