Ignore not-prepared classes and add diagnostics for not-prepared classes for getting fields (EA-85900)
(cherry picked from commit 2ce6069)
This commit is contained in:
committed by
Nikolay Krasko
parent
67cc6bb004
commit
33f01ca5f3
+19
-4
@@ -27,24 +27,39 @@ import com.intellij.debugger.ui.tree.ValueDescriptor
|
|||||||
import com.intellij.debugger.ui.tree.render.ChildrenBuilder
|
import com.intellij.debugger.ui.tree.render.ChildrenBuilder
|
||||||
import com.intellij.debugger.ui.tree.render.ClassRenderer
|
import com.intellij.debugger.ui.tree.render.ClassRenderer
|
||||||
import com.intellij.debugger.ui.tree.render.DescriptorLabelListener
|
import com.intellij.debugger.ui.tree.render.DescriptorLabelListener
|
||||||
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.xdebugger.settings.XDebuggerSettingsManager
|
import com.intellij.xdebugger.settings.XDebuggerSettingsManager
|
||||||
import com.sun.jdi.ObjectReference
|
import com.sun.jdi.*
|
||||||
import com.sun.jdi.ReferenceType
|
|
||||||
import com.sun.jdi.Type
|
import com.sun.jdi.Type
|
||||||
import com.sun.jdi.Value
|
|
||||||
import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerSettings
|
import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerSettings
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import com.sun.jdi.Type as JdiType
|
import com.sun.jdi.Type as JdiType
|
||||||
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
||||||
|
|
||||||
|
private val LOG = Logger.getInstance(KotlinClassWithDelegatedPropertyRenderer::class.java)
|
||||||
|
private fun notPreparedClassMessage(referenceType: ReferenceType) =
|
||||||
|
"$referenceType ${referenceType.isPrepared} ${referenceType.sourceName()}"
|
||||||
|
|
||||||
class KotlinClassWithDelegatedPropertyRenderer(val rendererSettings: NodeRendererSettings) : ClassRenderer() {
|
class KotlinClassWithDelegatedPropertyRenderer(val rendererSettings: NodeRendererSettings) : ClassRenderer() {
|
||||||
override fun isApplicable(jdiType: Type?): Boolean {
|
override fun isApplicable(jdiType: Type?): Boolean {
|
||||||
if (!super.isApplicable(jdiType)) return false
|
if (!super.isApplicable(jdiType)) return false
|
||||||
|
|
||||||
if (jdiType !is ReferenceType) return false
|
if (jdiType !is ReferenceType) return false
|
||||||
|
|
||||||
return jdiType.allFields().any { it.name().endsWith(JvmAbi.DELEGATED_PROPERTY_NAME_SUFFIX) }
|
if (!jdiType.isPrepared) {
|
||||||
|
LOG.info(notPreparedClassMessage(jdiType))
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return jdiType.allFields().any { it.name().endsWith(JvmAbi.DELEGATED_PROPERTY_NAME_SUFFIX) }
|
||||||
|
}
|
||||||
|
catch (notPrepared: ClassNotPreparedException) {
|
||||||
|
LOG.error(notPreparedClassMessage(jdiType), notPrepared)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun calcLabel(descriptor: ValueDescriptor,
|
override fun calcLabel(descriptor: ValueDescriptor,
|
||||||
|
|||||||
Reference in New Issue
Block a user