Remove unnecessary fields in DeserializedClassDescriptor
This commit is contained in:
@@ -39,5 +39,5 @@ abstract class NonReportingOverrideStrategy : OverridingStrategy() {
|
|||||||
conflict(first, second)
|
conflict(first, second)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun conflict(first: CallableMemberDescriptor, second: CallableMemberDescriptor)
|
protected abstract fun conflict(fromSuper: CallableMemberDescriptor, fromCurrent: CallableMemberDescriptor)
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-32
@@ -36,7 +36,6 @@ import org.jetbrains.kotlin.serialization.deserialization.*
|
|||||||
import org.jetbrains.kotlin.types.AbstractClassTypeConstructor
|
import org.jetbrains.kotlin.types.AbstractClassTypeConstructor
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeConstructor
|
import org.jetbrains.kotlin.types.TypeConstructor
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
|
||||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||||
import org.jetbrains.kotlin.utils.toReadOnlyList
|
import org.jetbrains.kotlin.utils.toReadOnlyList
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -52,20 +51,14 @@ class DeserializedClassDescriptor(
|
|||||||
) {
|
) {
|
||||||
private val modality = Deserialization.modality(Flags.MODALITY.get(classProto.flags))
|
private val modality = Deserialization.modality(Flags.MODALITY.get(classProto.flags))
|
||||||
private val visibility = Deserialization.visibility(Flags.VISIBILITY.get(classProto.flags))
|
private val visibility = Deserialization.visibility(Flags.VISIBILITY.get(classProto.flags))
|
||||||
private val kindFromProto = Flags.CLASS_KIND.get(classProto.flags)
|
private val kind = Deserialization.classKind(Flags.CLASS_KIND.get(classProto.flags))
|
||||||
private val kind = Deserialization.classKind(kindFromProto)
|
|
||||||
private val isCompanion = kindFromProto == ProtoBuf.Class.Kind.COMPANION_OBJECT
|
|
||||||
private val isInner = Flags.IS_INNER.get(classProto.flags)
|
|
||||||
private val isData = Flags.IS_DATA.get(classProto.flags)
|
|
||||||
|
|
||||||
val c = outerContext.childContext(this, classProto.typeParameterList, nameResolver, TypeTable(classProto.typeTable))
|
val c = outerContext.childContext(this, classProto.typeParameterList, nameResolver, TypeTable(classProto.typeTable))
|
||||||
|
|
||||||
private val classId = nameResolver.getClassId(classProto.fqName)
|
|
||||||
|
|
||||||
private val staticScope = if (kind == ClassKind.ENUM_CLASS) StaticScopeForKotlinEnum(c.storageManager, this) else MemberScope.Empty
|
private val staticScope = if (kind == ClassKind.ENUM_CLASS) StaticScopeForKotlinEnum(c.storageManager, this) else MemberScope.Empty
|
||||||
private val typeConstructor = DeserializedClassTypeConstructor()
|
private val typeConstructor = DeserializedClassTypeConstructor()
|
||||||
private val memberScope = DeserializedClassMemberScope()
|
private val memberScope = DeserializedClassMemberScope()
|
||||||
private val nestedClasses = NestedClassDescriptors()
|
private val nestedClasses = if (classProto.nestedClassNameCount > 0) NestedClassDescriptors() else null
|
||||||
private val enumEntries = if (kind == ClassKind.ENUM_CLASS) EnumEntryClassDescriptors() else null
|
private val enumEntries = if (kind == ClassKind.ENUM_CLASS) EnumEntryClassDescriptors() else null
|
||||||
|
|
||||||
private val containingDeclaration = outerContext.containingDeclaration
|
private val containingDeclaration = outerContext.containingDeclaration
|
||||||
@@ -96,9 +89,9 @@ class DeserializedClassDescriptor(
|
|||||||
|
|
||||||
override fun getVisibility() = visibility
|
override fun getVisibility() = visibility
|
||||||
|
|
||||||
override fun isInner() = isInner
|
override fun isInner() = Flags.IS_INNER.get(classProto.flags)
|
||||||
|
|
||||||
override fun isData() = isData
|
override fun isData() = Flags.IS_DATA.get(classProto.flags)
|
||||||
|
|
||||||
override fun getAnnotations() = annotations
|
override fun getAnnotations() = annotations
|
||||||
|
|
||||||
@@ -106,7 +99,7 @@ class DeserializedClassDescriptor(
|
|||||||
|
|
||||||
override fun getStaticScope() = staticScope
|
override fun getStaticScope() = staticScope
|
||||||
|
|
||||||
override fun isCompanionObject(): Boolean = isCompanion
|
override fun isCompanionObject(): Boolean = Flags.CLASS_KIND.get(classProto.flags) == ProtoBuf.Class.Kind.COMPANION_OBJECT
|
||||||
|
|
||||||
private fun computePrimaryConstructor(): ConstructorDescriptor? {
|
private fun computePrimaryConstructor(): ConstructorDescriptor? {
|
||||||
if (kind.isSingleton) {
|
if (kind.isSingleton) {
|
||||||
@@ -141,9 +134,8 @@ class DeserializedClassDescriptor(
|
|||||||
|
|
||||||
override fun getCompanionObjectDescriptor(): ClassDescriptor? = companionObjectDescriptor()
|
override fun getCompanionObjectDescriptor(): ClassDescriptor? = companionObjectDescriptor()
|
||||||
|
|
||||||
|
|
||||||
internal fun hasNestedClass(name: Name): Boolean {
|
internal fun hasNestedClass(name: Name): Boolean {
|
||||||
return name in nestedClasses.nestedClassNames
|
return nestedClasses != null && name in nestedClasses.nestedClassNames
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString() = "deserialized class ${getName().toString()}" // not using descriptor render to preserve laziness
|
override fun toString() = "deserialized class ${getName().toString()}" // not using descriptor render to preserve laziness
|
||||||
@@ -249,10 +241,10 @@ class DeserializedClassDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassDescriptor(name: Name): ClassifierDescriptor? =
|
override fun getClassDescriptor(name: Name): ClassifierDescriptor? =
|
||||||
classDescriptor.enumEntries?.findEnumEntry(name) ?: classDescriptor.nestedClasses.findNestedClass(name)
|
classDescriptor.enumEntries?.findEnumEntry(name) ?: classDescriptor.nestedClasses?.findNestedClass(name)
|
||||||
|
|
||||||
override fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
override fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
||||||
result.addAll(classDescriptor.nestedClasses.all())
|
result.addAll(classDescriptor.nestedClasses?.all().orEmpty())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
||||||
@@ -261,9 +253,11 @@ class DeserializedClassDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private inner class NestedClassDescriptors {
|
private inner class NestedClassDescriptors {
|
||||||
internal val nestedClassNames = nestedClassNames()
|
private val classId = c.nameResolver.getClassId(classProto.fqName)
|
||||||
|
|
||||||
internal val findNestedClass = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
internal val nestedClassNames = classProto.nestedClassNameList.map { c.nameResolver.getName(it) }.toSet()
|
||||||
|
|
||||||
|
private val nestedClassByName = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
||||||
name ->
|
name ->
|
||||||
if (name in nestedClassNames) {
|
if (name in nestedClassNames) {
|
||||||
c.components.deserializeClass(classId.createNestedClassId(name))
|
c.components.deserializeClass(classId.createNestedClassId(name))
|
||||||
@@ -271,26 +265,16 @@ class DeserializedClassDescriptor(
|
|||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun nestedClassNames(): Set<Name> {
|
fun findNestedClass(name: Name): ClassDescriptor? = nestedClassByName(name)
|
||||||
val result = LinkedHashSet<Name>()
|
|
||||||
val nameResolver = c.nameResolver
|
|
||||||
for (index in classProto.nestedClassNameList) {
|
|
||||||
result.add(nameResolver.getName(index!!))
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
fun all(): Collection<ClassDescriptor> {
|
fun all(): Collection<ClassDescriptor> =
|
||||||
val result = ArrayList<ClassDescriptor>(nestedClassNames.size)
|
nestedClassNames.mapNotNull { name -> nestedClassByName(name) }
|
||||||
nestedClassNames.forEach { name -> result.addIfNotNull(findNestedClass(name)) }
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class EnumEntryClassDescriptors {
|
private inner class EnumEntryClassDescriptors {
|
||||||
private val enumEntryProtos = classProto.enumEntryList.associateBy { c.nameResolver.getName(it.name) }
|
private val enumEntryProtos = classProto.enumEntryList.associateBy { c.nameResolver.getName(it.name) }
|
||||||
|
|
||||||
val enumEntryByName = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
private val enumEntryByName = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
||||||
name ->
|
name ->
|
||||||
|
|
||||||
enumEntryProtos[name]?.let { proto ->
|
enumEntryProtos[name]?.let { proto ->
|
||||||
|
|||||||
Reference in New Issue
Block a user