Change object deserialization strategy

Objects now have synthetic class objects in deserialization as well. "Class"
proto message now can have a synthetic class object proto within, if it's not
contained in any external class file, which is the case with objects. Drop
"class_object_present" field from binary format, since its value is equivalent
to the presence of "class_object" field
This commit is contained in:
Alexander Udalov
2013-10-29 22:11:07 +04:00
parent 26bd1ff189
commit c04f63e157
17 changed files with 709 additions and 165 deletions
@@ -55,11 +55,7 @@ public final class JavaPackageScope extends JavaBaseScope {
@Override
public ClassifierDescriptor getClassifier(@NotNull Name name) {
ClassDescriptor classDescriptor = memberResolver.resolveClass(packageFQN.child(name), IGNORE_KOTLIN_SOURCES);
if (classDescriptor == null || classDescriptor.getKind().isSingleton()) {
return null;
}
return classDescriptor;
return memberResolver.resolveClass(packageFQN.child(name), IGNORE_KOTLIN_SOURCES);
}
@Override
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve.kotlin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassData;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.descriptors.serialization.DescriptorFinder;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
@@ -97,15 +98,22 @@ public final class DeserializedDescriptorResolver {
@Nullable
public ClassDescriptor resolveClass(@NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass);
return data == null ? null : new DeserializedClassDescriptor(storageManager, annotationDeserializer, javaDescriptorFinder,
JavaProtoBufUtil.readClassDataFrom(data));
if (data != null) {
ClassData classData = JavaProtoBufUtil.readClassDataFrom(data);
return new DeserializedClassDescriptor(storageManager, annotationDeserializer, javaDescriptorFinder,
classData.getNameResolver(), classData.getClassProto());
}
return null;
}
@Nullable
public JetScope createKotlinPackageScope(@NotNull NamespaceDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass);
return data == null ? null : new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer,
javaDescriptorFinder, JavaProtoBufUtil.readPackageDataFrom(data));
if (data != null) {
return new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer, javaDescriptorFinder,
JavaProtoBufUtil.readPackageDataFrom(data));
}
return null;
}
@Nullable