Get rid of BinarySource interface, use SourceElement instead

This commit is contained in:
Alexander Udalov
2016-04-06 16:44:26 +03:00
parent ad068ed4ac
commit 88106bb13b
9 changed files with 28 additions and 26 deletions
@@ -16,12 +16,13 @@
package org.jetbrains.kotlin.load.kotlin package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.SourceFile
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.kotlin.serialization.deserialization.descriptors.BinarySource
class JvmPackagePartSource(val className: JvmClassName, val facadeClassName: JvmClassName?) : BinarySource { class JvmPackagePartSource(val className: JvmClassName, val facadeClassName: JvmClassName?) : SourceElement {
constructor(kotlinClass: KotlinJvmBinaryClass) : this( constructor(kotlinClass: KotlinJvmBinaryClass) : this(
JvmClassName.byClassId(kotlinClass.classId), JvmClassName.byClassId(kotlinClass.classId),
kotlinClass.classHeader.multifileClassName?.let { kotlinClass.classHeader.multifileClassName?.let {
@@ -32,4 +33,8 @@ class JvmPackagePartSource(val className: JvmClassName, val facadeClassName: Jvm
val simpleName: Name get() = Name.identifier(className.internalName.substringAfterLast('/')) val simpleName: Name get() = Name.identifier(className.internalName.substringAfterLast('/'))
val classId: ClassId get() = ClassId(className.packageFqName, simpleName) val classId: ClassId get() = ClassId(className.packageFqName, simpleName)
override fun toString() = "${javaClass.simpleName}: $className"
override fun getContainingFile(): SourceFile = SourceFile.NO_SOURCE_FILE
} }
@@ -18,9 +18,8 @@ package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.SourceFile import org.jetbrains.kotlin.descriptors.SourceFile
import org.jetbrains.kotlin.serialization.deserialization.descriptors.BinarySource
class KotlinJvmBinarySourceElement(val binaryClass: KotlinJvmBinaryClass) : SourceElement, BinarySource { class KotlinJvmBinarySourceElement(val binaryClass: KotlinJvmBinaryClass) : SourceElement {
override fun toString() = javaClass.name + ": " + binaryClass.toString() override fun toString() = "${javaClass.simpleName}: $binaryClass"
override fun getContainingFile(): SourceFile = SourceFile.NO_SOURCE_FILE override fun getContainingFile(): SourceFile = SourceFile.NO_SOURCE_FILE
} }
@@ -17,22 +17,22 @@
package org.jetbrains.kotlin.serialization.deserialization package org.jetbrains.kotlin.serialization.deserialization
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.Flags import org.jetbrains.kotlin.serialization.Flags
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.descriptors.BinarySource
sealed class ProtoContainer( sealed class ProtoContainer(
val nameResolver: NameResolver, val nameResolver: NameResolver,
val typeTable: TypeTable, val typeTable: TypeTable,
val source: BinarySource? val source: SourceElement?
) { ) {
class Class( class Class(
val classProto: ProtoBuf.Class, val classProto: ProtoBuf.Class,
nameResolver: NameResolver, nameResolver: NameResolver,
typeTable: TypeTable, typeTable: TypeTable,
source: BinarySource?, source: SourceElement?,
val outerClassKind: ClassKind? val outerClassKind: ClassKind?
) : ProtoContainer(nameResolver, typeTable, source) { ) : ProtoContainer(nameResolver, typeTable, source) {
val classId: ClassId = nameResolver.getClassId(classProto.fqName) val classId: ClassId = nameResolver.getClassId(classProto.fqName)
@@ -47,7 +47,7 @@ sealed class ProtoContainer(
val fqName: FqName, val fqName: FqName,
nameResolver: NameResolver, nameResolver: NameResolver,
typeTable: TypeTable, typeTable: TypeTable,
source: BinarySource? source: SourceElement?
) : ProtoContainer(nameResolver, typeTable, source) { ) : ProtoContainer(nameResolver, typeTable, source) {
override fun debugFqName(): FqName = fqName override fun debugFqName(): FqName = fqName
} }
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.resolve.constants.ConstantValue import org.jetbrains.kotlin.resolve.constants.ConstantValue
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.descriptors.BinarySource
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
class DeserializationComponents( class DeserializationComponents(
@@ -49,7 +48,7 @@ class DeserializationComponents(
descriptor: PackageFragmentDescriptor, descriptor: PackageFragmentDescriptor,
nameResolver: NameResolver, nameResolver: NameResolver,
typeTable: TypeTable, typeTable: TypeTable,
containerSource: BinarySource? containerSource: SourceElement?
): DeserializationContext = ): DeserializationContext =
DeserializationContext(this, nameResolver, descriptor, typeTable, containerSource, DeserializationContext(this, nameResolver, descriptor, typeTable, containerSource,
parentTypeDeserializer = null, typeParameters = listOf()) parentTypeDeserializer = null, typeParameters = listOf())
@@ -61,7 +60,7 @@ class DeserializationContext(
val nameResolver: NameResolver, val nameResolver: NameResolver,
val containingDeclaration: DeclarationDescriptor, val containingDeclaration: DeclarationDescriptor,
val typeTable: TypeTable, val typeTable: TypeTable,
val containerSource: BinarySource?, val containerSource: SourceElement?,
parentTypeDeserializer: TypeDeserializer?, parentTypeDeserializer: TypeDeserializer?,
typeParameters: List<ProtoBuf.TypeParameter> typeParameters: List<ProtoBuf.TypeParameter>
) { ) {
@@ -36,11 +36,9 @@ interface DeserializedCallableMemberDescriptor : CallableMemberDescriptor {
val typeTable: TypeTable val typeTable: TypeTable
// Information about the origin of this callable's container (class or package part on JVM) or null if there's no such information. // Information about the origin of this callable's container (class or package part on JVM) or null if there's no such information.
val containerSource: BinarySource? val containerSource: SourceElement?
} }
interface BinarySource
class DeserializedSimpleFunctionDescriptor( class DeserializedSimpleFunctionDescriptor(
containingDeclaration: DeclarationDescriptor, containingDeclaration: DeclarationDescriptor,
original: SimpleFunctionDescriptor?, original: SimpleFunctionDescriptor?,
@@ -50,7 +48,7 @@ class DeserializedSimpleFunctionDescriptor(
override val proto: ProtoBuf.Function, override val proto: ProtoBuf.Function,
override val nameResolver: NameResolver, override val nameResolver: NameResolver,
override val typeTable: TypeTable, override val typeTable: TypeTable,
override val containerSource: BinarySource? override val containerSource: SourceElement?
) : DeserializedCallableMemberDescriptor, ) : DeserializedCallableMemberDescriptor,
SimpleFunctionDescriptorImpl(containingDeclaration, original, annotations, name, kind, SourceElement.NO_SOURCE) { SimpleFunctionDescriptorImpl(containingDeclaration, original, annotations, name, kind, SourceElement.NO_SOURCE) {
@@ -82,7 +80,7 @@ class DeserializedPropertyDescriptor(
override val proto: ProtoBuf.Property, override val proto: ProtoBuf.Property,
override val nameResolver: NameResolver, override val nameResolver: NameResolver,
override val typeTable: TypeTable, override val typeTable: TypeTable,
override val containerSource: BinarySource? override val containerSource: SourceElement?
) : DeserializedCallableMemberDescriptor, ) : DeserializedCallableMemberDescriptor,
PropertyDescriptorImpl(containingDeclaration, original, annotations, PropertyDescriptorImpl(containingDeclaration, original, annotations,
modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, isLateInit, isConst) { modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, isLateInit, isConst) {
@@ -110,7 +108,7 @@ class DeserializedConstructorDescriptor(
override val proto: ProtoBuf.Constructor, override val proto: ProtoBuf.Constructor,
override val nameResolver: NameResolver, override val nameResolver: NameResolver,
override val typeTable: TypeTable, override val typeTable: TypeTable,
override val containerSource: BinarySource? override val containerSource: SourceElement?
) : DeserializedCallableMemberDescriptor, ) : DeserializedCallableMemberDescriptor,
ConstructorDescriptorImpl(containingDeclaration, original, annotations, isPrimary, kind, SourceElement.NO_SOURCE) { ConstructorDescriptorImpl(containingDeclaration, original, annotations, isPrimary, kind, SourceElement.NO_SOURCE) {
@@ -74,7 +74,7 @@ class DeserializedClassDescriptor(
private val companionObjectDescriptor = c.storageManager.createNullableLazyValue { computeCompanionObjectDescriptor() } private val companionObjectDescriptor = c.storageManager.createNullableLazyValue { computeCompanionObjectDescriptor() }
internal val thisAsProtoContainer = ProtoContainer.Class( internal val thisAsProtoContainer = ProtoContainer.Class(
classProto, c.nameResolver, c.typeTable, sourceElement as? BinarySource, (containingDeclaration as? ClassDescriptor)?.kind classProto, c.nameResolver, c.typeTable, sourceElement, (containingDeclaration as? ClassDescriptor)?.kind
) )
private val annotations = private val annotations =
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.serialization.deserialization.descriptors
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -36,7 +37,7 @@ open class DeserializedPackageMemberScope(
packageDescriptor: PackageFragmentDescriptor, packageDescriptor: PackageFragmentDescriptor,
proto: ProtoBuf.Package, proto: ProtoBuf.Package,
nameResolver: NameResolver, nameResolver: NameResolver,
containerSource: BinarySource?, containerSource: SourceElement?,
components: DeserializationComponents, components: DeserializationComponents,
classNames: () -> Collection<Name> classNames: () -> Collection<Name>
) : DeserializedMemberScope( ) : DeserializedMemberScope(
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.stubs.StubElement import com.intellij.psi.stubs.StubElement
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.isNumberedFunctionClassFqName import org.jetbrains.kotlin.builtins.isNumberedFunctionClassFqName
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.* import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.*
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
@@ -37,14 +38,13 @@ import org.jetbrains.kotlin.psi.stubs.impl.KotlinPlaceHolderStubImpl
import org.jetbrains.kotlin.serialization.Flags import org.jetbrains.kotlin.serialization.Flags
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.BinarySource
fun createClassStub( fun createClassStub(
parent: StubElement<out PsiElement>, parent: StubElement<out PsiElement>,
classProto: ProtoBuf.Class, classProto: ProtoBuf.Class,
nameResolver: NameResolver, nameResolver: NameResolver,
classId: ClassId, classId: ClassId,
source: BinarySource?, source: SourceElement?,
context: ClsStubBuilderContext context: ClsStubBuilderContext
) { ) {
ClassClsStubBuilder(parent, classProto, nameResolver, classId, source, context).build() ClassClsStubBuilder(parent, classProto, nameResolver, classId, source, context).build()
@@ -55,7 +55,7 @@ private class ClassClsStubBuilder(
private val classProto: ProtoBuf.Class, private val classProto: ProtoBuf.Class,
private val nameResolver: NameResolver, private val nameResolver: NameResolver,
private val classId: ClassId, private val classId: ClassId,
private val source: BinarySource?, private val source: SourceElement?,
private val outerContext: ClsStubBuilderContext private val outerContext: ClsStubBuilderContext
) { ) {
private val classKind = Flags.CLASS_KIND[classProto.flags] private val classKind = Flags.CLASS_KIND[classProto.flags]
@@ -253,7 +253,7 @@ private class ClassClsStubBuilder(
return return
} }
val (nameResolver, classProto) = classDataWithSource.classData val (nameResolver, classProto) = classDataWithSource.classData
createClassStub(classBody, classProto, nameResolver, nestedClassId, classDataWithSource.sourceElement as? BinarySource, c) createClassStub(classBody, classProto, nameResolver, nestedClassId, classDataWithSource.sourceElement, c)
} }
companion object { companion object {
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.stubs.StubElement import com.intellij.psi.stubs.StubElement
import com.intellij.util.io.StringRef import com.intellij.util.io.StringRef
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.idea.stubindex.KotlinFileStubForIde import org.jetbrains.kotlin.idea.stubindex.KotlinFileStubForIde
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
@@ -40,13 +41,12 @@ import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.AnnotatedCallableKind import org.jetbrains.kotlin.serialization.deserialization.AnnotatedCallableKind
import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer
import org.jetbrains.kotlin.serialization.deserialization.TypeTable import org.jetbrains.kotlin.serialization.deserialization.TypeTable
import org.jetbrains.kotlin.serialization.deserialization.descriptors.BinarySource
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
fun createTopLevelClassStub( fun createTopLevelClassStub(
classId: ClassId, classId: ClassId,
classProto: ProtoBuf.Class, classProto: ProtoBuf.Class,
source: BinarySource?, source: SourceElement?,
context: ClsStubBuilderContext context: ClsStubBuilderContext
): KotlinFileStubImpl { ): KotlinFileStubImpl {
val fileStub = createFileStub(classId.packageFqName) val fileStub = createFileStub(classId.packageFqName)