Light Classes: Navigate to KtFile from light class containing file
#KT-11689 Fixed
This commit is contained in:
@@ -161,6 +161,7 @@ Issues fixed:
|
||||
- Fix several issues leading to exceptions: [KT-11579](https://youtrack.jetbrains.com/issue/KT-11579), [KT-11580](https://youtrack.jetbrains.com/issue/KT-11580)
|
||||
- Fixed NoSuchFieldException in Kotlin module settings on IDEA Ultimate
|
||||
- [KT-11702](https://youtrack.jetbrains.com/issue/KT-11702) Fixed resolution of Kotlin beans with custom name
|
||||
- [KT-11689](https://youtrack.jetbrains.com/issue/KT-11689) Fixed exception on attempt to navigate to Kotlin file from Spring notification balloon
|
||||
|
||||
#### Debugger
|
||||
|
||||
|
||||
@@ -32,25 +32,23 @@
|
||||
|
||||
package org.jetbrains.kotlin.asJava
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.ClassFileViewProvider
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.impl.compiled.ClsFileImpl
|
||||
import com.intellij.psi.stubs.PsiClassHolderFileStub
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
open class FakeFileForLightClass(
|
||||
private val packageFqName: FqName,
|
||||
virtualFile: VirtualFile,
|
||||
psiManager: PsiManager,
|
||||
private val ktFile: KtFile,
|
||||
private val lightClass: () -> KtLightClass,
|
||||
private val stub: () -> PsiClassHolderFileStub<*>
|
||||
) : ClsFileImpl(ClassFileViewProvider(psiManager, virtualFile)) {
|
||||
private val stub: () -> PsiClassHolderFileStub<*>,
|
||||
private val packageFqName: FqName = ktFile.packageFqName
|
||||
) : ClsFileImpl(ClassFileViewProvider(ktFile.manager, ktFile.virtualFile)) {
|
||||
override fun getPackageName() = packageFqName.asString()
|
||||
|
||||
override fun getStub() = stub()
|
||||
|
||||
override fun getClasses() = arrayOf(lightClass())
|
||||
|
||||
override fun getNavigationElement() = this
|
||||
override fun getNavigationElement() = ktFile
|
||||
}
|
||||
+1
-1
@@ -181,7 +181,7 @@ open class KtLightClassForExplicitDeclaration(
|
||||
assert(virtualFile != null) { "No virtual file for " + classOrObject.text }
|
||||
|
||||
object : FakeFileForLightClass(
|
||||
classOrObject.getContainingKtFile().packageFqName, virtualFile, myManager,
|
||||
classOrObject.getContainingKtFile(),
|
||||
{ if (classOrObject.isTopLevel()) this else create(getOutermostClassOrObject(classOrObject))!! },
|
||||
{ getJavaFileStub() }
|
||||
) {
|
||||
|
||||
@@ -88,9 +88,10 @@ class KtLightClassForFacade private constructor(
|
||||
LightEmptyImplementsList(manager)
|
||||
|
||||
private val packageClsFile = FakeFileForLightClass(
|
||||
packageFqName, files.first().virtualFile!!, myManager,
|
||||
files.first(),
|
||||
lightClass = { this },
|
||||
stub = { lightClassDataCache.value.javaFileStub }
|
||||
stub = { lightClassDataCache.value.javaFileStub },
|
||||
packageFqName = packageFqName
|
||||
)
|
||||
|
||||
override val kotlinOrigin: KtClassOrObject? get() = null
|
||||
|
||||
Reference in New Issue
Block a user