Read KotlinInfo annotations for packages

JavaNamespaceDescriptor creates DeserializedPackageMemberScope in case there is *Package class present for a particular package (other cases work as before)
This commit is contained in:
Pavel V. Talanov
2013-07-04 14:14:27 +04:00
committed by Alexander Udalov
parent 77aa190eb1
commit 9a33567287
12 changed files with 170 additions and 59 deletions
@@ -17,9 +17,27 @@
package org.jetbrains.jet.descriptors.serialization;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.utils.ExceptionUtils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public final class ClassData {
@NotNull
public static ClassData read(@NotNull byte[] bytes) {
try {
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
NameResolver nameResolver = NameSerializationUtil.deserializeNameResolver(in);
ProtoBuf.Class classProto = ProtoBuf.Class.parseFrom(in);
return new ClassData(nameResolver, classProto);
}
catch (IOException e) {
throw ExceptionUtils.rethrow(e);
}
}
public class ClassData {
private final NameResolver nameResolver;
private final ProtoBuf.Class classProto;
public ClassData(@NotNull NameResolver nameResolver, @NotNull ProtoBuf.Class classProto) {
@@ -86,19 +86,6 @@ public class ClassSerializationUtil {
}
}
@NotNull
public static ClassData readClassDataFrom(@NotNull byte[] bytes) {
try {
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
NameResolver nameResolver = NameSerializationUtil.deserializeNameResolver(in);
ProtoBuf.Class classProto = ProtoBuf.Class.parseFrom(in);
return new ClassData(nameResolver, classProto);
}
catch (IOException e) {
throw ExceptionUtils.rethrow(e);
}
}
@NotNull
public static ClassId getClassId(@NotNull ClassDescriptor classDescriptor) {
DeclarationDescriptor containingDeclaration = classDescriptor.getContainingDeclaration();
@@ -24,7 +24,7 @@ import java.io.IOException;
public final class PackageData {
@NotNull
public static PackageData readPackageDataFrom(@NotNull byte[] bytes) {
public static PackageData read(@NotNull byte[] bytes) {
try {
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
NameResolver nameResolver = NameSerializationUtil.deserializeNameResolver(in);
@@ -2,15 +2,10 @@ package org.jetbrains.jet.descriptors.serialization.descriptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.descriptors.serialization.DescriptorFinder;
import org.jetbrains.jet.descriptors.serialization.DescriptorDeserializer;
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
@@ -22,7 +17,40 @@ import java.util.List;
public abstract class DeserializedPackageMemberScope extends DeserializedMemberScope {
@NotNull
public static DeserializedPackageMemberScope createScopeFromPackageData(
@NotNull NamespaceDescriptor packageDescriptor,
@NotNull final PackageData packageData,
@NotNull DescriptorFinder descriptorFinder,
@NotNull AnnotationDeserializer deserializer,
@NotNull LockBasedStorageManager storageManager
) {
final NameResolver nameResolver = packageData.getNameResolver();
DescriptorDeserializer descriptorDeserializer = DescriptorDeserializer
.create(storageManager, packageDescriptor, nameResolver, descriptorFinder, deserializer);
List<ProtoBuf.Callable> memberList = packageData.getPackageProto().getMemberList();
return new DeserializedPackageMemberScope(storageManager, packageDescriptor, descriptorDeserializer, memberList, descriptorFinder) {
@Nullable
@Override
protected ReceiverParameterDescriptor getImplicitReceiver() {
return ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER;
}
@NotNull
@Override
protected Collection<Name> getClassNames() {
Collection<Integer> nameIds = packageData.getPackageProto().getClassNameList();
List<Name> result = new ArrayList<Name>(nameIds.size());
for (Integer nameId : nameIds) {
result.add(nameResolver.getName(nameId));
}
return result;
}
};
}
private final DescriptorFinder descriptorFinder;
private final FqName packageFqName;
public DeserializedPackageMemberScope(
@@ -71,10 +99,10 @@ public abstract class DeserializedPackageMemberScope extends DeserializedMemberS
private <T extends Collection<? super ClassDescriptor>> T findClassifiers(T result, boolean object) {
for (Name className : getClassNames()) {
ClassDescriptor classDescriptor = (ClassDescriptor) getClassDescriptor(className);
assert classDescriptor != null : "Class not found: " + className;
ClassDescriptor classDescriptor = findClassDescriptor(className, object);
if (classDescriptor.getKind().isObject() == object) {
if (classDescriptor != null) {
assert classDescriptor.getKind().isObject() == object;
result.add(classDescriptor);
}
}