Don't fail on annotated built-ins

Unit.VALUE is annotated right now (with "suppress"), so deserialization was
throwing an exception from AnnotationDeserializer.UNSUPPORTED. Return empty
collections of annotations instead; here we use the fact that it's the only
annotation in built-ins and its presence is useless to the type checker
This commit is contained in:
Alexander Udalov
2014-01-16 23:29:55 +04:00
parent 61ad9fba4a
commit 5cae5c0338
2 changed files with 37 additions and 5 deletions
@@ -60,6 +60,37 @@ public interface AnnotationDeserializer {
}
};
AnnotationDeserializer EMPTY = new AnnotationDeserializer() {
@NotNull
@Override
public Annotations loadClassAnnotations(@NotNull ClassDescriptor descriptor, @NotNull ProtoBuf.Class classProto) {
return Annotations.EMPTY;
}
@NotNull
@Override
public Annotations loadCallableAnnotations(
@NotNull ClassOrPackageFragmentDescriptor container,
@NotNull ProtoBuf.Callable proto,
@NotNull NameResolver nameResolver,
@NotNull AnnotatedCallableKind kind
) {
return Annotations.EMPTY;
}
@NotNull
@Override
public Annotations loadValueParameterAnnotations(
@NotNull ClassOrPackageFragmentDescriptor container,
@NotNull ProtoBuf.Callable callable,
@NotNull NameResolver nameResolver,
@NotNull AnnotatedCallableKind kind,
@NotNull ProtoBuf.Callable.ValueParameter proto
) {
return Annotations.EMPTY;
}
};
enum AnnotatedCallableKind {
FUNCTION,
PROPERTY,
@@ -4,6 +4,7 @@ import jet.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
@@ -24,8 +25,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer.UNSUPPORTED;
class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements PackageFragmentDescriptor {
private final DeserializedPackageMemberScope members;
private final NameResolver nameResolver;
@@ -39,8 +38,9 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
packageFragmentProvider = new BuiltinsPackageFragmentProvider();
members = new DeserializedPackageMemberScope(storageManager, this, UNSUPPORTED, new BuiltInsDescriptorFinder(storageManager),
loadPackage(), nameResolver);
// TODO: support annotations
members = new DeserializedPackageMemberScope(storageManager, this, AnnotationDeserializer.EMPTY,
new BuiltInsDescriptorFinder(storageManager), loadPackage(), nameResolver);
}
@NotNull
@@ -133,7 +133,8 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
private final NotNullLazyValue<Collection<Name>> classNames;
public BuiltInsDescriptorFinder(@NotNull StorageManager storageManager) {
super(storageManager, UNSUPPORTED, packageFragmentProvider);
// TODO: support annotations
super(storageManager, AnnotationDeserializer.EMPTY, packageFragmentProvider);
classNames = storageManager.createLazyValue(new Function0<Collection<Name>>() {
@Override