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="idea-test-framework" scope="TEST" />
|
||||||
<orderEntry type="module" module-name="frontend.java" scope="TEST" />
|
<orderEntry type="module" module-name="frontend.java" scope="TEST" />
|
||||||
<orderEntry type="module" module-name="idea-live-templates" scope="TEST" />
|
<orderEntry type="module" module-name="idea-live-templates" scope="TEST" />
|
||||||
|
<orderEntry type="library" name="gradle-and-groovy-plugin" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
+20
-2
@@ -16,20 +16,38 @@
|
|||||||
|
|
||||||
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.module.Module
|
||||||
import com.intellij.openapi.module.ModuleServiceManager
|
import com.intellij.openapi.module.ModuleServiceManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
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.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.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? {
|
override fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager? {
|
||||||
val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return null
|
val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return null
|
||||||
val module = moduleSourceInfo.module
|
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)
|
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