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 9aed71e2a85..3377ea64f32 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 @@ -16,23 +16,35 @@ package org.jetbrains.kotlin.android.synthetic.idea +import com.intellij.openapi.module.Module import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ANDROID_COMPILER_PLUGIN_ID import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.EXPERIMENTAL_OPTION +import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ENABLED_OPTION +import org.jetbrains.kotlin.compiler.plugin.CliOption import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo import org.jetbrains.kotlin.idea.facet.KotlinFacet -private val ANNOTATION_OPTION_PREFIX = "plugin:$ANDROID_COMPILER_PLUGIN_ID:${EXPERIMENTAL_OPTION.name}=" +private val ANNOTATION_OPTION_PREFIX = "plugin:$ANDROID_COMPILER_PLUGIN_ID:" + +private fun Module.isOptionEnabledInFacet(option: CliOption): Boolean { + val kotlinFacet = KotlinFacet.get(this) ?: return false + val commonArgs = kotlinFacet.configuration.settings.compilerArguments ?: return false + + val prefix = ANNOTATION_OPTION_PREFIX + option.name + "=" + + val optionValue = commonArgs.pluginOptions + ?.firstOrNull { it.startsWith(prefix) } + ?.substring(prefix.length) + + return optionValue == "true" +} + +internal val Module.androidExtensionsIsEnabled: Boolean + get() = isOptionEnabledInFacet(ENABLED_OPTION) internal val ModuleInfo.androidExtensionsIsExperimental: Boolean get() { val module = (this as? ModuleSourceInfo)?.module ?: return false - val kotlinFacet = KotlinFacet.get(module) ?: return false - val commonArgs = kotlinFacet.configuration.settings.compilerArguments ?: return false - - val isExperimentalString = commonArgs.pluginOptions - ?.firstOrNull { it.startsWith(ANNOTATION_OPTION_PREFIX) } - ?.substring(ANNOTATION_OPTION_PREFIX.length) - - return isExperimentalString == "true" + return module.isOptionEnabledInFacet(EXPERIMENTAL_OPTION) } \ No newline at end of file diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidPackageFragmentProviderExtension.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidPackageFragmentProviderExtension.kt index 56a5e54f50e..d5f773f104b 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidPackageFragmentProviderExtension.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidPackageFragmentProviderExtension.kt @@ -16,8 +16,6 @@ package org.jetbrains.kotlin.android.synthetic.idea.res -import com.android.tools.idea.gradle.facet.AndroidGradleFacet -import com.android.tools.idea.gradle.parser.GradleBuildFile import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleServiceManager @@ -25,19 +23,13 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiManager import org.jetbrains.android.facet.AndroidFacet import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ANDROID_COMPILER_PLUGIN_ID -import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.EXPERIMENTAL_OPTION +import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsEnabled import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsExperimental -import org.jetbrains.kotlin.android.synthetic.idea.isExperimental import org.jetbrains.kotlin.android.synthetic.res.AndroidLayoutXmlFileManager import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo -import org.jetbrains.kotlin.idea.facet.KotlinFacet -import org.jetbrains.plugins.groovy.lang.psi.GroovyFile class IDEAndroidPackageFragmentProviderExtension(val project: Project) : AndroidPackageFragmentProviderExtension() { - private val psiManager = PsiManager.getInstance(project) - override fun isExperimental(moduleInfo: ModuleInfo?): Boolean { return moduleInfo?.androidExtensionsIsExperimental ?: false } @@ -56,11 +48,7 @@ class IDEAndroidPackageFragmentProviderExtension(val project: Project) : Android private fun isAndroidExtensionsEnabled(module: Module): Boolean { // Android Extensions should be always enabled for Android/JPS if (isLegacyIdeaAndroidModule(module)) return true - - val androidGradleFacet = AndroidGradleFacet.getInstance(module) ?: return false - val buildFile = androidGradleFacet.gradleModel?.buildFile ?: return false - val buildGroovyFile = psiManager.findFile(buildFile) as? GroovyFile ?: return false - return GradleBuildFile.getPlugins(buildGroovyFile).contains("kotlin-android-extensions") + return module.androidExtensionsIsEnabled } private fun isLegacyIdeaAndroidModule(module: Module): Boolean {