Implement getNamespace() for deserialized scope
DescriptorFinder now can find packages, pull the method up from AbstractDescriptorFinder class
This commit is contained in:
+6
@@ -66,6 +66,12 @@ public final class DeserializedDescriptorResolver {
|
|||||||
public ClassDescriptor findClass(@NotNull ClassId classId) {
|
public ClassDescriptor findClass(@NotNull ClassId classId) {
|
||||||
return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName()));
|
return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public NamespaceDescriptor findPackage(@NotNull FqName name) {
|
||||||
|
return javaNamespaceResolver.resolveNamespace(name);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|||||||
+1
-6
@@ -23,10 +23,8 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeseria
|
|||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
|
||||||
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.StorageManager;
|
import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager.ReferenceKind.STRONG;
|
import static org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager.ReferenceKind.STRONG;
|
||||||
|
|
||||||
@@ -52,7 +50,7 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder {
|
|||||||
ProtoBuf.Class classProto = classData.getClassProto();
|
ProtoBuf.Class classProto = classData.getClassProto();
|
||||||
|
|
||||||
DeclarationDescriptor owner =
|
DeclarationDescriptor owner =
|
||||||
classId.isTopLevelClass() ? getPackage(classId.getPackageFqName()) : findClass(classId.getOuterClassId());
|
classId.isTopLevelClass() ? findPackage(classId.getPackageFqName()) : findClass(classId.getOuterClassId());
|
||||||
assert owner != null : "No owner found for " + classId;
|
assert owner != null : "No owner found for " + classId;
|
||||||
|
|
||||||
AbstractDescriptorFinder _this = AbstractDescriptorFinder.this;
|
AbstractDescriptorFinder _this = AbstractDescriptorFinder.this;
|
||||||
@@ -74,8 +72,5 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder {
|
|||||||
@Nullable
|
@Nullable
|
||||||
protected abstract ClassData getClassData(@NotNull ClassId classId);
|
protected abstract ClassData getClassData(@NotNull ClassId classId);
|
||||||
|
|
||||||
@NotNull
|
|
||||||
protected abstract NamespaceDescriptor getPackage(@NotNull FqName fqName);
|
|
||||||
|
|
||||||
protected abstract void classDescriptorCreated(@NotNull ClassDescriptor classDescriptor);
|
protected abstract void classDescriptorCreated(@NotNull ClassDescriptor classDescriptor);
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -19,17 +19,27 @@ package org.jetbrains.jet.descriptors.serialization;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
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.descriptors.NamespaceDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
public interface DescriptorFinder {
|
public interface DescriptorFinder {
|
||||||
|
|
||||||
DescriptorFinder EMPTY = new DescriptorFinder() {
|
DescriptorFinder EMPTY = new DescriptorFinder() {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public ClassDescriptor findClass(@NotNull ClassId classId) {
|
public ClassDescriptor findClass(@NotNull ClassId classId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public NamespaceDescriptor findPackage(@NotNull FqName name) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
ClassDescriptor findClass(@NotNull ClassId classId);
|
ClassDescriptor findClass(@NotNull ClassId classId);
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
NamespaceDescriptor findPackage(@NotNull FqName name);
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -116,4 +116,10 @@ public abstract class DeserializedPackageMemberScope extends DeserializedMemberS
|
|||||||
protected void addNonDeclaredDescriptors(@NotNull Collection<DeclarationDescriptor> result) {
|
protected void addNonDeclaredDescriptors(@NotNull Collection<DeclarationDescriptor> result) {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public NamespaceDescriptor getNamespace(@NotNull Name name) {
|
||||||
|
return descriptorFinder.findPackage(packageFqName.child(name));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-6
@@ -35,8 +35,7 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl {
|
|||||||
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), KotlinBuiltIns.BUILT_INS_PACKAGE_NAME);
|
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), KotlinBuiltIns.BUILT_INS_PACKAGE_NAME);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
nameResolver =
|
nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(this)));
|
||||||
NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(this)));
|
|
||||||
|
|
||||||
DescriptorFinder descriptorFinder = new AbstractDescriptorFinder(storageManager, AnnotationDeserializer.UNSUPPORTED) {
|
DescriptorFinder descriptorFinder = new AbstractDescriptorFinder(storageManager, AnnotationDeserializer.UNSUPPORTED) {
|
||||||
|
|
||||||
@@ -66,11 +65,10 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected NamespaceDescriptor getPackage(@NotNull FqName fqName) {
|
public NamespaceDescriptor findPackage(@NotNull FqName fqName) {
|
||||||
assert fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) : "Wrong package: " + fqName;
|
return fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? BuiltinsNamespaceDescriptorImpl.this : null;
|
||||||
return BuiltinsNamespaceDescriptorImpl.this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+10
-3
@@ -327,6 +327,12 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
|||||||
public ClassDescriptor findClass(@NotNull ClassId classId) {
|
public ClassDescriptor findClass(@NotNull ClassId classId) {
|
||||||
return classes.fun(classId);
|
return classes.fun(classId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public NamespaceDescriptor findPackage(@NotNull FqName name) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class JavaDescriptorFinder implements DescriptorFinder {
|
private static class JavaDescriptorFinder implements DescriptorFinder {
|
||||||
@@ -345,7 +351,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
|||||||
if (javaClassDescriptor != null) {
|
if (javaClassDescriptor != null) {
|
||||||
return javaClassDescriptor;
|
return javaClassDescriptor;
|
||||||
}
|
}
|
||||||
NamespaceDescriptor packageDescriptor = getNamespace(classId.getPackageFqName());
|
NamespaceDescriptor packageDescriptor = findPackage(classId.getPackageFqName());
|
||||||
if (packageDescriptor == null) {
|
if (packageDescriptor == null) {
|
||||||
throw new IllegalStateException("Java package not found: " + classId.getPackageFqName() + " for " + classId);
|
throw new IllegalStateException("Java package not found: " + classId.getPackageFqName() + " for " + classId);
|
||||||
}
|
}
|
||||||
@@ -368,8 +374,9 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private NamespaceDescriptor getNamespace(@NotNull FqName fqName) {
|
@Override
|
||||||
return javaDescriptorResolver.resolveNamespace(fqName);
|
public NamespaceDescriptor findPackage(@NotNull FqName name) {
|
||||||
|
return javaDescriptorResolver.resolveNamespace(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-8
@@ -80,12 +80,10 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
|
|||||||
|
|
||||||
final NameResolver nameResolver = NameSerializationUtil.createNameResolver(serializer.getNameTable());
|
final NameResolver nameResolver = NameSerializationUtil.createNameResolver(serializer.getNameTable());
|
||||||
|
|
||||||
DescriptorFinder descriptorFinder = new AbstractDescriptorFinder(new LockBasedStorageManager(),
|
DescriptorFinder finder = new AbstractDescriptorFinder(new LockBasedStorageManager(), AnnotationDeserializer.UNSUPPORTED) {
|
||||||
AnnotationDeserializer.UNSUPPORTED) {
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected NamespaceDescriptor getPackage(@NotNull FqName fqName) {
|
public NamespaceDescriptor findPackage(@NotNull FqName fqName) {
|
||||||
assert fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) : "Unsupported package: " + fqName;
|
assert fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) : "Unsupported package: " + fqName;
|
||||||
return actualNamespace;
|
return actualNamespace;
|
||||||
}
|
}
|
||||||
@@ -121,10 +119,10 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
|
|||||||
|
|
||||||
// Make the lazy loader create classes
|
// Make the lazy loader create classes
|
||||||
for (ClassId classId : classProtos.keySet()) {
|
for (ClassId classId : classProtos.keySet()) {
|
||||||
descriptorFinder.findClass(classId);
|
finder.findClass(classId);
|
||||||
}
|
}
|
||||||
|
|
||||||
deserializeCallables(callableProtos, actualNamespace, nameResolver, descriptorFinder);
|
deserializeCallables(callableProtos, actualNamespace, nameResolver, finder);
|
||||||
|
|
||||||
actualNamespace.getMemberScope().changeLockLevel(WritableScope.LockLevel.READING);
|
actualNamespace.getMemberScope().changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
return actualNamespace;
|
return actualNamespace;
|
||||||
@@ -166,8 +164,7 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
|
|||||||
NameResolver nameResolver,
|
NameResolver nameResolver,
|
||||||
DescriptorFinder descriptorFinder
|
DescriptorFinder descriptorFinder
|
||||||
) {
|
) {
|
||||||
DescriptorDeserializer descriptorDeserializer;
|
DescriptorDeserializer descriptorDeserializer =
|
||||||
descriptorDeserializer =
|
|
||||||
DescriptorDeserializer.create(new LockBasedStorageManager(), actualNamespace, nameResolver, descriptorFinder, AnnotationDeserializer.UNSUPPORTED);
|
DescriptorDeserializer.create(new LockBasedStorageManager(), actualNamespace, nameResolver, descriptorFinder, AnnotationDeserializer.UNSUPPORTED);
|
||||||
for (ProtoBuf.Callable callableProto : callableProtos) {
|
for (ProtoBuf.Callable callableProto : callableProtos) {
|
||||||
CallableMemberDescriptor callableMemberDescriptor = descriptorDeserializer.loadCallable(callableProto);
|
CallableMemberDescriptor callableMemberDescriptor = descriptorDeserializer.loadCallable(callableProto);
|
||||||
|
|||||||
+1
-1
@@ -82,7 +82,7 @@ public class KotlinInfoForClassTest extends CodegenTestCase {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected NamespaceDescriptor getPackage(@NotNull FqName fqName) {
|
public NamespaceDescriptor findPackage(@NotNull FqName fqName) {
|
||||||
assert fqName.equals(NAMESPACE_NAME) : "Unsupported namespace: " + fqName;
|
assert fqName.equals(NAMESPACE_NAME) : "Unsupported namespace: " + fqName;
|
||||||
return namespace;
|
return namespace;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user