Android Extensions: Allow to disable IDE support (KT-12741)

Enable IDE plugin only if it is enabled in the build.gradle file.
This commit is contained in:
Yan Zhulanow
2017-03-13 20:41:18 +03:00
parent 5d4cefcc30
commit 8ac14ab930
2 changed files with 21 additions and 2 deletions
@@ -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")
}
}