mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[debugger] avoid scanning all classes in vm for nested sub classes - fixed kotlin tests
GitOrigin-RevId: e5fee6bd9579af0282e24bbba80a1054f7a083b9
This commit is contained in:
committed by
intellij-monorepo-bot
parent
87b49d65b2
commit
0a33108740
@@ -133,7 +133,8 @@ public class VirtualMachineProxyImpl implements JdiTimer, VirtualMachineProxy {
|
||||
/**
|
||||
* Check {@link ReferenceTypeImpl#nestedTypes()}
|
||||
*/
|
||||
private static void addNestedTypes(ReferenceType base, Collection<ReferenceType> classes, Set<ReferenceType> nested) {
|
||||
@ApiStatus.Internal
|
||||
public static void addNestedTypes(ReferenceType base, Collection<ReferenceType> classes, Collection<ReferenceType> nested) {
|
||||
String baseName = base.name();
|
||||
int baseLength = baseName.length();
|
||||
classes.forEach(type -> {
|
||||
|
||||
+6
-9
@@ -3,6 +3,7 @@
|
||||
package org.jetbrains.kotlin.idea.debugger.test.mock
|
||||
|
||||
import com.intellij.debugger.engine.DebugProcess.JAVA_STRATUM
|
||||
import com.intellij.debugger.jdi.VirtualMachineProxyImpl
|
||||
import com.sun.jdi.*
|
||||
import org.jetbrains.kotlin.backend.common.output.OutputFile
|
||||
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection
|
||||
@@ -21,12 +22,12 @@ class SmartMockReferenceTypeContext(outputFiles: List<OutputFile>) {
|
||||
.filter { it.relativePath.endsWith(".class") }
|
||||
.map { it.readClass() }
|
||||
|
||||
private val referenceTypes: List<ReferenceType> by lazy {
|
||||
internal val referenceTypes: List<ReferenceType> by lazy {
|
||||
classes.map { SmartMockReferenceType(it, this) }
|
||||
}
|
||||
|
||||
val referenceTypesByName by lazy {
|
||||
referenceTypes.map { Pair(it.name(), it) }.toMap()
|
||||
referenceTypes.associate { Pair(it.name(), it) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,17 +61,13 @@ class SmartMockReferenceType(val classNode: ClassNode, private val context: Smar
|
||||
override fun sourceNames(stratum: String) = listOf(classNode.sourceFile)
|
||||
override fun availableStrata() = emptyList<String>()
|
||||
|
||||
override fun toString(): String = name()
|
||||
|
||||
private val methodsCached by lazy { classNode.methods.map { MockMethod(it, this) } }
|
||||
override fun methods() = methodsCached
|
||||
|
||||
override fun nestedTypes(): List<ReferenceType> {
|
||||
val fromInnerClasses = classNode.innerClasses
|
||||
.filter { it.outerName == classNode.name }
|
||||
.mapNotNull { context.classes.find { c -> it.name == c.name } }
|
||||
|
||||
val fromOuterClasses = context.classes.filter { it.outerClass == classNode.name }
|
||||
|
||||
return (fromInnerClasses + fromOuterClasses).distinctBy { it.name }.map { SmartMockReferenceType(it, context) }
|
||||
return mutableListOf<ReferenceType>().also { VirtualMachineProxyImpl.addNestedTypes(this, context.referenceTypes, it) }
|
||||
}
|
||||
|
||||
override fun isPackagePrivate(): Boolean {
|
||||
|
||||
Reference in New Issue
Block a user