From ecfb0457904fee604bc2f102bcc9bd82ea61a9b7 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 10 Nov 2017 21:12:08 +0900 Subject: [PATCH] Android Extensions: Do not generate synthetic components in Kotlin Bytecode tool window when the Gradle plugin is disabled --- .../AbstractAndroidExtensionsExpressionCodegenExtension.kt | 4 +++- .../CliAndroidExtensionsExpressionCodegenExtension.kt | 1 + .../kotlin/android/synthetic/idea/ExperimentalUtils.kt | 6 ++++++ .../idea/IDEAndroidExtensionsExpressionCodegenExtension.kt | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AbstractAndroidExtensionsExpressionCodegenExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AbstractAndroidExtensionsExpressionCodegenExtension.kt index 8505a4844d8..80848a00418 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AbstractAndroidExtensionsExpressionCodegenExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AbstractAndroidExtensionsExpressionCodegenExtension.kt @@ -34,7 +34,6 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin @@ -64,6 +63,7 @@ abstract class AbstractAndroidExtensionsExpressionCodegenExtension : ExpressionC val classOrObject: KtClassOrObject, val containerOptions: ContainerOptionsProxy) + protected abstract fun isEnabled(element: KtElement?): Boolean protected abstract fun isExperimental(element: KtElement?): Boolean protected abstract fun getGlobalCacheImpl(element: KtElement?): CacheImplementation @@ -153,6 +153,8 @@ abstract class AbstractAndroidExtensionsExpressionCodegenExtension : ExpressionC val classBuilder = codegen.v val targetClass = codegen.myClass as? KtClass ?: return + if (!isEnabled(targetClass)) return + val container = codegen.descriptor if (container.kind != ClassKind.CLASS && container.kind != ClassKind.OBJECT) return diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/CliAndroidExtensionsExpressionCodegenExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/CliAndroidExtensionsExpressionCodegenExtension.kt index 8e76513b2f9..e121c86e798 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/CliAndroidExtensionsExpressionCodegenExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/CliAndroidExtensionsExpressionCodegenExtension.kt @@ -24,5 +24,6 @@ class CliAndroidExtensionsExpressionCodegenExtension( private val globalCacheImpl: CacheImplementation ) : AbstractAndroidExtensionsExpressionCodegenExtension() { override fun isExperimental(element: KtElement?) = isExperimental + override fun isEnabled(element: KtElement?) = true override fun getGlobalCacheImpl(element: KtElement?) = globalCacheImpl } \ No newline at end of file diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt index df0f8e25146..ab9492e1c73 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt @@ -52,6 +52,12 @@ private fun isTestMode(module: Module): Boolean { internal val Module.androidExtensionsIsEnabled: Boolean get() = isTestMode(this) || getOptionValueInFacet(ENABLED_OPTION) == "true" +internal val ModuleInfo.androidExtensionsIsEnabled: Boolean + get() { + val module = (this as? ModuleSourceInfo)?.module ?: return false + return module.androidExtensionsIsEnabled + } + internal val ModuleInfo.androidExtensionsIsExperimental: Boolean get() { val module = (this as? ModuleSourceInfo)?.module ?: return false diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/IDEAndroidExtensionsExpressionCodegenExtension.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/IDEAndroidExtensionsExpressionCodegenExtension.kt index 5dd3e57bf1a..3270565f65c 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/IDEAndroidExtensionsExpressionCodegenExtension.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/IDEAndroidExtensionsExpressionCodegenExtension.kt @@ -25,6 +25,9 @@ class IDEAndroidExtensionsExpressionCodegenExtension : AbstractAndroidExtensions override fun isExperimental(element: KtElement?) = element?.getModuleInfo()?.androidExtensionsIsExperimental ?: false + override fun isEnabled(element: KtElement?) = + element?.getModuleInfo()?.androidExtensionsIsEnabled ?: false + override fun getGlobalCacheImpl(element: KtElement?) = element?.getModuleInfo()?.androidExtensionsGlobalCacheImpl ?: CacheImplementation.DEFAULT } \ No newline at end of file