From 945072a1294476eafd89e45741005c2c0f52b28c Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 30 Jan 2015 14:16:40 +0300 Subject: [PATCH] Drop DeserializedResolverUtils and it's usages --- .../codegen/inline/InlineCodegenUtil.java | 6 +- .../src/BuiltInsSerializer.kt | 5 +- .../LazyJavaAnnotationDescriptor.kt | 7 +- ...tBinaryClassAnnotationAndConstantLoader.kt | 14 ++- ...aryClassAnnotationAndConstantLoaderImpl.kt | 4 +- .../kotlin/DeserializedResolverUtils.java | 85 ------------------- .../kotlin/load/kotlin/JavaClassDataFinder.kt | 3 +- .../builtins/BuiltInsSerializationUtil.kt | 2 +- .../kotlin/resolve/DescriptorUtils.kt | 15 +++- .../textBuilder/LocalClassFinder.kt | 4 +- .../references/BuiltInsReferenceResolver.java | 2 +- 11 files changed, 32 insertions(+), 115 deletions(-) delete mode 100644 core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedResolverUtils.java 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 88f61b39bcd..58e37c4b956 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.load.kotlin.DeserializedResolverUtils; import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder; @@ -56,8 +55,7 @@ import java.io.StringWriter; import java.util.Arrays; import java.util.ListIterator; -import static org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName; -import static org.jetbrains.kotlin.resolve.DescriptorUtils.isTrait; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; public class InlineCodegenUtil { public static final int API = Opcodes.ASM5; @@ -146,7 +144,7 @@ public class InlineCodegenUtil { return PackageClassUtils.getPackageClassFqName(getFqName(containerDescriptor).toSafe()); } if (containerDescriptor instanceof ClassDescriptor) { - FqName fqName = DeserializedResolverUtils.kotlinFqNameToJavaFqName(getFqName(containerDescriptor)); + FqName fqName = getFqNameSafe(containerDescriptor); if (isTrait(containerDescriptor)) { return fqName.parent().child(Name.identifier(fqName.shortName() + JvmAbi.TRAIT_IMPL_SUFFIX)); } diff --git a/compiler/builtins-serializer/src/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/BuiltInsSerializer.kt index d6805f54543..2e3385ca7ef 100644 --- a/compiler/builtins-serializer/src/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/BuiltInsSerializer.kt @@ -37,12 +37,13 @@ import org.jetbrains.kotlin.context.GlobalContext import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters import org.jetbrains.kotlin.analyzer.ModuleContent -import org.jetbrains.kotlin.load.kotlin.DeserializedResolverUtils import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.JVMConfigurationKeys import org.jetbrains.kotlin.resolve.constants.NullValue import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.resolve.descriptorUtil.classId private object BuiltInsSerializerExtension : SerializerExtension() { override fun serializeClass(descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder, stringTable: StringTable) { @@ -216,6 +217,6 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { } private fun getFileName(classDescriptor: ClassDescriptor): String { - return BuiltInsSerializationUtil.getClassMetadataPath(DeserializedResolverUtils.getClassId(classDescriptor))!! + return BuiltInsSerializationUtil.getClassMetadataPath(classDescriptor.classId) } } 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 d3f4f9b5f69..b564f2ae225 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 @@ -34,7 +34,6 @@ import org.jetbrains.kotlin.load.java.lazy.types.toAttributes import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.platform.JavaToKotlinClassMap import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass -import org.jetbrains.kotlin.load.kotlin.DeserializedResolverUtils.kotlinFqNameToJavaFqName import org.jetbrains.kotlin.resolve.jvm.PLATFORM_TYPES private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument { @@ -54,9 +53,9 @@ class LazyJavaAnnotationDescriptor( ) : AnnotationDescriptor { private val fqName = c.storageManager.createNullableLazyValue { - val classId = javaAnnotation.getClassId() - if (classId == null) null - else kotlinFqNameToJavaFqName(classId.asSingleFqName()) + javaAnnotation.getClassId().asSingleFqName().let { + if (it.isSafe()) it.toSafe() else null + } } private val type = c.storageManager.createLazyValue {(): JetType -> diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt index e0d75ee2e22..1576e2cdfec 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt @@ -62,7 +62,7 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader { val classId = nameResolver.getClassId(classProto.getFqName()) - val kotlinClass = findKotlinClassById(classId) + val kotlinClass = kotlinClassFinder.findKotlinClass(classId) if (kotlinClass == null) { // This means that the resource we're constructing the descriptor from is no longer present: KotlinClassFinder had found the // class earlier, but it can't now @@ -160,19 +160,19 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader segments = kotlinFqName.pathSegments(); - List correctedSegments = new ArrayList(segments.size()); - for (Name segment : segments) { - correctedSegments.add(segment.getIdentifier()); - } - return FqName.fromSegments(correctedSegments); - } - - @NotNull - public static ClassId kotlinClassIdToJavaClassId(@NotNull ClassId kotlinClassId) { - return new ClassId(kotlinClassId.getPackageFqName(), kotlinFqNameToJavaFqName(kotlinClassId.getRelativeClassName()).toUnsafe()); - } - - //TODO_R: remove usages - @NotNull - public static FqNameUnsafe javaFqNameToKotlinFqName(@NotNull FqName javaFqName) { - if (javaFqName.isRoot()) { - return javaFqName.toUnsafe(); - } - List segments = javaFqName.pathSegments(); - List correctedSegments = new ArrayList(segments.size()); - correctedSegments.add(segments.get(0)); - for (int i = 1; i < segments.size(); i++) { - correctedSegments.add(segments.get(i)); - } - return FqNameUnsafe.fromSegments(correctedSegments); - } - - //TODO_R: remove usages - @NotNull - public static ClassId javaClassIdToKotlinClassId(@NotNull ClassId javaClassId) { - return new ClassId(javaClassId.getPackageFqName(), javaFqNameToKotlinFqName(javaClassId.getRelativeClassName().toSafe())); - } - - @NotNull - public static ClassId getClassId(@NotNull ClassDescriptor descriptor) { - DeclarationDescriptor owner = descriptor.getContainingDeclaration(); - if (owner instanceof PackageFragmentDescriptor) { - return new ClassId(((PackageFragmentDescriptor) owner).getFqName(), descriptor.getName()); - } - else if (owner instanceof ClassDescriptor) { - return getClassId((ClassDescriptor) owner).createNestedClassId(descriptor.getName()); - } - else { - throw new IllegalStateException("Illegal container: " + descriptor); - } - } -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt index c00f8f2d8c1..8ec5245a569 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt @@ -27,8 +27,7 @@ public class JavaClassDataFinder( private val deserializedDescriptorResolver: DeserializedDescriptorResolver ) : ClassDataFinder { override fun findClassData(classId: ClassId): ClassData? { - val javaClassId = DeserializedResolverUtils.kotlinClassIdToJavaClassId(classId) - val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(javaClassId) ?: return null + val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null val data = deserializedDescriptorResolver.readData(kotlinJvmBinaryClass, KotlinClassHeader.Kind.CLASS) ?: return null return JvmProtoBufUtil.readClassDataFrom(data) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt index c75375573e8..96bf07631b1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt @@ -25,7 +25,7 @@ public object BuiltInsSerializationUtil { private val STRING_TABLE_FILE_NAME = ".kotlin_string_table" private val CLASS_NAMES_FILE_NAME = ".kotlin_class_names" - platformStatic public fun getClassMetadataPath(classId: ClassId): String? { + platformStatic public fun getClassMetadataPath(classId: ClassId): String { return packageFqNameToPath(classId.getPackageFqName()) + "/" + classId.getRelativeClassName().asString() + "." + CLASS_METADATA_FILE_EXTENSION } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index 51117639eea..6e57db0391a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.descriptors.ClassKind.* import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.ClassId public fun ClassDescriptor.getClassObjectReferenceTarget(): ClassDescriptor { val classObjectDescriptor = getClassObjectDescriptor() @@ -46,4 +47,16 @@ public fun ModuleDescriptor.resolveTopLevelClass(topLevelClassFqName: FqName): C assert(!topLevelClassFqName.isRoot()) return getPackage(topLevelClassFqName.parent())?.getMemberScope() ?.getClassifier(topLevelClassFqName.shortName()) as? ClassDescriptor -} \ No newline at end of file +} + +public val ClassDescriptor.classId: ClassId + get() { + val owner = getContainingDeclaration() + if (owner is PackageFragmentDescriptor) { + return ClassId(owner.fqName, getName()) + } + else if (owner is ClassDescriptor) { + return owner.classId.createNestedClassId(getName()) + } + throw IllegalStateException("Illegal container: $owner") + } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt index cf81dba593f..b3cef0b0d57 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass -import org.jetbrains.kotlin.load.kotlin.DeserializedResolverUtils import org.jetbrains.kotlin.idea.decompiler.isKotlinWithCompatibleAbiVersion import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache import com.intellij.openapi.vfs.VirtualFile @@ -40,8 +39,7 @@ class LocalClassFinder( if (classId.getPackageFqName() != directoryPackageFqName) { return null } - val segments = DeserializedResolverUtils.kotlinFqNameToJavaFqName(classId.getRelativeClassName()).pathSegments() - val targetName = segments.joinToString("$", postfix = ".class") + val targetName = classId.getRelativeClassName().pathSegments().joinToString("$", postfix = ".class") val virtualFile = packageDirectory.findChild(targetName) if (virtualFile != null && isKotlinWithCompatibleAbiVersion(virtualFile)) { return KotlinBinaryClassCache.getKotlinBinaryClass(virtualFile) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java index a4706379636..b07ac2bc734 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java @@ -57,8 +57,8 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.*; -import static org.jetbrains.kotlin.load.kotlin.DeserializedResolverUtils.getClassId; import static org.jetbrains.kotlin.resolve.DescriptorUtils.unwrapFakeOverride; +import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getClassId; import static org.jetbrains.kotlin.serialization.deserialization.DeserializationPackage.findClassAcrossModuleDependencies; public class BuiltInsReferenceResolver extends AbstractProjectComponent {