Introduce ClassId.getShortClassName() for convenience

This commit is contained in:
Alexander Udalov
2015-03-18 17:57:41 +03:00
parent 9cf0720925
commit 31554b9fa3
6 changed files with 42 additions and 32 deletions
@@ -91,8 +91,8 @@ public class BuiltinsPackageFragment(
val classProto = ProtoBuf.Class.parseFrom(stream, extensionRegistry)
val expectedShortName = classId.getRelativeClassName().shortName()
val actualShortName = nameResolver.getClassId(classProto.getFqName()).getRelativeClassName().shortName()
val expectedShortName = classId.getShortClassName()
val actualShortName = nameResolver.getClassId(classProto.getFqName()).getShortClassName()
if (!actualShortName.isSpecial() && actualShortName != expectedShortName) {
// Workaround for case-insensitive file systems,
// otherwise we'd find "Collection" for "collection" etc
@@ -59,6 +59,11 @@ public final class ClassId {
return relativeClassName;
}
@NotNull
public Name getShortClassName() {
return relativeClassName.shortName();
}
public boolean isLocal() {
return local;
}
@@ -47,7 +47,7 @@ class KClassImpl<T>(override val jClass: Class<T>) : KCallableContainerImpl(), K
return when {
jClass.isAnonymousClass() -> null
classId.isLocal() -> calculateLocalClassName(jClass)
else -> classId.getRelativeClassName().shortName().asString()
else -> classId.getShortClassName().asString()
}
}
@@ -16,25 +16,28 @@
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.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.AbstractClassDescriptor
import org.jetbrains.kotlin.descriptors.impl.EnumEntrySyntheticClassDescriptor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorFactory
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.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.JetType
import org.jetbrains.kotlin.serialization.deserialization
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 java.util.*
import java.util.ArrayList
import java.util.HashSet
import java.util.LinkedHashSet
public class DeserializedClassDescriptor(
outerContext: DeserializationContext,
@@ -42,7 +45,7 @@ public class DeserializedClassDescriptor(
nameResolver: NameResolver
) : ClassDescriptor, AbstractClassDescriptor(
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 visibility = deserialization.visibility(Flags.VISIBILITY.get(classProto.getFlags()))
@@ -147,6 +147,6 @@ private class CallableClsStubBuilder(
private fun isProbablyNothing(callableProto: ProtoBuf.Callable): Boolean {
val constructor = callableProto.getReturnType().getConstructor()
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"
}
}
@@ -16,27 +16,29 @@
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 org.jetbrains.kotlin.psi.JetClassBody
import org.jetbrains.kotlin.psi.stubs.impl.KotlinPlaceHolderStubImpl
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
import org.jetbrains.kotlin.psi.JetParameterList
import com.intellij.psi.stubs.StubElement
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.FlagsToModifiers.INNER
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.psi.JetClassBody
import org.jetbrains.kotlin.psi.JetDelegationSpecifierList
import org.jetbrains.kotlin.psi.JetDelegatorToSuperClass
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer
import org.jetbrains.kotlin.psi.JetParameterList
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.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.idea.decompiler.stubBuilder.FlagsToModifiers.*
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer
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 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 classKind = Flags.CLASS_KIND[classProto.getFlags()]
private val supertypeIds = classProto.getSupertypeList().map {
@@ -102,12 +104,12 @@ private class ClassClsStubBuilder(
private fun doCreateClassOrObjectStub(): StubElement<out PsiElement> {
val isCompanionObject = classKind == ProtoBuf.Class.Kind.CLASS_OBJECT
val fqName = outerContext.containerFqName.child(classId.getRelativeClassName().shortName())
val shortName = fqName.shortName()?.ref()
val fqName = outerContext.containerFqName.child(classId.getShortClassName())
val shortName = fqName.shortName().ref()
val superTypeRefs = supertypeIds.filter {
//TODO: filtering function types should go away
!KotlinBuiltIns.isExactFunctionType(it.asSingleFqName()) && !KotlinBuiltIns.isExactExtensionFunctionType(it.asSingleFqName())
}.map { it.getRelativeClassName().shortName().ref() }.copyToArray()
}.map { it.getShortClassName().ref() }.copyToArray()
return when (classKind) {
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> {
KotlinObjectStubImpl(