JsAnalyzerFacade: support for metadata
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
<orderEntry type="library" scope="PROVIDED" name="java-i18n" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="java-i18n" level="project" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="gradle-and-groovy-plugin" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="gradle-and-groovy-plugin" level="project" />
|
||||||
<orderEntry type="module" module-name="serialization" />
|
<orderEntry type="module" module-name="serialization" />
|
||||||
|
<orderEntry type="module" module-name="serialization.js" />
|
||||||
<orderEntry type="module" module-name="serialization.jvm" />
|
<orderEntry type="module" module-name="serialization.jvm" />
|
||||||
<orderEntry type="module" module-name="eval4j" />
|
<orderEntry type="module" module-name="eval4j" />
|
||||||
<orderEntry type="library" name="intellij-core-analysis" level="project" />
|
<orderEntry type="library" name="intellij-core-analysis" level="project" />
|
||||||
|
|||||||
+25
-13
@@ -16,23 +16,23 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.resolve
|
package org.jetbrains.kotlin.idea.caches.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
|
||||||
import org.jetbrains.kotlin.analyzer.ResolverForModule
|
|
||||||
import org.jetbrains.kotlin.analyzer.PlatformAnalysisParameters
|
|
||||||
import org.jetbrains.kotlin.analyzer.AnalyzerFacade
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.roots.OrderRootType
|
||||||
|
import com.intellij.util.PathUtil
|
||||||
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.context.GlobalContext
|
import org.jetbrains.kotlin.context.GlobalContext
|
||||||
import org.jetbrains.kotlin.analyzer.ResolverForProject
|
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
|
||||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
|
||||||
import org.jetbrains.kotlin.di.InjectorForLazyResolve
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.di.InjectorForLazyResolve
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleContent
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
||||||
import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider
|
import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider
|
||||||
|
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
|
||||||
|
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesAllowed
|
import org.jetbrains.kotlin.types.DynamicTypesAllowed
|
||||||
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||||
|
|
||||||
public class JsResolverForModule(
|
public class JsResolverForModule(
|
||||||
override val lazyResolveSession: ResolveSession
|
override val lazyResolveSession: ResolveSession
|
||||||
@@ -58,7 +58,19 @@ public object JsAnalyzerFacade : AnalyzerFacade<JsResolverForModule, PlatformAna
|
|||||||
val injector = InjectorForLazyResolve(project, globalContext, moduleDescriptor, declarationProviderFactory, BindingTraceContext(),
|
val injector = InjectorForLazyResolve(project, globalContext, moduleDescriptor, declarationProviderFactory, BindingTraceContext(),
|
||||||
KotlinJsCheckerProvider, DynamicTypesAllowed())
|
KotlinJsCheckerProvider, DynamicTypesAllowed())
|
||||||
val resolveSession = injector.getResolveSession()!!
|
val resolveSession = injector.getResolveSession()!!
|
||||||
moduleDescriptor.initialize(resolveSession.getPackageFragmentProvider())
|
var packageFragmentProvider = resolveSession.getPackageFragmentProvider()
|
||||||
|
|
||||||
|
if (moduleInfo is LibraryInfo) {
|
||||||
|
val providers = moduleInfo.library.getFiles(OrderRootType.CLASSES)
|
||||||
|
.flatMap { KotlinJavascriptMetadataUtils.loadMetadata(PathUtil.getLocalPath(it)!!) }
|
||||||
|
.flatMap { KotlinJavascriptSerializationUtil.getPackageFragmentProviders(moduleDescriptor, it.body) }
|
||||||
|
|
||||||
|
if (providers.isNotEmpty()) {
|
||||||
|
packageFragmentProvider = CompositePackageFragmentProvider(listOf(packageFragmentProvider) + providers)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleDescriptor.initialize(packageFragmentProvider)
|
||||||
return JsResolverForModule(resolveSession)
|
return JsResolverForModule(resolveSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user