mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
[kotlin debugger] use more optimized jvm findClass
GitOrigin-RevId: d82d1d2e12239a2068b442cf5402acbcf43c6af0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
906db74406
commit
e0d5283a4e
@@ -36,15 +36,15 @@ open class JDIEval(
|
|||||||
private val isJava8OrLater = StringUtil.compareVersionNumbers(vm.version(), "1.8") >= 0
|
private val isJava8OrLater = StringUtil.compareVersionNumbers(vm.version(), "1.8") >= 0
|
||||||
|
|
||||||
override fun loadClass(classType: Type): Value {
|
override fun loadClass(classType: Type): Value {
|
||||||
return loadClass(classType, defaultClassLoader)
|
return loadType(classType, defaultClassLoader).classObject().asValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadClass(classType: Type, classLoader: ClassLoaderReference?): Value {
|
open fun loadType(classType: Type, classLoader: ClassLoaderReference?): ReferenceType {
|
||||||
val loadedClasses = vm.classesByName(classType.className)
|
val loadedClasses = vm.classesByName(classType.className)
|
||||||
if (loadedClasses.isNotEmpty()) {
|
if (loadedClasses.isNotEmpty()) {
|
||||||
for (loadedClass in loadedClasses) {
|
for (loadedClass in loadedClasses) {
|
||||||
if (loadedClass.isPrepared && (classType.descriptor in BOOTSTRAP_CLASS_DESCRIPTORS || loadedClass.classLoader() == classLoader)) {
|
if (loadedClass.isPrepared && (classType.descriptor in BOOTSTRAP_CLASS_DESCRIPTORS || loadedClass.classLoader() == classLoader)) {
|
||||||
return loadedClass.classObject().asValue()
|
return loadedClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ open class JDIEval(
|
|||||||
true
|
true
|
||||||
),
|
),
|
||||||
listOf(loadString(classType.jdiName))
|
listOf(loadString(classType.jdiName))
|
||||||
)
|
).jdiClass!!.reflectedType()
|
||||||
} else {
|
} else {
|
||||||
return invokeStaticMethod(
|
return invokeStaticMethod(
|
||||||
MethodDescription(
|
MethodDescription(
|
||||||
@@ -71,10 +71,11 @@ open class JDIEval(
|
|||||||
boolean(true),
|
boolean(true),
|
||||||
classLoader.asValue()
|
classLoader.asValue()
|
||||||
)
|
)
|
||||||
)
|
).jdiClass!!.reflectedType()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun loadClassByName(name: String, classLoader: ClassLoaderReference): jdi_Type {
|
private fun loadClassByName(name: String, classLoader: ClassLoaderReference): jdi_Type {
|
||||||
val dimensions = name.count { it == '[' }
|
val dimensions = name.count { it == '[' }
|
||||||
val baseTypeName = if (dimensions > 0) name.substring(0, name.indexOf('[')) else name
|
val baseTypeName = if (dimensions > 0) name.substring(0, name.indexOf('[')) else name
|
||||||
@@ -114,7 +115,7 @@ open class JDIEval(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun Type.asReferenceType(classLoader: ClassLoaderReference? = this@JDIEval.defaultClassLoader): ReferenceType =
|
private fun Type.asReferenceType(classLoader: ClassLoaderReference? = this@JDIEval.defaultClassLoader): ReferenceType =
|
||||||
loadClass(this, classLoader).jdiClass!!.reflectedType()
|
loadType(this, classLoader)
|
||||||
|
|
||||||
private fun Type.asArrayType(classLoader: ClassLoaderReference? = this@JDIEval.defaultClassLoader): ArrayType =
|
private fun Type.asArrayType(classLoader: ClassLoaderReference? = this@JDIEval.defaultClassLoader): ArrayType =
|
||||||
asReferenceType(classLoader) as ArrayType
|
asReferenceType(classLoader) as ArrayType
|
||||||
|
|||||||
@@ -275,6 +275,10 @@ class KotlinEvaluator(val codeFragment: KtCodeFragment, private val sourcePositi
|
|||||||
return super.isInstanceOf(value, targetType)
|
return super.isInstanceOf(value, targetType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun loadType(classType: Type, classLoader: ClassLoaderReference?): ReferenceType {
|
||||||
|
return context.debugProcess.findClass(context.evaluationContext, classType.className, classLoader)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
interpreterLoop(mainMethod, makeInitialFrame(mainMethod, args.map { it.asValue() }), eval)
|
interpreterLoop(mainMethod, makeInitialFrame(mainMethod, args.map { it.asValue() }), eval)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user