From 8ac14ab9305e6bd1efeb9fe7551fa73fbb62527a Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Mon, 13 Mar 2017 20:41:18 +0300 Subject: [PATCH] Android Extensions: Allow to disable IDE support (KT-12741) Enable IDE plugin only if it is enabled in the build.gradle file. --- .../android-extensions-idea.iml | 1 + ...AndroidPackageFragmentProviderExtension.kt | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/plugins/android-extensions/android-extensions-idea/android-extensions-idea.iml b/plugins/android-extensions/android-extensions-idea/android-extensions-idea.iml index ae6a9ef5061..cc60f9b6add 100644 --- a/plugins/android-extensions/android-extensions-idea/android-extensions-idea.iml +++ b/plugins/android-extensions/android-extensions-idea/android-extensions-idea.iml @@ -21,5 +21,6 @@ + \ 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 591e40e8a2b..e870cc9f3b7 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,20 +16,38 @@ 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 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.res.AndroidLayoutXmlFileManager import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension import org.jetbrains.kotlin.idea.caches.resolve.ModuleSourceInfo +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile -class IDEAndroidPackageFragmentProviderExtension : AndroidPackageFragmentProviderExtension() { +class IDEAndroidPackageFragmentProviderExtension(val project: Project) : AndroidPackageFragmentProviderExtension() { + private val psiManager = PsiManager.getInstance(project) override fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager? { val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return null val module = moduleSourceInfo.module - if (AndroidFacet.getInstance(module) == null) return null + if (!isAndroidExtensionsEnabled(module) && !isTestMode(module)) return null return ModuleServiceManager.getService(module, AndroidLayoutXmlFileManager::class.java) } + + private fun isTestMode(module: Module): Boolean { + return ApplicationManager.getApplication().isUnitTestMode && AndroidFacet.getInstance(module) != null + } + + private fun isAndroidExtensionsEnabled(module: Module): Boolean { + 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") + } } \ No newline at end of file