Make LibraryDependenciesCache cache again!
#KT-17495 fixed
This commit is contained in:
@@ -197,7 +197,7 @@ class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo,
|
||||
val result = LinkedHashSet<IdeaModuleInfo>()
|
||||
result.add(this)
|
||||
|
||||
val (libraries, sdks) = LibraryDependenciesCache(project).getLibrariesAndSdksUsedWith(library)
|
||||
val (libraries, sdks) = LibraryDependenciesCache.getInstance(project).getLibrariesAndSdksUsedWith(library)
|
||||
|
||||
sdks.mapTo(result) { SdkInfo(project, it) }
|
||||
libraries.filter { it is LibraryEx && !it.isDisposed }.mapTo(result) { LibraryInfo(project, it) }
|
||||
|
||||
+25
-2
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.project.Project
|
||||
@@ -25,16 +26,38 @@ import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.util.Condition
|
||||
import com.intellij.psi.util.CachedValueProvider
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.kotlin.idea.core.util.CachedValue
|
||||
import org.jetbrains.kotlin.idea.core.util.getValue
|
||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import java.util.*
|
||||
|
||||
class LibraryDependenciesCache(private val project: Project) {
|
||||
internal typealias LibrariesAndSdks = Pair<List<Library>, List<Sdk>>
|
||||
|
||||
interface LibraryDependenciesCache {
|
||||
companion object {
|
||||
fun getInstance(project: Project) = ServiceManager.getService(project, LibraryDependenciesCache::class.java)!!
|
||||
}
|
||||
|
||||
fun getLibrariesAndSdksUsedWith(library: Library): LibrariesAndSdks
|
||||
}
|
||||
|
||||
class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDependenciesCache {
|
||||
|
||||
val cache by CachedValue(project) {
|
||||
CachedValueProvider.Result(ContainerUtil.createConcurrentWeakMap<Library, LibrariesAndSdks>(),
|
||||
ProjectRootManager.getInstance(project))
|
||||
}
|
||||
|
||||
override fun getLibrariesAndSdksUsedWith(library: Library): LibrariesAndSdks =
|
||||
cache.getOrPut(library) { computeLibrariesAndSdksUsedWith(library) }
|
||||
|
||||
|
||||
//NOTE: used LibraryRuntimeClasspathScope as reference
|
||||
fun getLibrariesAndSdksUsedWith(library: Library): Pair<List<Library>, List<Sdk>> {
|
||||
private fun computeLibrariesAndSdksUsedWith(library: Library): LibrariesAndSdks {
|
||||
val processedModules = HashSet<Module>()
|
||||
val condition = Condition<OrderEntry> { orderEntry ->
|
||||
if (orderEntry is ModuleOrderEntry) {
|
||||
|
||||
@@ -316,6 +316,9 @@
|
||||
|
||||
<projectService serviceImplementation="org.jetbrains.kotlin.idea.caches.PerModulePackageCacheService"/>
|
||||
|
||||
<projectService serviceInterface="org.jetbrains.kotlin.idea.caches.resolve.LibraryDependenciesCache"
|
||||
serviceImplementation="org.jetbrains.kotlin.idea.caches.resolve.LibraryDependenciesCacheImpl"/>
|
||||
|
||||
<errorHandler implementation="org.jetbrains.kotlin.idea.reporter.KotlinReportSubmitter"/>
|
||||
|
||||
<internalFileTemplate name="Kotlin File"/>
|
||||
|
||||
Reference in New Issue
Block a user