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.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
import org.jetbrains.kotlin.psi.stubs.builder.flags.FlagsToModifiers
|
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.lexer.KtModifierKeywordToken
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
|
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.protobuf.MessageLite
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.stubs.KotlinUserTypeStub
|
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.elements.KtStubElementTypes
|
||||||
import org.jetbrains.kotlin.psi.stubs.impl.*
|
import org.jetbrains.kotlin.psi.stubs.impl.*
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
@@ -46,7 +44,7 @@ fun createPackageFacadeStub(
|
|||||||
packageFqName: FqName,
|
packageFqName: FqName,
|
||||||
c: ClsStubBuilderContext
|
c: ClsStubBuilderContext
|
||||||
): KotlinFileStubImpl {
|
): KotlinFileStubImpl {
|
||||||
val fileStub = KotlinFileStubForIde.forFile(packageFqName, isScript = false)
|
val fileStub = KotlinFileStubImpl.forFile(packageFqName, isScript = false)
|
||||||
setupFileStub(fileStub, packageFqName)
|
setupFileStub(fileStub, packageFqName)
|
||||||
createPackageDeclarationsStubs(
|
createPackageDeclarationsStubs(
|
||||||
fileStub, c, ProtoContainer.Package(packageFqName, c.nameResolver, c.typeTable, source = null), packageProto
|
fileStub, c, ProtoContainer.Package(packageFqName, c.nameResolver, c.typeTable, source = null), packageProto
|
||||||
@@ -60,7 +58,7 @@ fun createFileFacadeStub(
|
|||||||
c: ClsStubBuilderContext
|
c: ClsStubBuilderContext
|
||||||
): KotlinFileStubImpl {
|
): KotlinFileStubImpl {
|
||||||
val packageFqName = facadeFqName.parent()
|
val packageFqName = facadeFqName.parent()
|
||||||
val fileStub = KotlinFileStubForIde.forFileFacadeStub(facadeFqName)
|
val fileStub = KotlinFileStubImpl.forFileFacadeStub(facadeFqName)
|
||||||
setupFileStub(fileStub, packageFqName)
|
setupFileStub(fileStub, packageFqName)
|
||||||
val container = ProtoContainer.Package(
|
val container = ProtoContainer.Package(
|
||||||
packageFqName, c.nameResolver, c.typeTable,
|
packageFqName, c.nameResolver, c.typeTable,
|
||||||
@@ -78,7 +76,7 @@ fun createMultifileClassStub(
|
|||||||
): KotlinFileStubImpl {
|
): KotlinFileStubImpl {
|
||||||
val packageFqName = header.packageName?.let { FqName(it) } ?: facadeFqName.parent()
|
val packageFqName = header.packageName?.let { FqName(it) } ?: facadeFqName.parent()
|
||||||
val partNames = header.data?.asList()?.map { it.substringAfterLast('/') }
|
val partNames = header.data?.asList()?.map { it.substringAfterLast('/') }
|
||||||
val fileStub = KotlinFileStubForIde.forMultifileClassStub(facadeFqName, partNames)
|
val fileStub = KotlinFileStubImpl.forMultifileClassStub(packageFqName, facadeFqName, partNames)
|
||||||
setupFileStub(fileStub, packageFqName)
|
setupFileStub(fileStub, packageFqName)
|
||||||
for (partFile in partFiles) {
|
for (partFile in partFiles) {
|
||||||
val partHeader = partFile.classHeader
|
val partHeader = partFile.classHeader
|
||||||
@@ -96,7 +94,7 @@ fun createMultifileClassStub(
|
|||||||
fun createIncompatibleAbiVersionFileStub() = createFileStub(FqName.ROOT, isScript = false)
|
fun createIncompatibleAbiVersionFileStub() = createFileStub(FqName.ROOT, isScript = false)
|
||||||
|
|
||||||
fun createFileStub(packageFqName: FqName, isScript: Boolean): KotlinFileStubImpl {
|
fun createFileStub(packageFqName: FqName, isScript: Boolean): KotlinFileStubImpl {
|
||||||
val fileStub = KotlinFileStubForIde.forFile(packageFqName, isScript)
|
val fileStub = KotlinFileStubImpl.forFile(packageFqName, isScript)
|
||||||
setupFileStub(fileStub, packageFqName)
|
setupFileStub(fileStub, packageFqName)
|
||||||
return fileStub
|
return fileStub
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ open class StubIndexService protected constructor() {
|
|||||||
open fun deserializeFileStub(dataStream: StubInputStream): KotlinFileStub {
|
open fun deserializeFileStub(dataStream: StubInputStream): KotlinFileStub {
|
||||||
val packageFqNameAsString = dataStream.readName()
|
val packageFqNameAsString = dataStream.readName()
|
||||||
val isScript = dataStream.readBoolean()
|
val isScript = dataStream.readBoolean()
|
||||||
return KotlinFileStubImpl(null, packageFqNameAsString!!, isScript)
|
return KotlinFileStubImpl(null, packageFqNameAsString!!.string, isScript)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
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.PsiClassHolderFileStub
|
||||||
import com.intellij.psi.stubs.PsiFileStubImpl
|
import com.intellij.psi.stubs.PsiFileStubImpl
|
||||||
import com.intellij.psi.tree.IStubFileElementType
|
import com.intellij.psi.tree.IStubFileElementType
|
||||||
import com.intellij.util.io.StringRef
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.stubs.KotlinFileStub
|
import org.jetbrains.kotlin.psi.stubs.KotlinFileStub
|
||||||
import org.jetbrains.kotlin.psi.stubs.KotlinImportAliasStub
|
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.psi.stubs.elements.KtStubElementTypes.IMPORT_LIST
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
|
|
||||||
open class KotlinFileStubImpl(
|
class KotlinFileStubImpl(
|
||||||
jetFile: KtFile?,
|
ktFile: KtFile?,
|
||||||
private val packageName: StringRef,
|
private val packageName: String,
|
||||||
private val isScript: Boolean
|
private val isScript: Boolean,
|
||||||
) : PsiFileStubImpl<KtFile>(jetFile), KotlinFileStub, PsiClassHolderFileStub<KtFile> {
|
private val facadeFqNameString: String?,
|
||||||
|
val partSimpleName: String?,
|
||||||
|
val facadePartSimpleNames: List<String>?,
|
||||||
|
) : PsiFileStubImpl<KtFile>(ktFile), KotlinFileStub, PsiClassHolderFileStub<KtFile> {
|
||||||
|
|
||||||
constructor(jetFile: KtFile?, packageName: String, isScript: Boolean)
|
constructor(jetFile: KtFile?, packageName: String, isScript: Boolean) : this(
|
||||||
: this(jetFile, StringRef.fromString(packageName)!!, isScript)
|
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 isScript(): Boolean = isScript
|
||||||
override fun getType(): IStubFileElementType<KotlinFileStub> = FILE
|
override fun getType(): IStubFileElementType<KotlinFileStub> = FILE
|
||||||
|
|
||||||
@@ -56,4 +73,34 @@ open class KotlinFileStubImpl(
|
|||||||
it.childrenStubs.firstIsInstanceOrNull<KotlinImportAliasStub>()?.getName() == alias
|
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