Merge KotlinFileStubImpl and KotlinFileStubForIde into KotlinFileStubImpl
as the only difference is additional fields in KotlinFileStubForIde
This commit is contained in:
+4
-6
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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<KtFile>(jetFile), KotlinFileStub, PsiClassHolderFileStub<KtFile> {
|
||||
class KotlinFileStubImpl(
|
||||
ktFile: KtFile?,
|
||||
private val packageName: String,
|
||||
private val isScript: Boolean,
|
||||
private val facadeFqNameString: String?,
|
||||
val partSimpleName: String?,
|
||||
val facadePartSimpleNames: List<String>?,
|
||||
) : PsiFileStubImpl<KtFile>(ktFile), KotlinFileStub, PsiClassHolderFileStub<KtFile> {
|
||||
|
||||
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<KotlinFileStub> = FILE
|
||||
|
||||
@@ -56,4 +73,34 @@ open class KotlinFileStubImpl(
|
||||
it.childrenStubs.firstIsInstanceOrNull<KotlinImportAliasStub>()?.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<String>?): KotlinFileStubImpl =
|
||||
KotlinFileStubImpl(
|
||||
ktFile = null,
|
||||
packageName = packageFqName.asString(),
|
||||
facadeFqNameString = facadeFqName.asString(),
|
||||
partSimpleName = null,
|
||||
facadePartSimpleNames = partNames,
|
||||
isScript = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user