Support different target platforms for modules in AnalyzerFacade
Instead of reusing the same AnalyzerFacade that is used for resolution of a module to resolve its dependencies, analyze each dependency module/library with a facade depending on its target platform. Introduce and use CommonLibraryDetectionUtil in addition to KotlinJavaScriptLibraryDetectionUtil, to detect common libraries (with .kotlin_metadata files). Note that before multi-platform projects, this was not needed because there were only two platforms (JVM and JS), and JVM module had only JVM modules/libraries as dependencies, JS module had only JS modules/libraries as dependencies. Now, for example, a JVM module can have a common module/library as a dependency, and it would be incorrect to analyze that dependency with JvmAnalyzerFacade because that facade does not know anything about .kotlin_metadata files. The changes in Dsl.kt and KotlinCacheServiceImpl.kt are needed because PsiElement.getJavaDescriptorResolver, called from some IDE code, started to fail on a common module, because the container for a common module does not have the JavaDescriptorResolver
This commit is contained in:
@@ -34,9 +34,12 @@ inline fun <reified T : Any> ComponentProvider.get(): T {
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <T : Any> ComponentProvider.tryGetService(request: Class<T>): T? {
|
||||
return resolve(request)?.getValue() as T?
|
||||
}
|
||||
|
||||
fun <T : Any> ComponentProvider.getService(request: Class<T>): T {
|
||||
val valueDescriptor = resolve(request) ?: throw IllegalArgumentException("Unresolved service: $request")
|
||||
return valueDescriptor.getValue() as T
|
||||
return tryGetService(request) ?: throw IllegalArgumentException("Unresolved service: $request")
|
||||
}
|
||||
|
||||
fun StorageComponentContainer.useInstance(instance: Any) {
|
||||
|
||||
Reference in New Issue
Block a user