From c6bfb027547c9669cec5cd045cdd08bc7fc9d859 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 21 Feb 2017 12:35:49 +0100 Subject: [PATCH] Move JsAnalyzerFacade to ide-common module to enable its use in Dokka --- idea/ide-common/ide-common.iml | 2 ++ .../caches/resolve/JsAnalyzerFacade.kt | 10 ++++---- .../caches/resolve/LibraryModuleInfo.kt | 24 +++++++++++++++++++ .../idea/caches/resolve/IdeaModuleInfos.kt | 10 +++++++- 4 files changed, 39 insertions(+), 7 deletions(-) rename idea/{idea-analysis/src/org/jetbrains/kotlin/idea => ide-common/src/org/jetbrains/kotlin}/caches/resolve/JsAnalyzerFacade.kt (91%) create mode 100644 idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt diff --git a/idea/ide-common/ide-common.iml b/idea/ide-common/ide-common.iml index 0314d844bde..765094d3d4d 100644 --- a/idea/ide-common/ide-common.iml +++ b/idea/ide-common/ide-common.iml @@ -21,5 +21,7 @@ + + \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt similarity index 91% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt rename to idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt index 33d1ebef3cd..686166fa6a5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt @@ -16,10 +16,9 @@ package org.jetbrains.kotlin.idea.caches.resolve -import com.intellij.openapi.roots.OrderRootType import com.intellij.psi.search.GlobalSearchScope -import com.intellij.util.PathUtil import org.jetbrains.kotlin.analyzer.* +import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.container.get @@ -28,7 +27,6 @@ import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve -import org.jetbrains.kotlin.idea.framework.KotlinJavaScriptLibraryDetectionUtil import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.TargetEnvironment @@ -73,9 +71,9 @@ object JsAnalyzerFacade : AnalyzerFacade() { ) var packageFragmentProvider = container.get().packageFragmentProvider - if (moduleInfo is LibraryInfo && KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(moduleInfo.library)) { - val providers = moduleInfo.library.getFiles(OrderRootType.CLASSES) - .flatMap { KotlinJavascriptMetadataUtils.loadMetadata(PathUtil.getLocalPath(it)!!) } + if (moduleInfo is LibraryModuleInfo && moduleInfo.isJsLibrary()) { + val providers = moduleInfo.getLibraryRoots() + .flatMap { KotlinJavascriptMetadataUtils.loadMetadata(it) } .filter { it.version.isCompatible() } .mapNotNull { KotlinJavascriptSerializationUtil.readModule( diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt new file mode 100644 index 00000000000..0eb27bf6607 --- /dev/null +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/LibraryModuleInfo.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.caches.resolve + +import org.jetbrains.kotlin.analyzer.ModuleInfo + +interface LibraryModuleInfo : ModuleInfo { + fun isJsLibrary(): Boolean + fun getLibraryRoots(): Collection +} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index fda546a2a67..1dcd024d263 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -27,9 +27,12 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager +import com.intellij.util.PathUtil import com.intellij.util.SmartList import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.idea.framework.KotlinJavaScriptLibraryDetectionUtil import org.jetbrains.kotlin.idea.util.isInSourceContentWithoutInjected import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.jvm.GlobalSearchScopeWithModuleSources @@ -174,7 +177,7 @@ private class ModuleTestSourceScope(module: Module) : ModuleSourceScope(module) override fun toString() = "ModuleTestSourceScope($module)" } -open class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo { +open class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo, LibraryModuleInfo { override val moduleOrigin: ModuleOrigin get() = ModuleOrigin.LIBRARY @@ -197,6 +200,11 @@ open class LibraryInfo(val project: Project, val library: Library) : IdeaModuleI return result.toList() } + override fun isJsLibrary(): Boolean = KotlinJavaScriptLibraryDetectionUtil.isKotlinJavaScriptLibrary(library) + + override fun getLibraryRoots(): Collection = + library.getFiles(OrderRootType.CLASSES).map(PathUtil::getLocalPath).filterNotNull() + override fun toString() = "LibraryInfo(libraryName=${library.name})" override fun equals(other: Any?): Boolean {