From 73cb94a3b2c430f24467529258fabebdef5e5d65 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 6 Nov 2015 14:19:05 +0300 Subject: [PATCH] FakeFileForLightClass: implement API correctly --- .../org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt | 6 ++---- .../kotlin/asJava/KtLightClassForExplicitDeclaration.kt | 8 ++++++-- .../org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt | 8 +++++--- 3 files changed, 13 insertions(+), 9 deletions(-) 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 3bb1ef352de..73b47976e0e 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/FakeFileForLightClass.kt @@ -34,8 +34,6 @@ package org.jetbrains.kotlin.asJava import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.ClassFileViewProvider -import com.intellij.psi.PsiClass -import com.intellij.psi.PsiElement import com.intellij.psi.PsiManager import com.intellij.psi.impl.compiled.ClsFileImpl import com.intellij.psi.stubs.PsiClassHolderFileStub @@ -45,14 +43,14 @@ open class FakeFileForLightClass( private val packageFqName: FqName, virtualFile: VirtualFile, psiManager: PsiManager, - private val lightClass: KtLightClass, + private val lightClass: () -> KtLightClass, private val stub: () -> PsiClassHolderFileStub<*> ) : ClsFileImpl(ClassFileViewProvider(psiManager, virtualFile)) { override fun getPackageName() = packageFqName.asString() override fun getStub() = stub() - override fun getClasses() = arrayOf(lightClass) + override fun getClasses() = arrayOf(lightClass()) override fun getNavigationElement() = this } \ 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 88b91ff4ea7..4d3ce6609eb 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt @@ -126,7 +126,7 @@ public open class KtLightClassForExplicitDeclaration( private val _parent: PsiElement? by lazy { if (classOrObject.isLocal()) getLocalClassParent() - else if (classOrObject.parent === classOrObject.containingFile) + else if (classOrObject.isTopLevel()) containingFile else containingClass @@ -178,7 +178,11 @@ public open class KtLightClassForExplicitDeclaration( val virtualFile = classOrObject.containingFile.virtualFile assert(virtualFile != null) { "No virtual file for " + classOrObject.text } - object : FakeFileForLightClass(classOrObject.getContainingKtFile().packageFqName, virtualFile, myManager, this, { getJavaFileStub() }) { + object : FakeFileForLightClass( + classOrObject.getContainingKtFile().packageFqName, virtualFile, myManager, + { if (classOrObject.isTopLevel()) this else create(getOutermostClassOrObject(classOrObject))!! }, + { getJavaFileStub() } + ) { override fun processDeclarations( processor: PsiScopeProcessor, state: ResolveState, 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 6f3ccb519fd..241de4a0ddb 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForFacade.kt @@ -87,9 +87,11 @@ public class KtLightClassForFacade private constructor( private val implementsList: LightEmptyImplementsList = LightEmptyImplementsList(manager) - private val packageClsFile = FakeFileForLightClass(packageFqName, files.first().virtualFile!!, myManager, this) { - lightClassDataCache.value.javaFileStub - } + private val packageClsFile = FakeFileForLightClass( + packageFqName, files.first().virtualFile!!, myManager, + lightClass = { this }, + stub = { lightClassDataCache.value.javaFileStub } + ) override fun getOrigin(): KtClassOrObject? = null