Early exit from getSourcePosition() for non-kotlin source files
This commit is contained in:
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.io.FileUtilRt
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.idea.KotlinFileTypeFactory
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||
@@ -59,8 +60,7 @@ object DebuggerUtils {
|
||||
scopes: List<GlobalSearchScope>,
|
||||
className: JvmClassName,
|
||||
fileName: String): KtFile? {
|
||||
val extension = FileUtilRt.getExtension(fileName)
|
||||
if (extension !in KotlinFileTypeFactory.KOTLIN_EXTENSIONS) return null
|
||||
if (!isKotlinSourceFile(fileName)) return null
|
||||
if (DumbService.getInstance(project).isDumb) return null
|
||||
|
||||
val filesWithExactName = scopes.findFirstNotEmpty { findFilesByNameInPackage(className, fileName, project, it) } ?: return null
|
||||
@@ -133,6 +133,11 @@ object DebuggerUtils {
|
||||
return analyzedElements
|
||||
}
|
||||
|
||||
fun isKotlinSourceFile(fileName: String): Boolean {
|
||||
val extension = FileUtilRt.getExtension(fileName).toLowerCase()
|
||||
return extension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS
|
||||
}
|
||||
|
||||
private fun analyzeElementWithInline(
|
||||
resolutionFacade: ResolutionFacade,
|
||||
element: KtElement,
|
||||
|
||||
@@ -77,6 +77,9 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq
|
||||
override fun getSourcePosition(location: Location?): SourcePosition? {
|
||||
if (location == null) throw NoDataException.INSTANCE
|
||||
|
||||
val fileName = location.safeSourceName ?: throw NoDataException.INSTANCE
|
||||
if (!DebuggerUtils.isKotlinSourceFile(fileName)) throw NoDataException.INSTANCE
|
||||
|
||||
val psiFile = getPsiFileByLocation(location)
|
||||
if (psiFile == null) {
|
||||
val isKotlinStrataAvailable = location.declaringType().containsKotlinStrata()
|
||||
@@ -184,17 +187,20 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq
|
||||
return null
|
||||
}
|
||||
|
||||
private fun getPsiFileByLocation(location: Location): PsiFile? {
|
||||
val sourceName: String
|
||||
try {
|
||||
sourceName = location.sourceName()
|
||||
private val Location.safeSourceName: String? get() {
|
||||
return try {
|
||||
sourceName()
|
||||
}
|
||||
catch (e: AbsentInformationException) {
|
||||
return null
|
||||
null
|
||||
}
|
||||
catch (e: InternalError) {
|
||||
return null
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPsiFileByLocation(location: Location): PsiFile? {
|
||||
val sourceName = location.safeSourceName ?: return null
|
||||
|
||||
val referenceInternalName = try {
|
||||
if (location.declaringType().containsKotlinStrata()) {
|
||||
|
||||
@@ -19,11 +19,9 @@ package org.jetbrains.kotlin.idea.filters
|
||||
import com.intellij.execution.filters.*
|
||||
import com.intellij.execution.filters.impl.HyperlinkInfoFactoryImpl
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.io.FileUtilRt
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.FilenameIndex
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.idea.KotlinFileTypeFactory
|
||||
import org.jetbrains.kotlin.idea.debugger.*
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import java.util.*
|
||||
@@ -59,8 +57,7 @@ class KotlinExceptionFilter(private val searchScope: GlobalSearchScope) : Filter
|
||||
|
||||
val fileName = stackTraceElement.fileName
|
||||
|
||||
val extension = FileUtilRt.getExtension(fileName).toLowerCase()
|
||||
if (extension !in KotlinFileTypeFactory.KOTLIN_EXTENSIONS) return null
|
||||
if (!DebuggerUtils.isKotlinSourceFile(fileName)) return null
|
||||
|
||||
// fullyQualifiedName is of format "package.Class$Inner"
|
||||
val fullyQualifiedName = stackTraceElement.className
|
||||
|
||||
Reference in New Issue
Block a user