Using FqNameUnsafe for relative class names
This commit is contained in:
committed by
Alexander Udalov
parent
699d5acd36
commit
347e2c27aa
+6
-5
@@ -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
|
||||||
|
|||||||
+2
-1
@@ -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
|
||||||
|
|||||||
+6
-3
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user