From 31554b9fa3b7fc654703723d02ff7f4cd9299578 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 18 Mar 2015 17:57:41 +0300 Subject: [PATCH] Introduce ClassId.getShortClassName() for convenience --- .../builtins/BuiltinsPackageFragment.kt | 4 +- .../org/jetbrains/kotlin/name/ClassId.java | 5 +++ .../kotlin/reflect/jvm/internal/KClassImpl.kt | 2 +- .../DeserializedClassDescriptor.kt | 21 +++++----- .../stubBuilder/CallableClsStubBuilder.kt | 2 +- .../stubBuilder/ClassClsStubBuilder.kt | 40 ++++++++++--------- 6 files changed, 42 insertions(+), 32 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt index 4ff19090d5b..9f67707baf3 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt @@ -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 diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java b/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java index 13f1a00dae5..1d618ed2d62 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java @@ -59,6 +59,11 @@ public final class ClassId { return relativeClassName; } + @NotNull + public Name getShortClassName() { + return relativeClassName.shortName(); + } + public boolean isLocal() { return local; } diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index 845b98b6c23..6af91c90280 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -47,7 +47,7 @@ class KClassImpl(override val jClass: Class) : KCallableContainerImpl(), K return when { jClass.isAnonymousClass() -> null classId.isLocal() -> calculateLocalClassName(jClass) - else -> classId.getRelativeClassName().shortName().asString() + else -> classId.getShortClassName().asString() } } diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index 456036da6e1..8732a436b4f 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -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())) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt index 5658b176f38..6103a6d6e46 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt @@ -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" } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt index f0032689b4e..e43c42fc564 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt @@ -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, 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 { 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(