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:
@@ -21,5 +21,6 @@
|
||||
<orderEntry type="module" module-name="idea-test-framework" scope="TEST" />
|
||||
<orderEntry type="module" module-name="frontend.java" scope="TEST" />
|
||||
<orderEntry type="module" module-name="idea-live-templates" scope="TEST" />
|
||||
<orderEntry type="library" name="gradle-and-groovy-plugin" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
+20
-2
@@ -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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user