From 8f20f0b963869cdb6e038b1595c3584877d49d05 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 27 Jun 2019 21:58:54 +0900 Subject: [PATCH] Debugger: Do not calculate default source file if an alternative one is available --- .../idea/debugger/KotlinPositionManager.kt | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt index 40dc33ecf23..c214a109dde 100644 --- a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt +++ b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt @@ -33,6 +33,7 @@ import com.intellij.openapi.util.Computable import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiFile +import com.intellij.psi.PsiManager import com.intellij.psi.impl.compiled.ClsFileImpl import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope @@ -108,9 +109,7 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq if (!DebuggerUtils.isKotlinSourceFile(fileName)) throw NoDataException.INSTANCE - val psiFile = getPsiFileByLocation(location)?.let { - replaceWithAlternativeSource(it, location) - } + val psiFile = getAlternativeSource(location) ?: getPsiFileByLocation(location) if (psiFile == null) { val isKotlinStrataAvailable = location.declaringType().containsKotlinStrata() @@ -186,15 +185,12 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq class KotlinReentrantSourcePosition(delegate: SourcePosition) : DelegateSourcePosition(delegate) - private fun replaceWithAlternativeSource(psiFile: PsiFile, location: Location): PsiFile { - fun findAlternativeSource(): PsiFile? { - val qName = location.declaringType().name() - val alternativeFileUrl = DebuggerUtilsEx.getAlternativeSourceUrl(qName, myDebugProcess.project) ?: return null - val alternativePsiFile = VirtualFileManager.getInstance().findFileByUrl(alternativeFileUrl) ?: return null - return psiFile.manager.findFile(alternativePsiFile) - } - - return findAlternativeSource() ?: psiFile + private fun getAlternativeSource(location: Location): PsiFile? { + val manager = PsiManager.getInstance(myDebugProcess.project) + val qName = location.declaringType().name() + val alternativeFileUrl = DebuggerUtilsEx.getAlternativeSourceUrl(qName, myDebugProcess.project) ?: return null + val alternativePsiFile = VirtualFileManager.getInstance().findFileByUrl(alternativeFileUrl) ?: return null + return manager.findFile(alternativePsiFile) } // Returns a property or a constructor if debugger stops at class declaration