Android Extensions: Support platform modules (KT-26169)
This commit is contained in:
@@ -415,7 +415,7 @@ interface SourceForBinaryModuleInfo : IdeaModuleInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class PlatformModuleInfo(
|
data class PlatformModuleInfo(
|
||||||
internal val platformModule: ModuleSourceInfo,
|
val platformModule: ModuleSourceInfo,
|
||||||
private val commonModules: List<ModuleSourceInfo> // NOTE: usually contains a single element for current implementation
|
private val commonModules: List<ModuleSourceInfo> // NOTE: usually contains a single element for current implementation
|
||||||
) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo {
|
) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo {
|
||||||
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
|
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
|
||||||
|
|||||||
+1
-3
@@ -25,7 +25,6 @@ import com.intellij.psi.impl.source.tree.LeafPsiElement
|
|||||||
import com.intellij.psi.xml.XmlAttribute
|
import com.intellij.psi.xml.XmlAttribute
|
||||||
import org.jetbrains.kotlin.android.synthetic.res.AndroidLayoutXmlFileManager
|
import org.jetbrains.kotlin.android.synthetic.res.AndroidLayoutXmlFileManager
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
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.project.getModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
||||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||||
@@ -51,8 +50,7 @@ class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getLayoutManager(sourceElement: PsiElement): AndroidLayoutXmlFileManager? {
|
private fun getLayoutManager(sourceElement: PsiElement): AndroidLayoutXmlFileManager? {
|
||||||
val moduleInfo = sourceElement.getModuleInfo()
|
val moduleInfo = sourceElement.getModuleInfo().findAndroidModuleInfo() ?: return null
|
||||||
if (moduleInfo !is ModuleSourceInfo) return null
|
|
||||||
return ModuleServiceManager.getService(moduleInfo.module, AndroidLayoutXmlFileManager::class.java)
|
return ModuleServiceManager.getService(moduleInfo.module, AndroidLayoutXmlFileManager::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-5
@@ -20,7 +20,6 @@ import com.intellij.openapi.application.ApplicationManager
|
|||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import kotlinx.android.extensions.CacheImplementation
|
import kotlinx.android.extensions.CacheImplementation
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
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.model.isAndroidModule
|
||||||
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ANDROID_COMPILER_PLUGIN_ID
|
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.ANDROID_COMPILER_PLUGIN_ID
|
||||||
import org.jetbrains.kotlin.android.synthetic.AndroidCommandLineProcessor.Companion.EXPERIMENTAL_OPTION
|
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.AndroidCommandLineProcessor.Companion.DEFAULT_CACHE_IMPL_OPTION
|
||||||
import org.jetbrains.kotlin.android.synthetic.AndroidComponentRegistrar.Companion.parseCacheImplementationType
|
import org.jetbrains.kotlin.android.synthetic.AndroidComponentRegistrar.Companion.parseCacheImplementationType
|
||||||
import org.jetbrains.kotlin.compiler.plugin.CliOption
|
import org.jetbrains.kotlin.compiler.plugin.CliOption
|
||||||
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
|
||||||
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
||||||
|
|
||||||
private val ANNOTATION_OPTION_PREFIX = "plugin:$ANDROID_COMPILER_PLUGIN_ID:"
|
private val ANNOTATION_OPTION_PREFIX = "plugin:$ANDROID_COMPILER_PLUGIN_ID:"
|
||||||
@@ -55,13 +53,13 @@ internal val Module.androidExtensionsIsEnabled: Boolean
|
|||||||
|
|
||||||
internal val ModuleInfo.androidExtensionsIsEnabled: Boolean
|
internal val ModuleInfo.androidExtensionsIsEnabled: Boolean
|
||||||
get() {
|
get() {
|
||||||
val module = (this as? ModuleSourceInfo)?.module ?: return false
|
val module = this.findAndroidModuleInfo()?.module ?: return false
|
||||||
return module.androidExtensionsIsEnabled
|
return module.androidExtensionsIsEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val ModuleInfo.androidExtensionsIsExperimental: Boolean
|
internal val ModuleInfo.androidExtensionsIsExperimental: Boolean
|
||||||
get() {
|
get() {
|
||||||
val module = (this as? ModuleSourceInfo)?.module ?: return false
|
val module = this.findAndroidModuleInfo()?.module ?: return false
|
||||||
return module.androidExtensionsIsExperimental
|
return module.androidExtensionsIsExperimental
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +71,6 @@ internal val Module.androidExtensionsIsExperimental: Boolean
|
|||||||
|
|
||||||
val ModuleInfo.androidExtensionsGlobalCacheImpl: CacheImplementation
|
val ModuleInfo.androidExtensionsGlobalCacheImpl: CacheImplementation
|
||||||
get() {
|
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))
|
return parseCacheImplementationType(module.getOptionValueInFacet(DEFAULT_CACHE_IMPL_OPTION))
|
||||||
}
|
}
|
||||||
+19
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-4
@@ -21,12 +21,11 @@ import com.intellij.openapi.module.ModuleServiceManager
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.android.model.AndroidModuleInfoProvider
|
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.androidExtensionsIsEnabled
|
||||||
import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsExperimental
|
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.AndroidLayoutXmlFileManager
|
||||||
import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension
|
import org.jetbrains.kotlin.android.synthetic.res.AndroidPackageFragmentProviderExtension
|
||||||
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
|
||||||
|
|
||||||
class IDEAndroidPackageFragmentProviderExtension(val project: Project) : AndroidPackageFragmentProviderExtension() {
|
class IDEAndroidPackageFragmentProviderExtension(val project: Project) : AndroidPackageFragmentProviderExtension() {
|
||||||
override fun isExperimental(moduleInfo: ModuleInfo?): Boolean {
|
override fun isExperimental(moduleInfo: ModuleInfo?): Boolean {
|
||||||
@@ -34,8 +33,7 @@ class IDEAndroidPackageFragmentProviderExtension(val project: Project) : Android
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager? {
|
override fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager? {
|
||||||
val moduleSourceInfo = moduleInfo as? ModuleSourceInfo ?: return null
|
val module = moduleInfo?.findAndroidModuleInfo()?.module ?: return null
|
||||||
val module = moduleSourceInfo.module
|
|
||||||
if (!isAndroidExtensionsEnabled(module)) return null
|
if (!isAndroidExtensionsEnabled(module)) return null
|
||||||
return ModuleServiceManager.getService(module, AndroidLayoutXmlFileManager::class.java)
|
return ModuleServiceManager.getService(module, AndroidLayoutXmlFileManager::class.java)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user