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 {