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.* import java.util.*
fun Location.isInKotlinSources(): Boolean { fun Location.isInKotlinSources(): Boolean {
val declaringType = declaringType() return declaringType().isInKotlinSources()
val fileExtension = declaringType.safeSourceName()?.substringAfterLast('.')?.toLowerCase() ?: "" }
return fileExtension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS || declaringType.containsKotlinStrata()
fun ReferenceType.isInKotlinSources(): Boolean {
val fileExtension = safeSourceName()?.substringAfterLast('.')?.toLowerCase() ?: ""
return fileExtension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS || containsKotlinStrata()
} }
fun ReferenceType.containsKotlinStrata() = availableStrata().contains(KOTLIN_STRATA_NAME) 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.openapi.diagnostic.Logger
import com.intellij.xdebugger.settings.XDebuggerSettingsManager import com.intellij.xdebugger.settings.XDebuggerSettingsManager
import com.sun.jdi.* import com.sun.jdi.*
import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerSettings import org.jetbrains.kotlin.idea.debugger.*
import org.jetbrains.kotlin.idea.debugger.ToggleKotlinVariablesState
import org.jetbrains.kotlin.idea.debugger.canRunEvaluation
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
import java.util.* import java.util.*
@@ -33,12 +31,7 @@ class KotlinClassWithDelegatedPropertyRenderer : ClassRenderer() {
private val rendererSettings = NodeRendererSettings.getInstance() private val rendererSettings = NodeRendererSettings.getInstance()
override fun isApplicable(jdiType: Type?): Boolean { override fun isApplicable(jdiType: Type?): Boolean {
if (!super.isApplicable(jdiType)) return false if (!super.isApplicable(jdiType) || jdiType !is ReferenceType || !jdiType.isPrepared || !jdiType.isInKotlinSources()) {
if (jdiType !is ReferenceType) return false
if (!jdiType.isPrepared) {
LOG.info(notPreparedClassMessage(jdiType))
return false return false
} }