Minor, improve error messages when serializing error types
This commit is contained in:
+6
-2
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user