Minor, improve error messages when serializing error types

This commit is contained in:
Alexander Udalov
2015-04-10 20:22:45 +03:00
parent 95c4fb16f4
commit 21d9c272c9
4 changed files with 19 additions and 5 deletions
@@ -16,20 +16,24 @@
package org.jetbrains.kotlin.serialization package org.jetbrains.kotlin.serialization
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationArgumentVisitor import org.jetbrains.kotlin.descriptors.annotations.AnnotationArgumentVisitor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.resolve.constants.* import org.jetbrains.kotlin.resolve.constants.*
import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value
import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.Type import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.Type
import org.jetbrains.kotlin.types.ErrorUtils
import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
public object AnnotationSerializer { public object AnnotationSerializer {
public fun serializeAnnotation(annotation: AnnotationDescriptor, stringTable: StringTable): ProtoBuf.Annotation { public fun serializeAnnotation(annotation: AnnotationDescriptor, stringTable: StringTable): ProtoBuf.Annotation {
return with(ProtoBuf.Annotation.newBuilder()) { return with(ProtoBuf.Annotation.newBuilder()) {
val annotationClass = annotation.getType().getConstructor().getDeclarationDescriptor() as? ClassDescriptor val annotationClass = annotation.getType().getConstructor().getDeclarationDescriptor() as? ClassDescriptor
?: error("Annotation type is not a class: ${annotation.getType()}") ?: error("Annotation type is not a class: ${annotation.getType()}")
if (ErrorUtils.isError(annotationClass)) {
error("Unresolved annotation type: ${annotation.getType()}")
}
setId(stringTable.getFqNameIndex(annotationClass)) setId(stringTable.getFqNameIndex(annotationClass))
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor; import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.ErrorUtils;
import static org.jetbrains.kotlin.serialization.ProtoBuf.QualifiedNameTable.QualifiedName; import static org.jetbrains.kotlin.serialization.ProtoBuf.QualifiedNameTable.QualifiedName;
@@ -71,6 +72,10 @@ public class StringTable {
} }
public int getFqNameIndex(@NotNull ClassOrPackageFragmentDescriptor descriptor) { public int getFqNameIndex(@NotNull ClassOrPackageFragmentDescriptor descriptor) {
if (ErrorUtils.isError(descriptor)) {
throw new IllegalStateException("Cannot get FQ name of error class: " + descriptor);
}
QualifiedName.Builder builder = QualifiedName.newBuilder(); QualifiedName.Builder builder = QualifiedName.newBuilder();
if (descriptor instanceof ClassDescriptor) { if (descriptor instanceof ClassDescriptor) {
builder.setKind(QualifiedName.Kind.CLASS); builder.setKind(QualifiedName.Kind.CLASS);
@@ -16,9 +16,7 @@
package org.jetbrains.kotlin.descriptors.annotations package org.jetbrains.kotlin.descriptors.annotations
import org.jetbrains.annotations.Nullable
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import java.util.Collections
public trait Annotations : Iterable<AnnotationDescriptor> { public trait Annotations : Iterable<AnnotationDescriptor> {
@@ -32,7 +30,9 @@ public trait Annotations : Iterable<AnnotationDescriptor> {
override fun findAnnotation(fqName: FqName) = null override fun findAnnotation(fqName: FqName) = null
override fun iterator() = Collections.emptyList<AnnotationDescriptor>().iterator() override fun iterator() = emptyList<AnnotationDescriptor>().iterator()
override fun toString() = "EMPTY"
} }
} }
} }
@@ -60,4 +60,9 @@ public class AnnotationsImpl implements Annotations {
public Iterator<AnnotationDescriptor> iterator() { public Iterator<AnnotationDescriptor> iterator() {
return getAnnotationDescriptors().iterator(); return getAnnotationDescriptors().iterator();
} }
@Override
public String toString() {
return annotations.toString();
}
} }