From 9a041136f237cc76504dbdc107a7b4c32072fb62 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 18 Mar 2015 18:20:09 +0300 Subject: [PATCH] Make ClassId's relative class name FqName instead of FqNameUnsafe It was FqNameUnsafe in times when there were classes without identifier names, specifically class objects with names like '' --- .../codegen/inline/InlineCodegenUtil.java | 6 +-- .../kotlin/load/java/JavaClassFinderImpl.java | 5 +- .../load/kotlin/FileBasedKotlinClass.java | 3 +- .../kotlin/VirtualFileKotlinClassFinder.kt | 4 +- .../jetbrains/kotlin/resolve/TypeResolver.kt | 34 +++++++------ .../LazyJavaAnnotationDescriptor.kt | 31 ++++++------ .../structure/reflect/reflectStructureUtil.kt | 5 +- .../org/jetbrains/kotlin/name/ClassId.java | 14 +++--- .../deserialization/NameResolver.java | 3 +- .../deserialization/ProtoContainer.kt | 13 ++--- .../stubBuilder/ClassClsStubBuilder.kt | 5 +- .../stubBuilder/TypeClsStubBuilder.kt | 49 +++++++------------ .../decompiler/stubBuilder/clsStubBuilding.kt | 2 +- .../vfilefinder/KotlinClassFileIndex.java | 2 +- .../DecompiledTextConsistencyTest.kt | 30 ++++++------ 15 files changed, 94 insertions(+), 112 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java index b78445b5df3..d63a4b4815e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java @@ -37,7 +37,7 @@ import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder; import org.jetbrains.kotlin.name.ClassId; -import org.jetbrains.kotlin.name.FqNameUnsafe; +import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; @@ -150,7 +150,7 @@ public class InlineCodegenUtil { @NotNull public static VirtualFile getVirtualFileForCallable(@NotNull ClassId containerClassId, @NotNull GenerationState state) { VirtualFileFinder fileFinder = VirtualFileFinder.SERVICE.getInstance(state.getProject()); - VirtualFile file = fileFinder.findVirtualFileWithHeader(containerClassId.asSingleFqName().toSafe()); + VirtualFile file = fileFinder.findVirtualFileWithHeader(containerClassId.asSingleFqName()); if (file == null) { throw new IllegalStateException("Couldn't find declaration file for " + containerClassId); } @@ -193,7 +193,7 @@ public class InlineCodegenUtil { if (containerDescriptor instanceof ClassDescriptor) { ClassId classId = DescriptorUtilPackage.getClassId((ClassDescriptor) containerDescriptor); if (isTrait(containerDescriptor)) { - FqNameUnsafe relativeClassName = classId.getRelativeClassName(); + FqName relativeClassName = classId.getRelativeClassName(); //TODO test nested trait fun inlining classId = new ClassId(classId.getPackageFqName(), Name.identifier(relativeClassName.shortName().asString() + JvmAbi.TRAIT_IMPL_SUFFIX)); } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/JavaClassFinderImpl.java b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/JavaClassFinderImpl.java index 149e9cd36c5..51bcaabda62 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/JavaClassFinderImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/JavaClassFinderImpl.java @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl; import org.jetbrains.kotlin.load.java.structure.impl.JavaPackageImpl; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; -import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.resolve.jvm.JavaClassFinderPostConstruct; import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade; @@ -87,14 +86,14 @@ public class JavaClassFinderImpl implements JavaClassFinder { @Nullable @Override public JavaClass findClass(@NotNull ClassId classId) { - FqNameUnsafe fqName = classId.asSingleFqName(); + FqName fqName = classId.asSingleFqName(); PsiClass psiClass = javaFacade.findClass(fqName.asString(), javaSearchScope); if (psiClass == null) return null; JavaClassImpl javaClass = new JavaClassImpl(psiClass); - if (!fqName.equalsTo(javaClass.getFqName())) { + if (!fqName.equals(javaClass.getFqName())) { throw new IllegalStateException("Requested " + fqName + ", got " + javaClass.getFqName()); } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java index 50d992661be..b0f6c2c5f7e 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/FileBasedKotlinClass.java @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader; import org.jetbrains.kotlin.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; -import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.name.Name; import org.jetbrains.org.objectweb.asm.ClassReader; import org.jetbrains.org.objectweb.asm.ClassVisitor; @@ -288,7 +287,7 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass { Collections.reverse(classes); FqName packageFqName = outermostClassFqName.parent(); - FqNameUnsafe relativeClassName = FqNameUnsafe.fromSegments(classes); + FqName relativeClassName = FqName.fromSegments(classes); return new ClassId(packageFqName, relativeClassName, local); } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClassFinder.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClassFinder.kt index 37ac419c3e3..bad7b566f93 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClassFinder.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/VirtualFileKotlinClassFinder.kt @@ -18,12 +18,12 @@ package org.jetbrains.kotlin.load.kotlin import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl -import org.jetbrains.kotlin.utils.sure import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.utils.sure public abstract class VirtualFileKotlinClassFinder : VirtualFileFinder { override fun findKotlinClass(classId: ClassId): KotlinJvmBinaryClass? { - val file = findVirtualFileWithHeader(classId.asSingleFqName().toSafe()) ?: return null + val file = findVirtualFileWithHeader(classId.asSingleFqName()) ?: return null return KotlinBinaryClassCache.getKotlinBinaryClass(file) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt index 7c30329da55..56127026b76 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt @@ -16,27 +16,31 @@ package org.jetbrains.kotlin.resolve -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.context.TypeLazinessToken +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassifierDescriptor +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.codeFragmentUtil.debugTypeInfo +import org.jetbrains.kotlin.psi.debugText.getDebugText +import org.jetbrains.kotlin.resolve.PossiblyBareType.type +import org.jetbrains.kotlin.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider +import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil +import org.jetbrains.kotlin.resolve.lazy.LazyEntity import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter -import org.jetbrains.kotlin.types.* -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.storage.LockBasedStorageManager - -import org.jetbrains.kotlin.diagnostics.Errors.* -import org.jetbrains.kotlin.resolve.PossiblyBareType.type -import org.jetbrains.kotlin.types.Variance.* -import org.jetbrains.kotlin.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider -import kotlin.platform.platformStatic import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.context.TypeLazinessToken -import org.jetbrains.kotlin.resolve.lazy.LazyEntity -import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil +import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.Variance.INVARIANT +import org.jetbrains.kotlin.types.Variance.IN_VARIANCE +import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull -import org.jetbrains.kotlin.psi.debugText.getDebugText -import org.jetbrains.kotlin.psi.codeFragmentUtil.debugTypeInfo +import kotlin.platform.platformStatic public class TypeResolver( private val annotationResolver: AnnotationResolver, @@ -175,7 +179,7 @@ public class TypeResolver( result = type(ErrorUtils.createErrorTypeWithArguments("" + typeConstructor, arguments)) } else { - if (Flexibility.FLEXIBLE_TYPE_CLASSIFIER.asSingleFqName() == DescriptorUtils.getFqName(classifierDescriptor) + if (Flexibility.FLEXIBLE_TYPE_CLASSIFIER.asSingleFqName().toUnsafe() == DescriptorUtils.getFqName(classifierDescriptor) && classifierDescriptor.getTypeConstructor().getParameters().size() == 2) { // We create flexible types by convention here // This is not intended to be used in normal users' environments, only for tests and debugger etc diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index b564f2ae225..828f53d7f74 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -16,25 +16,26 @@ package org.jetbrains.kotlin.load.java.lazy.descriptors -import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor -import org.jetbrains.kotlin.types.* -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext -import org.jetbrains.kotlin.load.java.structure.* -import org.jetbrains.kotlin.resolve.constants.* -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.load.java.JvmAnnotationNames.* +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME +import org.jetbrains.kotlin.load.java.JvmAnnotationNames.isSpecialAnnotation import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils import org.jetbrains.kotlin.load.java.components.TypeUsage -import org.jetbrains.kotlin.utils.valuesToMap -import org.jetbrains.kotlin.utils.keysToMapExceptNulls +import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.lazy.types.toAttributes -import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.load.java.structure.* +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JavaToKotlinClassMap +import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.resolve.constants.* import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass import org.jetbrains.kotlin.resolve.jvm.PLATFORM_TYPES +import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.utils.keysToMapExceptNulls +import org.jetbrains.kotlin.utils.valuesToMap private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument { override val name: Name? = null @@ -49,13 +50,11 @@ fun LazyJavaResolverContext.resolveAnnotation(annotation: JavaAnnotation): LazyJ class LazyJavaAnnotationDescriptor( private val c: LazyJavaResolverContext, - val javaAnnotation : JavaAnnotation + val javaAnnotation: JavaAnnotation ) : AnnotationDescriptor { private val fqName = c.storageManager.createNullableLazyValue { - javaAnnotation.getClassId().asSingleFqName().let { - if (it.isSafe()) it.toSafe() else null - } + javaAnnotation.getClassId()?.asSingleFqName() } private val type = c.storageManager.createLazyValue {(): JetType -> diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt index 674a4ef1c55..d867f0dba43 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import java.lang.reflect.Array import java.lang.reflect.Modifier @@ -43,7 +42,7 @@ public fun Class<*>.isEnumClassOrSpecializedEnumEntryClass(): Boolean = javaClass>().isAssignableFrom(this) public val Class<*>.fqName: FqName - get() = classId.asSingleFqName().toSafe() + get() = classId.asSingleFqName() public val Class<*>.classId: ClassId get() = when { @@ -51,7 +50,7 @@ public val Class<*>.classId: ClassId isArray() -> throw IllegalArgumentException("Can't compute ClassId for array type: $this") getEnclosingMethod() != null, getEnclosingConstructor() != null, getSimpleName().isEmpty() -> { val fqName = FqName(getName()) - ClassId(fqName.parent(), FqNameUnsafe.topLevel(fqName.shortName()), /* local = */ true) + ClassId(fqName.parent(), FqName.topLevel(fqName.shortName()), /* local = */ true) } else -> getDeclaringClass()?.classId?.createNestedClassId(Name.identifier(getSimpleName())) ?: ClassId.topLevel(FqName(getName())) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java b/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java index 1d618ed2d62..bcf526057d7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java @@ -34,10 +34,10 @@ public final class ClassId { } private final FqName packageFqName; - private final FqNameUnsafe relativeClassName; + private final FqName relativeClassName; private final boolean local; - public ClassId(@NotNull FqName packageFqName, @NotNull FqNameUnsafe relativeClassName, boolean local) { + public ClassId(@NotNull FqName packageFqName, @NotNull FqName relativeClassName, boolean local) { this.packageFqName = packageFqName; assert !relativeClassName.isRoot() : "Class name must not be root: " + packageFqName + (local ? " (local)" : ""); @@ -46,7 +46,7 @@ public final class ClassId { } public ClassId(@NotNull FqName packageFqName, @NotNull Name topLevelName) { - this(packageFqName, FqNameUnsafe.topLevel(topLevelName), false); + this(packageFqName, FqName.topLevel(topLevelName), false); } @NotNull @@ -55,7 +55,7 @@ public final class ClassId { } @NotNull - public FqNameUnsafe getRelativeClassName() { + public FqName getRelativeClassName() { return relativeClassName; } @@ -83,9 +83,9 @@ public final class ClassId { } @NotNull - public FqNameUnsafe asSingleFqName() { + public FqName asSingleFqName() { if (packageFqName.isRoot()) return relativeClassName; - return new FqNameUnsafe(packageFqName.asString() + "." + relativeClassName.asString()); + return new FqName(packageFqName.asString() + "." + relativeClassName.asString()); } @Override @@ -120,7 +120,7 @@ public final class ClassId { if (lastSlash == -1) { throw new IllegalArgumentException("Class id should contain slash: " + string); } - FqNameUnsafe relativeClassName = new FqNameUnsafe(string.substring(lastSlash + 1)); + FqName relativeClassName = new FqName(string.substring(lastSlash + 1)); FqName packageFqName = new FqName(string.substring(0, lastSlash).replace('/', '.')); return new ClassId(packageFqName, relativeClassName, false); } diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/NameResolver.java b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/NameResolver.java index 8a63f78f69b..2bd5aea0ce2 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/NameResolver.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/NameResolver.java @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.serialization.deserialization; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; -import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.serialization.ProtoBuf; @@ -85,7 +84,7 @@ public class NameResolver { index = proto.getParentQualifiedName(); } - return new ClassId(FqName.fromSegments(packageFqName), FqNameUnsafe.fromSegments(relativeClassName), local); + return new ClassId(FqName.fromSegments(packageFqName), FqName.fromSegments(relativeClassName), local); } @NotNull diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/ProtoContainer.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/ProtoContainer.kt index 6d20b161ee9..44eaaa22fd5 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/ProtoContainer.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/ProtoContainer.kt @@ -16,19 +16,16 @@ package org.jetbrains.kotlin.serialization.deserialization -import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.serialization.deserialization.NameResolver -import org.jetbrains.kotlin.name.FqNameUnsafe +import org.jetbrains.kotlin.serialization.ProtoBuf public data class ProtoContainer(val classProto: ProtoBuf.Class?, val packageFqName: FqName?) { - { - assert(classProto != null || packageFqName != null) - assert(classProto == null || packageFqName == null) + init { + assert((classProto != null) xor (packageFqName != null)) } - fun getFqName(nameResolver: NameResolver): FqNameUnsafe { - if (packageFqName != null) return packageFqName.toUnsafe() + fun getFqName(nameResolver: NameResolver): FqName { + if (packageFqName != null) return packageFqName return nameResolver.getClassId(classProto!!.getFqName()).asSingleFqName() } 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 e43c42fc564..b1629d88c19 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 @@ -61,7 +61,7 @@ private class ClassClsStubBuilder( }.let { supertypeIds -> //empty supertype list if single supertype is Any - if (supertypeIds.singleOrNull()?.let { KotlinBuiltIns.isAny(it.asSingleFqName()) } ?: false) { + if (supertypeIds.singleOrNull()?.let { KotlinBuiltIns.isAny(it.asSingleFqName().toUnsafe()) } ?: false) { listOf() } else { @@ -108,7 +108,8 @@ private class ClassClsStubBuilder( val shortName = fqName.shortName().ref() val superTypeRefs = supertypeIds.filter { //TODO: filtering function types should go away - !KotlinBuiltIns.isExactFunctionType(it.asSingleFqName()) && !KotlinBuiltIns.isExactExtensionFunctionType(it.asSingleFqName()) + !KotlinBuiltIns.isExactFunctionType(it.asSingleFqName().toUnsafe()) && + !KotlinBuiltIns.isExactExtensionFunctionType(it.asSingleFqName().toUnsafe()) }.map { it.getShortClassName().ref() }.copyToArray() return when (classKind) { ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt index 7a0b5e741b1..c1f085de3d9 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt @@ -16,42 +16,27 @@ package org.jetbrains.kotlin.idea.decompiler.stubBuilder -import com.intellij.psi.stubs.StubElement -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.name.FqName import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.psi.stubs.impl.KotlinPlaceHolderStubImpl -import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes -import org.jetbrains.kotlin.psi.stubs.impl.KotlinNameReferenceExpressionStubImpl -import org.jetbrains.kotlin.psi.JetTypeReference +import com.intellij.psi.stubs.StubElement +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.lexer.JetModifierKeywordToken import org.jetbrains.kotlin.lexer.JetTokens -import org.jetbrains.kotlin.psi.JetParameterList -import org.jetbrains.kotlin.psi.stubs.impl.KotlinParameterStubImpl -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.JetNullableType -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.psi.JetTypeArgumentList -import org.jetbrains.kotlin.psi.stubs.impl.KotlinTypeProjectionStubImpl -import org.jetbrains.kotlin.psi.JetFunctionType -import org.jetbrains.kotlin.psi.JetFunctionTypeReceiver -import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList -import org.jetbrains.kotlin.psi.JetTypeParameterList -import org.jetbrains.kotlin.serialization.ProtoBuf.Type -import org.jetbrains.kotlin.psi.stubs.impl.KotlinTypeParameterStubImpl -import org.jetbrains.kotlin.serialization.ProtoBuf.TypeParameter.Variance -import org.jetbrains.kotlin.psi.JetTypeConstraintList -import org.jetbrains.kotlin.psi.stubs.impl.KotlinTypeConstraintStubImpl import org.jetbrains.kotlin.name.ClassId -import java.util.ArrayList -import org.jetbrains.kotlin.serialization.Flags -import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind -import org.jetbrains.kotlin.psi.stubs.impl.KotlinModifierListStubImpl -import org.jetbrains.kotlin.psi.stubs.impl.ModifierMaskUtils -import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.stubs.KotlinUserTypeStub +import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes +import org.jetbrains.kotlin.psi.stubs.impl.* +import org.jetbrains.kotlin.serialization.Flags +import org.jetbrains.kotlin.serialization.ProtoBuf +import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind +import org.jetbrains.kotlin.serialization.ProtoBuf.Type import org.jetbrains.kotlin.serialization.ProtoBuf.Type.Argument.Projection -import org.jetbrains.kotlin.psi.JetProjectionKind +import org.jetbrains.kotlin.serialization.ProtoBuf.TypeParameter.Variance +import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer +import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList +import java.util.ArrayList class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { @@ -76,7 +61,7 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { private fun createClassReferenceTypeStub(parent: StubElement, type: Type) { val classId = c.nameResolver.getClassId(type.getConstructor().getId()) - val fqName = classId.asSingleFqName() + val fqName = classId.asSingleFqName().toUnsafe() val isFunctionType = KotlinBuiltIns.isExactFunctionType(fqName) val isExtensionFunctionType = KotlinBuiltIns.isExactExtensionFunctionType(fqName) if (isFunctionType || isExtensionFunctionType) { @@ -237,6 +222,6 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { return false } val classId = c.nameResolver.getClassId(constructor.getId()) - return KotlinBuiltIns.isAny(classId.asSingleFqName()) && this.getNullable() + return KotlinBuiltIns.isAny(classId.asSingleFqName().toUnsafe()) && this.getNullable() } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt index 31cadcc3aee..293218b103c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt @@ -175,7 +175,7 @@ fun createAnnotationStubs(annotationIds: List, modifierList: KotlinModi annotationClassId -> val annotationEntryStubImpl = KotlinAnnotationEntryStubImpl( modifierList, - shortName = annotationClassId.asSingleFqName().shortName().ref(), + shortName = annotationClassId.getShortClassName().ref(), hasValueArguments = false ) val constructorCallee = KotlinPlaceHolderStubImpl(annotationEntryStubImpl, JetStubElementTypes.CONSTRUCTOR_CALLEE) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/KotlinClassFileIndex.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/KotlinClassFileIndex.java index c4af58483b2..a4072b36d4b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/KotlinClassFileIndex.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/KotlinClassFileIndex.java @@ -73,7 +73,7 @@ public final class KotlinClassFileIndex extends ScalarIndexExtension { try { KotlinJvmBinaryClass kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(inputData.getFile()); if (kotlinClass != null && kotlinClass.getClassHeader().getIsCompatibleAbiVersion()) { - return Collections.singletonMap(kotlinClass.getClassId().asSingleFqName().toSafe(), null); + return Collections.singletonMap(kotlinClass.getClassId().asSingleFqName(), null); } } catch (Throwable e) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt index 85735494b6a..9d3d11618fb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt @@ -16,27 +16,27 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder -import org.jetbrains.kotlin.idea.JetLightCodeInsightFixtureTestCase -import org.jetbrains.kotlin.idea.JetWithJdkAndRuntimeLightProjectDescriptor -import org.jetbrains.kotlin.name.FqName -import org.junit.Assert -import org.jetbrains.kotlin.idea.PluginTestCaseBase -import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import com.intellij.openapi.project.Project +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.context.GlobalContext +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM -import org.jetbrains.kotlin.resolve.BindingTraceContext +import org.jetbrains.kotlin.idea.JetLightCodeInsightFixtureTestCase +import org.jetbrains.kotlin.idea.JetWithJdkAndRuntimeLightProjectDescriptor +import org.jetbrains.kotlin.idea.PluginTestCaseBase +import org.jetbrains.kotlin.load.kotlin.PackageClassUtils +import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.MemberComparator import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.context.GlobalContext -import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory -import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass +import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM +import org.junit.Assert public class DecompiledTextConsistencyTest : JetLightCodeInsightFixtureTestCase() { @@ -70,7 +70,7 @@ class ProjectBasedResolverForDecompiler(project: Project) : ResolverForDecompile } override fun resolveTopLevelClass(classId: ClassId): ClassDescriptor? { - return module.resolveTopLevelClass(classId.asSingleFqName().toSafe()) + return module.resolveTopLevelClass(classId.asSingleFqName()) } override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection {