From b8905645aed5719221dd903e2174d2efbbbcc342 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 4 Apr 2016 17:08:30 +0300 Subject: [PATCH] Light Classes: Navigate to KtFile from light class containing file #KT-11689 Fixed --- ChangeLog.md | 1 + .../kotlin/asJava/FakeFileForLightClass.kt | 14 ++++++-------- .../asJava/KtLightClassForExplicitDeclaration.kt | 2 +- .../kotlin/asJava/KtLightClassForFacade.kt | 5 +++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index fa18732d055..3e35172282e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -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 diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt index 73b47976e0e..969f40a7d7a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt @@ -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 } \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt index 4ab006d3a9d..7b7d705625b 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt @@ -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() } ) { diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt index 4550e1da0e5..e60ea53672a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt @@ -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