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