Debugger: Do not calculate default source file if an alternative one is available

This commit is contained in:
Yan Zhulanow
2019-06-27 21:58:54 +09:00
parent d45bbaabcd
commit 8f20f0b963
@@ -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