JetPositionManager: return kotlin package class for JetClsFile with linenumber -1

This commit is contained in:
Natalia Ukhorskaya
2015-05-14 13:11:47 +03:00
parent f0c55c98f2
commit 37cca22538
@@ -27,6 +27,7 @@ import com.intellij.openapi.project.DumbService
import com.intellij.openapi.roots.libraries.LibraryUtil
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.compiled.ClsFileImpl
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.*
import com.sun.jdi.AbsentInformationException
@@ -44,11 +45,13 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyzeAndGetResult
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
import org.jetbrains.kotlin.idea.decompiler.JetClsFile
import org.jetbrains.kotlin.idea.findUsages.toSearchTarget
import org.jetbrains.kotlin.idea.search.usagesSearch.DefaultSearchHelper
import org.jetbrains.kotlin.idea.search.usagesSearch.search
import org.jetbrains.kotlin.idea.util.DebuggerUtils
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.*
@@ -169,15 +172,25 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
}
override fun getAllClasses(sourcePosition: SourcePosition): List<ReferenceType> {
if (sourcePosition.getFile() !is JetFile) {
throw NoDataException.INSTANCE
val psiFile = sourcePosition.getFile()
if (psiFile is JetFile) {
val names = classNameForPositionAndInlinedOnes(sourcePosition)
val result = ArrayList<ReferenceType>()
for (name in names) {
result.addAll(myDebugProcess.getVirtualMachineProxy().classesByName(name))
}
return result
}
val names = classNameForPositionAndInlinedOnes(sourcePosition)
val result = ArrayList<ReferenceType>()
for (name in names) {
result.addAll(myDebugProcess.getVirtualMachineProxy().classesByName(name))
if (psiFile is ClsFileImpl) {
val decompiledPsiFile = psiFile.getDecompiledPsiFile()
if (decompiledPsiFile is JetClsFile && sourcePosition.getLine() == -1) {
val className = PackageClassUtils.getPackageClassInternalName(decompiledPsiFile.getPackageFqName())
return myDebugProcess.getVirtualMachineProxy().classesByName(className)
}
}
return result
throw NoDataException.INSTANCE
}
private fun classNameForPositionAndInlinedOnes(sourcePosition: SourcePosition): List<String> {