Android Extensions: Migrate enabled status check to Gradle importer #KT-17641

This commit is contained in:
Yan Zhulanow
2017-07-19 22:30:14 +03:00
parent 38449caaed
commit 8cdcfc5e67
2 changed files with 23 additions and 23 deletions
@@ -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)
}
@@ -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 {