Faster component loading (better cache data structures)

This commit is contained in:
Alexander Podkhalyuzin
2019-05-30 12:34:26 +02:00
committed by Vladimir Dolzhenko
parent 796cdea50e
commit b59bd9d6a6
2 changed files with 9 additions and 6 deletions
@@ -21,7 +21,7 @@ import java.lang.reflect.*
import java.util.* import java.util.*
private object ClassTraversalCache { private object ClassTraversalCache {
private val cache = ContainerUtil.createConcurrentWeakKeySoftValueMap<Class<*>, ClassInfo>() private val cache = ContainerUtil.newConcurrentMap<Class<*>, ClassInfo>()
fun getClassInfo(c: Class<*>): ClassInfo { fun getClassInfo(c: Class<*>): ClassInfo {
val classInfo = cache.get(c) val classInfo = cache.get(c)
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.container
import com.intellij.util.containers.MultiMap import com.intellij.util.containers.MultiMap
import java.io.Closeable import java.io.Closeable
import java.io.PrintStream import java.io.PrintStream
import java.lang.IllegalStateException
import java.lang.reflect.Modifier import java.lang.reflect.Modifier
import java.lang.reflect.ParameterizedType import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type import java.lang.reflect.Type
@@ -86,7 +85,7 @@ class ComponentStorage(private val myId: String, parent: ComponentStorage?) : Va
} }
} }
fun dump(printer: PrintStream): Unit = with (printer) { fun dump(printer: PrintStream): Unit = with(printer) {
val heading = "Container: $myId" val heading = "Container: $myId"
println(heading) println(heading)
println("=".repeat(heading.length)) println("=".repeat(heading.length))
@@ -158,7 +157,10 @@ class ComponentStorage(private val myId: String, parent: ComponentStorage?) : Va
} }
} }
private fun inspectDependenciesAndRegisterAdhoc(context: ComponentResolveContext, descriptors: Collection<ComponentDescriptor>): LinkedHashSet<ComponentDescriptor> { private fun inspectDependenciesAndRegisterAdhoc(
context: ComponentResolveContext,
descriptors: Collection<ComponentDescriptor>
): LinkedHashSet<ComponentDescriptor> {
val adhoc = LinkedHashSet<ComponentDescriptor>() val adhoc = LinkedHashSet<ComponentDescriptor>()
val visitedTypes = HashSet<Type>() val visitedTypes = HashSet<Type>()
for (descriptor in descriptors) { for (descriptor in descriptors) {
@@ -168,8 +170,9 @@ class ComponentStorage(private val myId: String, parent: ComponentStorage?) : Va
return adhoc return adhoc
} }
private fun collectAdhocComponents(context: ComponentResolveContext, descriptor: ComponentDescriptor, private fun collectAdhocComponents(
visitedTypes: HashSet<Type>, adhocDescriptors: LinkedHashSet<ComponentDescriptor> context: ComponentResolveContext, descriptor: ComponentDescriptor,
visitedTypes: HashSet<Type>, adhocDescriptors: LinkedHashSet<ComponentDescriptor>
) { ) {
val dependencies = descriptor.getDependencies(context) val dependencies = descriptor.getDependencies(context)
for (type in dependencies) { for (type in dependencies) {