Light Classes: Navigate to KtFile from light class containing file

#KT-11689 Fixed
This commit is contained in:
Alexey Sedunov
2016-04-04 17:08:30 +03:00
parent eeac739f69
commit b8905645ae
4 changed files with 11 additions and 11 deletions
+1
View File
@@ -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
}
@@ -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