From 347e2c27aa4fba526ff587dea4cf9f39379d03af Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 22 May 2013 16:44:28 +0400 Subject: [PATCH] Using FqNameUnsafe for relative class names --- .../jet/descriptors/serialization/ClassId.java | 11 ++++++----- .../jet/descriptors/serialization/NameResolver.java | 3 ++- .../AbstractDescriptorSerializationTest.java | 9 ++++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java index c9df568a3f9..d7cf0310b23 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java @@ -2,13 +2,14 @@ package org.jetbrains.jet.descriptors.serialization; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; public final class ClassId { private final FqName packageFqName; - private final FqName relativeClassName; + private final FqNameUnsafe relativeClassName; - public ClassId(@NotNull FqName packageFqName, @NotNull FqName relativeClassName) { + public ClassId(@NotNull FqName packageFqName, @NotNull FqNameUnsafe relativeClassName) { this.packageFqName = packageFqName; assert !relativeClassName.isRoot() : "Class name must not be root. " + packageFqName; this.relativeClassName = relativeClassName; @@ -20,7 +21,7 @@ public final class ClassId { } @NotNull - public FqName getRelativeClassName() { + public FqNameUnsafe getRelativeClassName() { return relativeClassName; } @@ -29,9 +30,9 @@ public final class ClassId { return new ClassId(getPackageFqName(), relativeClassName.child(name)); } - public FqName asSingleFqName() { + public FqNameUnsafe asSingleFqName() { if (packageFqName.isRoot()) return relativeClassName; - return new FqName(packageFqName.getFqName() + "." + relativeClassName.getFqName()); + return new FqNameUnsafe(packageFqName.getFqName() + "." + relativeClassName.getFqName()); } @Override diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameResolver.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameResolver.java index ce3a95eb6cc..4be7e80a743 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameResolver.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameResolver.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.QualifiedNameTable.*; @@ -80,7 +81,7 @@ public class NameResolver { packageFqName = FqName.ROOT; } - return new ClassId(packageFqName, new FqName(relativeClassName.toString())); + return new ClassId(packageFqName, new FqNameUnsafe(relativeClassName.toString())); } @Nullable diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java index 36855d32d50..5bc3000881c 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java @@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullable; import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullableImpl; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler; @@ -145,7 +146,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith for (ClassDescriptor classDescriptor : classes) { ClassId classId = new ClassId(DescriptorUtils.getFQName(classDescriptor.getContainingDeclaration()).toSafe(), - FqName.topLevel(classDescriptor.getName())); + FqNameUnsafe.topLevel(classDescriptor.getName())); ClassDescriptor descriptor = classResolver.findClass(classId); assert descriptor != null : "Class not loaded: " + classId; if (descriptor.getKind().isObject()) { @@ -297,7 +298,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith @NotNull DeclarationDescriptor containingDeclaration, @NotNull final ClassId classId ) { - FqName fqName = classId.asSingleFqName(); + FqNameUnsafe fqName = classId.asSingleFqName(); ClassMetadata classMetadata = this.classMetadata.fun(fqName.getFqName()); if (classMetadata == null) { @@ -339,7 +340,9 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith @Nullable @Override public ClassDescriptor findClass(@NotNull ClassId classId) { - ClassDescriptor javaClassDescriptor = javaDescriptorResolver.resolveClass(classId.asSingleFqName()); + FqNameUnsafe fqNameUnsafe = classId.asSingleFqName(); + assert fqNameUnsafe.isSafe() : "Unsafe fqName made it to Java resolve: " + fqNameUnsafe; + ClassDescriptor javaClassDescriptor = javaDescriptorResolver.resolveClass(fqNameUnsafe.toSafe()); if (javaClassDescriptor != null) { return javaClassDescriptor; }