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