Android Extensions: Migrate enabled status check to Gradle importer #KT-17641
This commit is contained in:
+21
-9
@@ -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)
|
||||
}
|
||||
+2
-14
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user