diff --git a/compiler/psi/cls-psi-stub-builder/src/org/jetbrains/kotlin/psi/stubs/builder/clsStubBuilding.kt b/compiler/psi/cls-psi-stub-builder/src/org/jetbrains/kotlin/psi/stubs/builder/clsStubBuilding.kt index 972de379eb5..01a976e8610 100644 --- a/compiler/psi/cls-psi-stub-builder/src/org/jetbrains/kotlin/psi/stubs/builder/clsStubBuilding.kt +++ b/compiler/psi/cls-psi-stub-builder/src/org/jetbrains/kotlin/psi/stubs/builder/clsStubBuilding.kt @@ -8,7 +8,6 @@ import com.intellij.util.io.StringRef import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.psi.stubs.builder.flags.FlagsToModifiers -import org.jetbrains.kotlin.idea.stubindex.KotlinFileStubForIde import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass @@ -22,7 +21,6 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.protobuf.MessageLite import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.stubs.KotlinUserTypeStub -import org.jetbrains.kotlin.psi.stubs.builder.* import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.psi.stubs.impl.* import org.jetbrains.kotlin.resolve.jvm.JvmClassName @@ -46,7 +44,7 @@ fun createPackageFacadeStub( packageFqName: FqName, c: ClsStubBuilderContext ): KotlinFileStubImpl { - val fileStub = KotlinFileStubForIde.forFile(packageFqName, isScript = false) + val fileStub = KotlinFileStubImpl.forFile(packageFqName, isScript = false) setupFileStub(fileStub, packageFqName) createPackageDeclarationsStubs( fileStub, c, ProtoContainer.Package(packageFqName, c.nameResolver, c.typeTable, source = null), packageProto @@ -60,7 +58,7 @@ fun createFileFacadeStub( c: ClsStubBuilderContext ): KotlinFileStubImpl { val packageFqName = facadeFqName.parent() - val fileStub = KotlinFileStubForIde.forFileFacadeStub(facadeFqName) + val fileStub = KotlinFileStubImpl.forFileFacadeStub(facadeFqName) setupFileStub(fileStub, packageFqName) val container = ProtoContainer.Package( packageFqName, c.nameResolver, c.typeTable, @@ -78,7 +76,7 @@ fun createMultifileClassStub( ): KotlinFileStubImpl { val packageFqName = header.packageName?.let { FqName(it) } ?: facadeFqName.parent() val partNames = header.data?.asList()?.map { it.substringAfterLast('/') } - val fileStub = KotlinFileStubForIde.forMultifileClassStub(facadeFqName, partNames) + val fileStub = KotlinFileStubImpl.forMultifileClassStub(packageFqName, facadeFqName, partNames) setupFileStub(fileStub, packageFqName) for (partFile in partFiles) { val partHeader = partFile.classHeader @@ -96,7 +94,7 @@ fun createMultifileClassStub( fun createIncompatibleAbiVersionFileStub() = createFileStub(FqName.ROOT, isScript = false) fun createFileStub(packageFqName: FqName, isScript: Boolean): KotlinFileStubImpl { - val fileStub = KotlinFileStubForIde.forFile(packageFqName, isScript) + val fileStub = KotlinFileStubImpl.forFile(packageFqName, isScript) setupFileStub(fileStub, packageFqName) return fileStub } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/StubIndexService.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/StubIndexService.kt index 64315cfa257..76420e5f1c5 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/StubIndexService.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/elements/StubIndexService.kt @@ -67,7 +67,7 @@ open class StubIndexService protected constructor() { open fun deserializeFileStub(dataStream: StubInputStream): KotlinFileStub { val packageFqNameAsString = dataStream.readName() val isScript = dataStream.readBoolean() - return KotlinFileStubImpl(null, packageFqNameAsString!!, isScript) + return KotlinFileStubImpl(null, packageFqNameAsString!!.string, isScript) } companion object { diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinFileStubImpl.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinFileStubImpl.kt index 1a93db8ed15..009dd5bd592 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinFileStubImpl.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/impl/KotlinFileStubImpl.kt @@ -21,8 +21,8 @@ import com.intellij.psi.impl.java.stubs.PsiClassStub import com.intellij.psi.stubs.PsiClassHolderFileStub import com.intellij.psi.stubs.PsiFileStubImpl import com.intellij.psi.tree.IStubFileElementType -import com.intellij.util.io.StringRef import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.stubs.KotlinFileStub import org.jetbrains.kotlin.psi.stubs.KotlinImportAliasStub @@ -31,16 +31,33 @@ import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes.FILE import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes.IMPORT_LIST import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull -open class KotlinFileStubImpl( - jetFile: KtFile?, - private val packageName: StringRef, - private val isScript: Boolean -) : PsiFileStubImpl(jetFile), KotlinFileStub, PsiClassHolderFileStub { +class KotlinFileStubImpl( + ktFile: KtFile?, + private val packageName: String, + private val isScript: Boolean, + private val facadeFqNameString: String?, + val partSimpleName: String?, + val facadePartSimpleNames: List?, +) : PsiFileStubImpl(ktFile), KotlinFileStub, PsiClassHolderFileStub { - constructor(jetFile: KtFile?, packageName: String, isScript: Boolean) - : this(jetFile, StringRef.fromString(packageName)!!, isScript) + constructor(jetFile: KtFile?, packageName: String, isScript: Boolean) : this( + jetFile, + packageName, + isScript, + facadeFqNameString = null, + partSimpleName = null, + facadePartSimpleNames = null + ) - override fun getPackageFqName(): FqName = FqName(StringRef.toString(packageName)!!) + private fun String.relativeToPackage() = getPackageFqName().child(Name.identifier(this)) + + val partFqName: FqName? + get() = partSimpleName?.relativeToPackage() + + val facadeFqName: FqName? + get() = facadeFqNameString?.let(::FqName) + + override fun getPackageFqName(): FqName = FqName(packageName) override fun isScript(): Boolean = isScript override fun getType(): IStubFileElementType = FILE @@ -56,4 +73,34 @@ open class KotlinFileStubImpl( it.childrenStubs.firstIsInstanceOrNull()?.getName() == alias } } + + companion object { + fun forFile(packageFqName: FqName, isScript: Boolean): KotlinFileStubImpl = KotlinFileStubImpl( + ktFile = null, + packageName = packageFqName.asString(), + facadeFqNameString = null, + partSimpleName = null, + facadePartSimpleNames = null, + isScript = isScript + ) + + fun forFileFacadeStub(facadeFqName: FqName): KotlinFileStubImpl = KotlinFileStubImpl( + ktFile = null, + packageName = facadeFqName.parent().asString(), + facadeFqNameString = facadeFqName.asString(), + partSimpleName = facadeFqName.shortName().asString(), + facadePartSimpleNames = null, + isScript = false + ) + + fun forMultifileClassStub(packageFqName: FqName, facadeFqName: FqName, partNames: List?): KotlinFileStubImpl = + KotlinFileStubImpl( + ktFile = null, + packageName = packageFqName.asString(), + facadeFqNameString = facadeFqName.asString(), + partSimpleName = null, + facadePartSimpleNames = partNames, + isScript = false, + ) + } }