Debugger: Do not calculate default source file if an alternative one is available
This commit is contained in:
+8
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user