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.VirtualFile
|
||||||
import com.intellij.openapi.vfs.VirtualFileManager
|
import com.intellij.openapi.vfs.VirtualFileManager
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
|
import com.intellij.psi.PsiManager
|
||||||
import com.intellij.psi.impl.compiled.ClsFileImpl
|
import com.intellij.psi.impl.compiled.ClsFileImpl
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
@@ -108,9 +109,7 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq
|
|||||||
|
|
||||||
if (!DebuggerUtils.isKotlinSourceFile(fileName)) throw NoDataException.INSTANCE
|
if (!DebuggerUtils.isKotlinSourceFile(fileName)) throw NoDataException.INSTANCE
|
||||||
|
|
||||||
val psiFile = getPsiFileByLocation(location)?.let {
|
val psiFile = getAlternativeSource(location) ?: getPsiFileByLocation(location)
|
||||||
replaceWithAlternativeSource(it, location)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (psiFile == null) {
|
if (psiFile == null) {
|
||||||
val isKotlinStrataAvailable = location.declaringType().containsKotlinStrata()
|
val isKotlinStrataAvailable = location.declaringType().containsKotlinStrata()
|
||||||
@@ -186,15 +185,12 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq
|
|||||||
|
|
||||||
class KotlinReentrantSourcePosition(delegate: SourcePosition) : DelegateSourcePosition(delegate)
|
class KotlinReentrantSourcePosition(delegate: SourcePosition) : DelegateSourcePosition(delegate)
|
||||||
|
|
||||||
private fun replaceWithAlternativeSource(psiFile: PsiFile, location: Location): PsiFile {
|
private fun getAlternativeSource(location: Location): PsiFile? {
|
||||||
fun findAlternativeSource(): PsiFile? {
|
val manager = PsiManager.getInstance(myDebugProcess.project)
|
||||||
val qName = location.declaringType().name()
|
val qName = location.declaringType().name()
|
||||||
val alternativeFileUrl = DebuggerUtilsEx.getAlternativeSourceUrl(qName, myDebugProcess.project) ?: return null
|
val alternativeFileUrl = DebuggerUtilsEx.getAlternativeSourceUrl(qName, myDebugProcess.project) ?: return null
|
||||||
val alternativePsiFile = VirtualFileManager.getInstance().findFileByUrl(alternativeFileUrl) ?: return null
|
val alternativePsiFile = VirtualFileManager.getInstance().findFileByUrl(alternativeFileUrl) ?: return null
|
||||||
return psiFile.manager.findFile(alternativePsiFile)
|
return manager.findFile(alternativePsiFile)
|
||||||
}
|
|
||||||
|
|
||||||
return findAlternativeSource() ?: psiFile
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a property or a constructor if debugger stops at class declaration
|
// Returns a property or a constructor if debugger stops at class declaration
|
||||||
|
|||||||
Reference in New Issue
Block a user