Minor: Fix formatting in DebuggerClassNameProvider
This commit is contained in:
@@ -48,18 +48,19 @@ import org.jetbrains.org.objectweb.asm.Type
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class DebuggerClassNameProvider(
|
class DebuggerClassNameProvider(
|
||||||
private val debugProcess: DebugProcess,
|
private val debugProcess: DebugProcess,
|
||||||
val findInlineUseSites: Boolean = true,
|
val findInlineUseSites: Boolean = true,
|
||||||
val alwaysReturnLambdaParentClass: Boolean = true
|
val alwaysReturnLambdaParentClass: Boolean = true
|
||||||
) {
|
) {
|
||||||
companion object {
|
companion object {
|
||||||
internal val CLASS_ELEMENT_TYPES = arrayOf<Class<out PsiElement>>(
|
private val CLASS_ELEMENT_TYPES = arrayOf<Class<out PsiElement>>(
|
||||||
KtFile::class.java,
|
KtFile::class.java,
|
||||||
KtClassOrObject::class.java,
|
KtClassOrObject::class.java,
|
||||||
KtProperty::class.java,
|
KtProperty::class.java,
|
||||||
KtNamedFunction::class.java,
|
KtNamedFunction::class.java,
|
||||||
KtFunctionLiteral::class.java,
|
KtFunctionLiteral::class.java,
|
||||||
KtAnonymousInitializer::class.java)
|
KtAnonymousInitializer::class.java
|
||||||
|
)
|
||||||
|
|
||||||
internal fun getRelevantElement(element: PsiElement?): PsiElement? {
|
internal fun getRelevantElement(element: PsiElement?): PsiElement? {
|
||||||
if (element == null) {
|
if (element == null) {
|
||||||
@@ -82,12 +83,12 @@ class DebuggerClassNameProvider(
|
|||||||
/**
|
/**
|
||||||
* Returns classes in which the given line number *is* present.
|
* Returns classes in which the given line number *is* present.
|
||||||
*/
|
*/
|
||||||
fun getClassesForPosition(position: SourcePosition): List<ReferenceType> = with (debugProcess) {
|
fun getClassesForPosition(position: SourcePosition): List<ReferenceType> = with(debugProcess) {
|
||||||
val lineNumber = runReadAction { position.line }
|
val lineNumber = runReadAction { position.line }
|
||||||
|
|
||||||
return doGetClassesForPosition(position)
|
return doGetClassesForPosition(position)
|
||||||
.flatMap { className -> virtualMachineProxy.classesByName(className) }
|
.flatMap { className -> virtualMachineProxy.classesByName(className) }
|
||||||
.flatMap { referenceType -> findTargetClasses(referenceType, lineNumber) }
|
.flatMap { referenceType -> findTargetClasses(referenceType, lineNumber) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,7 +128,7 @@ class DebuggerClassNameProvider(
|
|||||||
}
|
}
|
||||||
is KtFile -> {
|
is KtFile -> {
|
||||||
val fileClassName = runReadAction { JvmFileClassUtil.getFileClassInternalName(element) }.toJdiName()
|
val fileClassName = runReadAction { JvmFileClassUtil.getFileClassInternalName(element) }.toJdiName()
|
||||||
ComputedClassNames.Cached(fileClassName)
|
Cached(fileClassName)
|
||||||
}
|
}
|
||||||
is KtClassOrObject -> {
|
is KtClassOrObject -> {
|
||||||
val enclosingElementForLocal = runReadAction { KtPsiUtil.getEnclosingElementForLocalDeclaration(element) }
|
val enclosingElementForLocal = runReadAction { KtPsiUtil.getEnclosingElementForLocalDeclaration(element) }
|
||||||
@@ -139,17 +140,16 @@ class DebuggerClassNameProvider(
|
|||||||
getOuterClassNamesForElement(element.relevantParentInReadAction)
|
getOuterClassNamesForElement(element.relevantParentInReadAction)
|
||||||
else ->
|
else ->
|
||||||
// Guaranteed to be non-local class or object
|
// Guaranteed to be non-local class or object
|
||||||
element.readAction {
|
element.readAction { _ ->
|
||||||
if (it is KtClass && runReadAction { it.isInterface() }) {
|
if (element is KtClass && runReadAction { element.isInterface() }) {
|
||||||
val name = getNameForNonLocalClass(it)
|
val name = getNameForNonLocalClass(element)
|
||||||
|
|
||||||
if (name != null)
|
if (name != null)
|
||||||
Cached(listOf(name, name + JvmAbi.DEFAULT_IMPLS_SUFFIX))
|
Cached(listOf(name, name + JvmAbi.DEFAULT_IMPLS_SUFFIX))
|
||||||
else
|
else
|
||||||
ComputedClassNames.EMPTY
|
EMPTY
|
||||||
}
|
} else {
|
||||||
else {
|
getNameForNonLocalClass(element)?.let { Cached(it) } ?: EMPTY
|
||||||
getNameForNonLocalClass(it)?.let { ComputedClassNames.Cached(it) } ?: ComputedClassNames.EMPTY
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -158,14 +158,12 @@ class DebuggerClassNameProvider(
|
|||||||
val nonInlineClasses = if (runReadAction { element.isTopLevel }) {
|
val nonInlineClasses = if (runReadAction { element.isTopLevel }) {
|
||||||
// Top level property
|
// Top level property
|
||||||
getOuterClassNamesForElement(element.relevantParentInReadAction)
|
getOuterClassNamesForElement(element.relevantParentInReadAction)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
val enclosingElementForLocal = runReadAction { KtPsiUtil.getEnclosingElementForLocalDeclaration(element) }
|
val enclosingElementForLocal = runReadAction { KtPsiUtil.getEnclosingElementForLocalDeclaration(element) }
|
||||||
if (enclosingElementForLocal != null) {
|
if (enclosingElementForLocal != null) {
|
||||||
// Local class
|
// Local class
|
||||||
getOuterClassNamesForElement(enclosingElementForLocal)
|
getOuterClassNamesForElement(enclosingElementForLocal)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
val containingClassOrFile = runReadAction {
|
val containingClassOrFile = runReadAction {
|
||||||
PsiTreeUtil.getParentOfType(element, KtFile::class.java, KtClassOrObject::class.java)
|
PsiTreeUtil.getParentOfType(element, KtFile::class.java, KtClassOrObject::class.java)
|
||||||
}
|
}
|
||||||
@@ -174,23 +172,20 @@ class DebuggerClassNameProvider(
|
|||||||
// Properties from the companion object can be placed in the companion object's containing class
|
// Properties from the companion object can be placed in the companion object's containing class
|
||||||
(getOuterClassNamesForElement(containingClassOrFile.relevantParentInReadAction) +
|
(getOuterClassNamesForElement(containingClassOrFile.relevantParentInReadAction) +
|
||||||
getOuterClassNamesForElement(containingClassOrFile)).distinct()
|
getOuterClassNamesForElement(containingClassOrFile)).distinct()
|
||||||
}
|
} else if (containingClassOrFile != null) {
|
||||||
else if (containingClassOrFile != null) {
|
|
||||||
getOuterClassNamesForElement(containingClassOrFile)
|
getOuterClassNamesForElement(containingClassOrFile)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
getOuterClassNamesForElement(element.relevantParentInReadAction)
|
getOuterClassNamesForElement(element.relevantParentInReadAction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (findInlineUseSites && (
|
if (findInlineUseSites && (
|
||||||
element.isInlineInReadAction ||
|
element.isInlineInReadAction ||
|
||||||
runReadAction { element.accessors.any { it.hasModifier(KtTokens.INLINE_KEYWORD) } })
|
runReadAction { element.accessors.any { it.hasModifier(KtTokens.INLINE_KEYWORD) } })
|
||||||
) {
|
) {
|
||||||
nonInlineClasses + inlineUsagesSearcher.findInlinedCalls(element) { this.getOuterClassNamesForElement(it) }
|
nonInlineClasses + inlineUsagesSearcher.findInlinedCalls(element) { this.getOuterClassNamesForElement(it) }
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return NonCached(nonInlineClasses.classNames)
|
return NonCached(nonInlineClasses.classNames)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -237,10 +232,10 @@ class DebuggerClassNameProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!alwaysReturnLambdaParentClass && !InlineUtil.isInlinedArgument(element, typeMapper.bindingContext, true)) {
|
if (!alwaysReturnLambdaParentClass && !InlineUtil.isInlinedArgument(element, typeMapper.bindingContext, true)) {
|
||||||
return ComputedClassNames.Cached(nonInlinedLambdaClassName)
|
return Cached(nonInlinedLambdaClassName)
|
||||||
}
|
}
|
||||||
|
|
||||||
ComputedClassNames.Cached(nonInlinedLambdaClassName) + getOuterClassNamesForElement(element.relevantParentInReadAction)
|
Cached(nonInlinedLambdaClassName) + getOuterClassNamesForElement(element.relevantParentInReadAction)
|
||||||
}
|
}
|
||||||
else -> getOuterClassNamesForElement(element.relevantParentInReadAction)
|
else -> getOuterClassNamesForElement(element.relevantParentInReadAction)
|
||||||
}
|
}
|
||||||
@@ -336,8 +331,8 @@ private fun DebugProcess.findTargetClasses(outerClass: ReferenceType, lineAt: In
|
|||||||
for (nested in nestedTypes) {
|
for (nested in nestedTypes) {
|
||||||
targetClasses += findTargetClasses(nested, lineAt)
|
targetClasses += findTargetClasses(nested, lineAt)
|
||||||
}
|
}
|
||||||
|
} catch (_: AbsentInformationException) {
|
||||||
}
|
}
|
||||||
catch (_: AbsentInformationException) {}
|
|
||||||
|
|
||||||
return targetClasses
|
return targetClasses
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user