Introduce ClassId.getShortClassName() for convenience
This commit is contained in:
@@ -91,8 +91,8 @@ public class BuiltinsPackageFragment(
|
|||||||
|
|
||||||
val classProto = ProtoBuf.Class.parseFrom(stream, extensionRegistry)
|
val classProto = ProtoBuf.Class.parseFrom(stream, extensionRegistry)
|
||||||
|
|
||||||
val expectedShortName = classId.getRelativeClassName().shortName()
|
val expectedShortName = classId.getShortClassName()
|
||||||
val actualShortName = nameResolver.getClassId(classProto.getFqName()).getRelativeClassName().shortName()
|
val actualShortName = nameResolver.getClassId(classProto.getFqName()).getShortClassName()
|
||||||
if (!actualShortName.isSpecial() && actualShortName != expectedShortName) {
|
if (!actualShortName.isSpecial() && actualShortName != expectedShortName) {
|
||||||
// Workaround for case-insensitive file systems,
|
// Workaround for case-insensitive file systems,
|
||||||
// otherwise we'd find "Collection" for "collection" etc
|
// otherwise we'd find "Collection" for "collection" etc
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ public final class ClassId {
|
|||||||
return relativeClassName;
|
return relativeClassName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public Name getShortClassName() {
|
||||||
|
return relativeClassName.shortName();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isLocal() {
|
public boolean isLocal() {
|
||||||
return local;
|
return local;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class KClassImpl<T>(override val jClass: Class<T>) : KCallableContainerImpl(), K
|
|||||||
return when {
|
return when {
|
||||||
jClass.isAnonymousClass() -> null
|
jClass.isAnonymousClass() -> null
|
||||||
classId.isLocal() -> calculateLocalClassName(jClass)
|
classId.isLocal() -> calculateLocalClassName(jClass)
|
||||||
else -> classId.getRelativeClassName().shortName().asString()
|
else -> classId.getShortClassName().asString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-9
@@ -16,25 +16,28 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.serialization.deserialization.descriptors
|
package org.jetbrains.kotlin.serialization.deserialization.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.serialization.Flags
|
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.impl.AbstractClassDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.AbstractClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.impl.EnumEntrySyntheticClassDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.EnumEntrySyntheticClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
||||||
import org.jetbrains.kotlin.resolve.OverridingUtil
|
import org.jetbrains.kotlin.resolve.OverridingUtil
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.StaticScopeForKotlinClass
|
import org.jetbrains.kotlin.resolve.scopes.StaticScopeForKotlinClass
|
||||||
|
import org.jetbrains.kotlin.serialization.Flags
|
||||||
|
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializationContext
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
||||||
import org.jetbrains.kotlin.types.AbstractClassTypeConstructor
|
import org.jetbrains.kotlin.types.AbstractClassTypeConstructor
|
||||||
import org.jetbrains.kotlin.types.JetType
|
import org.jetbrains.kotlin.types.JetType
|
||||||
import org.jetbrains.kotlin.serialization.deserialization
|
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
|
||||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||||
import java.util.*
|
import java.util.ArrayList
|
||||||
|
import java.util.HashSet
|
||||||
|
import java.util.LinkedHashSet
|
||||||
|
|
||||||
public class DeserializedClassDescriptor(
|
public class DeserializedClassDescriptor(
|
||||||
outerContext: DeserializationContext,
|
outerContext: DeserializationContext,
|
||||||
@@ -42,7 +45,7 @@ public class DeserializedClassDescriptor(
|
|||||||
nameResolver: NameResolver
|
nameResolver: NameResolver
|
||||||
) : ClassDescriptor, AbstractClassDescriptor(
|
) : ClassDescriptor, AbstractClassDescriptor(
|
||||||
outerContext.storageManager,
|
outerContext.storageManager,
|
||||||
nameResolver.getClassId(classProto.getFqName()).getRelativeClassName().shortName()
|
nameResolver.getClassId(classProto.getFqName()).getShortClassName()
|
||||||
) {
|
) {
|
||||||
private val modality = deserialization.modality(Flags.MODALITY.get(classProto.getFlags()))
|
private val modality = deserialization.modality(Flags.MODALITY.get(classProto.getFlags()))
|
||||||
private val visibility = deserialization.visibility(Flags.VISIBILITY.get(classProto.getFlags()))
|
private val visibility = deserialization.visibility(Flags.VISIBILITY.get(classProto.getFlags()))
|
||||||
|
|||||||
+1
-1
@@ -147,6 +147,6 @@ private class CallableClsStubBuilder(
|
|||||||
private fun isProbablyNothing(callableProto: ProtoBuf.Callable): Boolean {
|
private fun isProbablyNothing(callableProto: ProtoBuf.Callable): Boolean {
|
||||||
val constructor = callableProto.getReturnType().getConstructor()
|
val constructor = callableProto.getReturnType().getConstructor()
|
||||||
return constructor.getKind() == ProtoBuf.Type.Constructor.Kind.CLASS &&
|
return constructor.getKind() == ProtoBuf.Type.Constructor.Kind.CLASS &&
|
||||||
c.nameResolver.getClassId(constructor.getId()).getRelativeClassName().shortName().asString() == "Nothing"
|
c.nameResolver.getClassId(constructor.getId()).getShortClassName().asString() == "Nothing"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-19
@@ -16,27 +16,29 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.decompiler.stubBuilder
|
package org.jetbrains.kotlin.idea.decompiler.stubBuilder
|
||||||
|
|
||||||
import com.intellij.psi.stubs.StubElement
|
|
||||||
import org.jetbrains.kotlin.serialization.Flags
|
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
|
||||||
import org.jetbrains.kotlin.psi.stubs.elements.JetClassElementType
|
|
||||||
import org.jetbrains.kotlin.psi.stubs.impl.KotlinClassStubImpl
|
|
||||||
import org.jetbrains.kotlin.psi.stubs.impl.KotlinObjectStubImpl
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.psi.JetClassBody
|
import com.intellij.psi.stubs.StubElement
|
||||||
import org.jetbrains.kotlin.psi.stubs.impl.KotlinPlaceHolderStubImpl
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
|
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.INNER
|
||||||
import org.jetbrains.kotlin.psi.JetParameterList
|
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.MODALITY
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.VISIBILITY
|
||||||
|
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken
|
||||||
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.psi.JetClassBody
|
||||||
import org.jetbrains.kotlin.psi.JetDelegationSpecifierList
|
import org.jetbrains.kotlin.psi.JetDelegationSpecifierList
|
||||||
import org.jetbrains.kotlin.psi.JetDelegatorToSuperClass
|
import org.jetbrains.kotlin.psi.JetDelegatorToSuperClass
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.psi.JetParameterList
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer
|
import org.jetbrains.kotlin.psi.stubs.elements.JetClassElementType
|
||||||
|
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
|
||||||
|
import org.jetbrains.kotlin.psi.stubs.impl.KotlinClassStubImpl
|
||||||
import org.jetbrains.kotlin.psi.stubs.impl.KotlinModifierListStubImpl
|
import org.jetbrains.kotlin.psi.stubs.impl.KotlinModifierListStubImpl
|
||||||
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken
|
import org.jetbrains.kotlin.psi.stubs.impl.KotlinObjectStubImpl
|
||||||
|
import org.jetbrains.kotlin.psi.stubs.impl.KotlinPlaceHolderStubImpl
|
||||||
|
import org.jetbrains.kotlin.serialization.Flags
|
||||||
|
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf.Type
|
import org.jetbrains.kotlin.serialization.ProtoBuf.Type
|
||||||
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.*
|
import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
|
|
||||||
|
|
||||||
fun createClassStub(parent: StubElement<out PsiElement>, classProto: ProtoBuf.Class, classId: ClassId, context: ClsStubBuilderContext) {
|
fun createClassStub(parent: StubElement<out PsiElement>, classProto: ProtoBuf.Class, classId: ClassId, context: ClsStubBuilderContext) {
|
||||||
@@ -49,7 +51,7 @@ private class ClassClsStubBuilder(
|
|||||||
private val classId: ClassId,
|
private val classId: ClassId,
|
||||||
private val outerContext: ClsStubBuilderContext
|
private val outerContext: ClsStubBuilderContext
|
||||||
) {
|
) {
|
||||||
private val c = outerContext.child(classProto.getTypeParameterList(), classId.getRelativeClassName().shortName())
|
private val c = outerContext.child(classProto.getTypeParameterList(), classId.getShortClassName())
|
||||||
private val typeStubBuilder = TypeClsStubBuilder(c)
|
private val typeStubBuilder = TypeClsStubBuilder(c)
|
||||||
private val classKind = Flags.CLASS_KIND[classProto.getFlags()]
|
private val classKind = Flags.CLASS_KIND[classProto.getFlags()]
|
||||||
private val supertypeIds = classProto.getSupertypeList().map {
|
private val supertypeIds = classProto.getSupertypeList().map {
|
||||||
@@ -102,12 +104,12 @@ private class ClassClsStubBuilder(
|
|||||||
|
|
||||||
private fun doCreateClassOrObjectStub(): StubElement<out PsiElement> {
|
private fun doCreateClassOrObjectStub(): StubElement<out PsiElement> {
|
||||||
val isCompanionObject = classKind == ProtoBuf.Class.Kind.CLASS_OBJECT
|
val isCompanionObject = classKind == ProtoBuf.Class.Kind.CLASS_OBJECT
|
||||||
val fqName = outerContext.containerFqName.child(classId.getRelativeClassName().shortName())
|
val fqName = outerContext.containerFqName.child(classId.getShortClassName())
|
||||||
val shortName = fqName.shortName()?.ref()
|
val shortName = fqName.shortName().ref()
|
||||||
val superTypeRefs = supertypeIds.filter {
|
val superTypeRefs = supertypeIds.filter {
|
||||||
//TODO: filtering function types should go away
|
//TODO: filtering function types should go away
|
||||||
!KotlinBuiltIns.isExactFunctionType(it.asSingleFqName()) && !KotlinBuiltIns.isExactExtensionFunctionType(it.asSingleFqName())
|
!KotlinBuiltIns.isExactFunctionType(it.asSingleFqName()) && !KotlinBuiltIns.isExactExtensionFunctionType(it.asSingleFqName())
|
||||||
}.map { it.getRelativeClassName().shortName().ref() }.copyToArray()
|
}.map { it.getShortClassName().ref() }.copyToArray()
|
||||||
return when (classKind) {
|
return when (classKind) {
|
||||||
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> {
|
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> {
|
||||||
KotlinObjectStubImpl(
|
KotlinObjectStubImpl(
|
||||||
|
|||||||
Reference in New Issue
Block a user