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) - 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 - 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-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 #### Debugger
@@ -32,25 +32,23 @@
package org.jetbrains.kotlin.asJava package org.jetbrains.kotlin.asJava
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.ClassFileViewProvider import com.intellij.psi.ClassFileViewProvider
import com.intellij.psi.PsiManager
import com.intellij.psi.impl.compiled.ClsFileImpl import com.intellij.psi.impl.compiled.ClsFileImpl
import com.intellij.psi.stubs.PsiClassHolderFileStub import com.intellij.psi.stubs.PsiClassHolderFileStub
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
open class FakeFileForLightClass( open class FakeFileForLightClass(
private val packageFqName: FqName, private val ktFile: KtFile,
virtualFile: VirtualFile,
psiManager: PsiManager,
private val lightClass: () -> KtLightClass, private val lightClass: () -> KtLightClass,
private val stub: () -> PsiClassHolderFileStub<*> private val stub: () -> PsiClassHolderFileStub<*>,
) : ClsFileImpl(ClassFileViewProvider(psiManager, virtualFile)) { private val packageFqName: FqName = ktFile.packageFqName
) : ClsFileImpl(ClassFileViewProvider(ktFile.manager, ktFile.virtualFile)) {
override fun getPackageName() = packageFqName.asString() override fun getPackageName() = packageFqName.asString()
override fun getStub() = stub() override fun getStub() = stub()
override fun getClasses() = arrayOf(lightClass()) 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 } assert(virtualFile != null) { "No virtual file for " + classOrObject.text }
object : FakeFileForLightClass( object : FakeFileForLightClass(
classOrObject.getContainingKtFile().packageFqName, virtualFile, myManager, classOrObject.getContainingKtFile(),
{ if (classOrObject.isTopLevel()) this else create(getOutermostClassOrObject(classOrObject))!! }, { if (classOrObject.isTopLevel()) this else create(getOutermostClassOrObject(classOrObject))!! },
{ getJavaFileStub() } { getJavaFileStub() }
) { ) {
@@ -88,9 +88,10 @@ class KtLightClassForFacade private constructor(
LightEmptyImplementsList(manager) LightEmptyImplementsList(manager)
private val packageClsFile = FakeFileForLightClass( private val packageClsFile = FakeFileForLightClass(
packageFqName, files.first().virtualFile!!, myManager, files.first(),
lightClass = { this }, lightClass = { this },
stub = { lightClassDataCache.value.javaFileStub } stub = { lightClassDataCache.value.javaFileStub },
packageFqName = packageFqName
) )
override val kotlinOrigin: KtClassOrObject? get() = null override val kotlinOrigin: KtClassOrObject? get() = null