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
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationArgumentVisitor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.resolve.constants.*
import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value
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.builtins.KotlinBuiltIns
public object AnnotationSerializer {
public fun serializeAnnotation(annotation: AnnotationDescriptor, stringTable: StringTable): ProtoBuf.Annotation {
return with(ProtoBuf.Annotation.newBuilder()) {
val annotationClass = annotation.getType().getConstructor().getDeclarationDescriptor() as? ClassDescriptor
?: error("Annotation type is not a class: ${annotation.getType()}")
if (ErrorUtils.isError(annotationClass)) {
error("Unresolved annotation type: ${annotation.getType()}")
}
setId(stringTable.getFqNameIndex(annotationClass))
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.ErrorUtils;
import static org.jetbrains.kotlin.serialization.ProtoBuf.QualifiedNameTable.QualifiedName;
@@ -71,6 +72,10 @@ public class StringTable {
}
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();
if (descriptor instanceof ClassDescriptor) {
builder.setKind(QualifiedName.Kind.CLASS);
@@ -16,9 +16,7 @@
package org.jetbrains.kotlin.descriptors.annotations
import org.jetbrains.annotations.Nullable
import org.jetbrains.kotlin.name.FqName
import java.util.Collections
public trait Annotations : Iterable<AnnotationDescriptor> {
@@ -32,7 +30,9 @@ public trait Annotations : Iterable<AnnotationDescriptor> {
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() {
return getAnnotationDescriptors().iterator();
}
@Override
public String toString() {
return annotations.toString();
}
}