Android Extensions: Support platform modules (KT-26169)

This commit is contained in:
Yan Zhulanow
2018-09-05 19:07:09 +03:00
parent ca4b99b1a0
commit 280a3e3d26
5 changed files with 26 additions and 13 deletions
@@ -25,7 +25,6 @@ import com.intellij.psi.impl.source.tree.LeafPsiElement
import com.intellij.psi.xml.XmlAttribute
import org.jetbrains.kotlin.android.synthetic.res.AndroidLayoutXmlFileManager
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
@@ -51,8 +50,7 @@ class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
}
private fun getLayoutManager(sourceElement: PsiElement): AndroidLayoutXmlFileManager? {
val moduleInfo = sourceElement.getModuleInfo()
if (moduleInfo !is ModuleSourceInfo) return null
val moduleInfo = sourceElement.getModuleInfo().findAndroidModuleInfo() ?: return null
return ModuleServiceManager.getService(moduleInfo.module, AndroidLayoutXmlFileManager::class.java)
}
@@ -20,7 +20,6 @@ import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.module.Module
import kotlinx.android.extensions.CacheImplementation
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.android.model.AndroidModuleInfoProvider
import org.jetbrains.kotlin.android.model.isAndroidModule
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ANDROID_COMPILER_PLUGIN_ID
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.EXPERIMENTAL_OPTION
@@ -28,7 +27,6 @@ import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Compan
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.DEFAULT_CACHE_IMPL_OPTION
import org.jetbrains.kotlin.android.synthetic.AndroidComponentRegistrar.Companion.parseCacheImplementationType
import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
import org.jetbrains.kotlin.idea.facet.KotlinFacet
private val ANNOTATION_OPTION_PREFIX = "plugin:$ANDROID_COMPILER_PLUGIN_ID:"
@@ -55,13 +53,13 @@ internal val Module.androidExtensionsIsEnabled: Boolean
internal val ModuleInfo.androidExtensionsIsEnabled: Boolean
get() {
val module = (this as? ModuleSourceInfo)?.module ?: return false
val module = this.findAndroidModuleInfo()?.module ?: return false
return module.androidExtensionsIsEnabled
}
internal val ModuleInfo.androidExtensionsIsExperimental: Boolean
get() {
val module = (this as? ModuleSourceInfo)?.module ?: return false
val module = this.findAndroidModuleInfo()?.module ?: return false
return module.androidExtensionsIsExperimental
}
@@ -73,6 +71,6 @@ internal val Module.androidExtensionsIsExperimental: Boolean
val ModuleInfo.androidExtensionsGlobalCacheImpl: CacheImplementation
get() {
val module = (this as? ModuleSourceInfo)?.module ?: return CacheImplementation.NO_CACHE
val module = this.findAndroidModuleInfo()?.module ?: return CacheImplementation.NO_CACHE
return parseCacheImplementationType(module.getOptionValueInFacet(DEFAULT_CACHE_IMPL_OPTION))
}
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.android.synthetic.idea
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
import org.jetbrains.kotlin.idea.caches.project.PlatformModuleInfo
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
internal fun ModuleInfo.findAndroidModuleInfo(): ModuleSourceInfo? {
return when (this) {
is ModuleSourceInfo -> this.takeIf { it.platform is JvmPlatform }
is PlatformModuleInfo -> this.platformModule.takeIf { it.platform is JvmPlatform }
else -> null
}
}
@@ -21,12 +21,11 @@ import com.intellij.openapi.module.ModuleServiceManager
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.android.model.AndroidModuleInfoProvider
import org.jetbrains.kotlin.android.model.isAndroidModule
import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsEnabled
import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsExperimental
import org.jetbrains.kotlin.android.synthetic.idea.findAndroidModuleInfo
import org.jetbrains.kotlin.android.synthetic.res.AndroidLayoutXmlFileManager
import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
class IDEAndroidPackageFragmentProviderExtension(val project: Project) : AndroidPackageFragmentProviderExtension() {
override fun isExperimental(moduleInfo: ModuleInfo?): Boolean {
@@ -34,8 +33,7 @@ class IDEAndroidPackageFragmentProviderExtension(val project: Project) : Android
}
override fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager? {
val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return null
val module = moduleSourceInfo.module
val module = moduleInfo?.findAndroidModuleInfo()?.module ?: return null
if (!isAndroidExtensionsEnabled(module)) return null
return ModuleServiceManager.getService(module, AndroidLayoutXmlFileManager::class.java)
}