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
|
package org.jetbrains.kotlin.android.synthetic.idea
|
||||||
|
|
||||||
|
import com.intellij.openapi.module.Module
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
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.ANDROID_COMPILER_PLUGIN_ID
|
||||||
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.EXPERIMENTAL_OPTION
|
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.caches.resolve.ModuleSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
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
|
internal val ModuleInfo.androidExtensionsIsExperimental: Boolean
|
||||||
get() {
|
get() {
|
||||||
val module = (this as? ModuleSourceInfo)?.module ?: return false
|
val module = (this as? ModuleSourceInfo)?.module ?: return false
|
||||||
val kotlinFacet = KotlinFacet.get(module) ?: return false
|
return module.isOptionEnabledInFacet(EXPERIMENTAL_OPTION)
|
||||||
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"
|
|
||||||
}
|
}
|
||||||
+2
-14
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.android.synthetic.idea.res
|
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.application.ApplicationManager
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.module.ModuleServiceManager
|
import com.intellij.openapi.module.ModuleServiceManager
|
||||||
@@ -25,19 +23,13 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import org.jetbrains.android.facet.AndroidFacet
|
import org.jetbrains.android.facet.AndroidFacet
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ANDROID_COMPILER_PLUGIN_ID
|
import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsEnabled
|
||||||
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.EXPERIMENTAL_OPTION
|
|
||||||
import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsExperimental
|
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.AndroidLayoutXmlFileManager
|
||||||
import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension
|
import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo
|
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() {
|
class IDEAndroidPackageFragmentProviderExtension(val project: Project) : AndroidPackageFragmentProviderExtension() {
|
||||||
private val psiManager = PsiManager.getInstance(project)
|
|
||||||
|
|
||||||
override fun isExperimental(moduleInfo: ModuleInfo?): Boolean {
|
override fun isExperimental(moduleInfo: ModuleInfo?): Boolean {
|
||||||
return moduleInfo?.androidExtensionsIsExperimental ?: false
|
return moduleInfo?.androidExtensionsIsExperimental ?: false
|
||||||
}
|
}
|
||||||
@@ -56,11 +48,7 @@ class IDEAndroidPackageFragmentProviderExtension(val project: Project) : Android
|
|||||||
private fun isAndroidExtensionsEnabled(module: Module): Boolean {
|
private fun isAndroidExtensionsEnabled(module: Module): Boolean {
|
||||||
// Android Extensions should be always enabled for Android/JPS
|
// Android Extensions should be always enabled for Android/JPS
|
||||||
if (isLegacyIdeaAndroidModule(module)) return true
|
if (isLegacyIdeaAndroidModule(module)) return true
|
||||||
|
return module.androidExtensionsIsEnabled
|
||||||
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")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isLegacyIdeaAndroidModule(module: Module): Boolean {
|
private fun isLegacyIdeaAndroidModule(module: Module): Boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user