From 21d9c272c9f312e7348defa893c2f55483d13876 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 10 Apr 2015 20:22:45 +0300 Subject: [PATCH] Minor, improve error messages when serializing error types --- .../kotlin/serialization/AnnotationSerializer.kt | 8 ++++++-- .../org/jetbrains/kotlin/serialization/StringTable.java | 5 +++++ .../kotlin/descriptors/annotations/Annotations.kt | 6 +++--- .../kotlin/descriptors/annotations/AnnotationsImpl.java | 5 +++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt index 348add51bcb..37cd8ef4bc8 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/AnnotationSerializer.kt @@ -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)) diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.java b/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.java index 0022a940cd7..5ad6d07bff3 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.java +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/StringTable.java @@ -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); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt index 5608526f48d..20d862f1bf2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt @@ -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 { @@ -32,7 +30,9 @@ public trait Annotations : Iterable { override fun findAnnotation(fqName: FqName) = null - override fun iterator() = Collections.emptyList().iterator() + override fun iterator() = emptyList().iterator() + + override fun toString() = "EMPTY" } } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.java index 1cc9e0f08f9..18ab45c918c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/AnnotationsImpl.java @@ -60,4 +60,9 @@ public class AnnotationsImpl implements Annotations { public Iterator iterator() { return getAnnotationDescriptors().iterator(); } + + @Override + public String toString() { + return annotations.toString(); + } }