Minor: Fix formatting in DebuggerClassNameProvider

This commit is contained in:
Yan Zhulanow
2019-03-05 21:32:36 +03:00
parent d0a61fa7e2
commit fd3fab5bcc
@@ -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
} }