Using FqNameUnsafe for relative class names

This commit is contained in:
Andrey Breslav
2013-05-22 16:44:28 +04:00
committed by Alexander Udalov
parent 699d5acd36
commit 347e2c27aa
3 changed files with 14 additions and 9 deletions
@@ -2,13 +2,14 @@ package org.jetbrains.jet.descriptors.serialization;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.name.FqName; 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.name.Name;
public final class ClassId { public final class ClassId {
private final FqName packageFqName; 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; this.packageFqName = packageFqName;
assert !relativeClassName.isRoot() : "Class name must not be root. " + packageFqName; assert !relativeClassName.isRoot() : "Class name must not be root. " + packageFqName;
this.relativeClassName = relativeClassName; this.relativeClassName = relativeClassName;
@@ -20,7 +21,7 @@ public final class ClassId {
} }
@NotNull @NotNull
public FqName getRelativeClassName() { public FqNameUnsafe getRelativeClassName() {
return relativeClassName; return relativeClassName;
} }
@@ -29,9 +30,9 @@ public final class ClassId {
return new ClassId(getPackageFqName(), relativeClassName.child(name)); return new ClassId(getPackageFqName(), relativeClassName.child(name));
} }
public FqName asSingleFqName() { public FqNameUnsafe asSingleFqName() {
if (packageFqName.isRoot()) return relativeClassName; if (packageFqName.isRoot()) return relativeClassName;
return new FqName(packageFqName.getFqName() + "." + relativeClassName.getFqName()); return new FqNameUnsafe(packageFqName.getFqName() + "." + relativeClassName.getFqName());
} }
@Override @Override
@@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName; 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.name.Name;
import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.QualifiedNameTable.*; import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.QualifiedNameTable.*;
@@ -80,7 +81,7 @@ public class NameResolver {
packageFqName = FqName.ROOT; packageFqName = FqName.ROOT;
} }
return new ClassId(packageFqName, new FqName(relativeClassName.toString())); return new ClassId(packageFqName, new FqNameUnsafe(relativeClassName.toString()));
} }
@Nullable @Nullable
@@ -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.MemoizedFunctionToNullable;
import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullableImpl; import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullableImpl;
import org.jetbrains.jet.lang.resolve.name.FqName; 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.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler; import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
@@ -145,7 +146,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
for (ClassDescriptor classDescriptor : classes) { for (ClassDescriptor classDescriptor : classes) {
ClassId classId = new ClassId(DescriptorUtils.getFQName(classDescriptor.getContainingDeclaration()).toSafe(), ClassId classId = new ClassId(DescriptorUtils.getFQName(classDescriptor.getContainingDeclaration()).toSafe(),
FqName.topLevel(classDescriptor.getName())); FqNameUnsafe.topLevel(classDescriptor.getName()));
ClassDescriptor descriptor = classResolver.findClass(classId); ClassDescriptor descriptor = classResolver.findClass(classId);
assert descriptor != null : "Class not loaded: " + classId; assert descriptor != null : "Class not loaded: " + classId;
if (descriptor.getKind().isObject()) { if (descriptor.getKind().isObject()) {
@@ -297,7 +298,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
@NotNull DeclarationDescriptor containingDeclaration, @NotNull DeclarationDescriptor containingDeclaration,
@NotNull final ClassId classId @NotNull final ClassId classId
) { ) {
FqName fqName = classId.asSingleFqName(); FqNameUnsafe fqName = classId.asSingleFqName();
ClassMetadata classMetadata = this.classMetadata.fun(fqName.getFqName()); ClassMetadata classMetadata = this.classMetadata.fun(fqName.getFqName());
if (classMetadata == null) { if (classMetadata == null) {
@@ -339,7 +340,9 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
@Nullable @Nullable
@Override @Override
public ClassDescriptor findClass(@NotNull ClassId classId) { 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) { if (javaClassDescriptor != null) {
return javaClassDescriptor; return javaClassDescriptor;
} }