Check if we are inside Kotlin in KotlinClassWithDelegatedPropertyRenderer

As 'isApplicable()' is called for Java classes as well, we spend too
  much time on calling 'allFields()' for deliberately unrelated classes.
This commit is contained in:
Yan Zhulanow
2020-04-22 19:25:06 +09:00
parent 0afd73b95c
commit 8fc403db94
2 changed files with 8 additions and 12 deletions
@@ -32,9 +32,12 @@ import org.jetbrains.kotlin.resolve.inline.InlineUtil
import java.util.*
fun Location.isInKotlinSources(): Boolean {
val declaringType = declaringType()
val fileExtension = declaringType.safeSourceName()?.substringAfterLast('.')?.toLowerCase() ?: ""
return fileExtension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS || declaringType.containsKotlinStrata()
return declaringType().isInKotlinSources()
}
fun ReferenceType.isInKotlinSources(): Boolean {
val fileExtension = safeSourceName()?.substringAfterLast('.')?.toLowerCase() ?: ""
return fileExtension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS || containsKotlinStrata()
}
fun ReferenceType.containsKotlinStrata() = availableStrata().contains(KOTLIN_STRATA_NAME)
@@ -19,9 +19,7 @@ import com.intellij.debugger.ui.tree.render.DescriptorLabelListener
import com.intellij.openapi.diagnostic.Logger
import com.intellij.xdebugger.settings.XDebuggerSettingsManager
import com.sun.jdi.*
import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerSettings
import org.jetbrains.kotlin.idea.debugger.ToggleKotlinVariablesState
import org.jetbrains.kotlin.idea.debugger.canRunEvaluation
import org.jetbrains.kotlin.idea.debugger.*
import org.jetbrains.kotlin.load.java.JvmAbi
import java.util.*
@@ -33,12 +31,7 @@ class KotlinClassWithDelegatedPropertyRenderer : ClassRenderer() {
private val rendererSettings = NodeRendererSettings.getInstance()
override fun isApplicable(jdiType: Type?): Boolean {
if (!super.isApplicable(jdiType)) return false
if (jdiType !is ReferenceType) return false
if (!jdiType.isPrepared) {
LOG.info(notPreparedClassMessage(jdiType))
if (!super.isApplicable(jdiType) || jdiType !is ReferenceType || !jdiType.isPrepared || !jdiType.isInKotlinSources()) {
return false
}