From f2ca788ea35abfa18dbf5a74df50847bd16e93e5 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 28 Apr 2016 16:45:36 +0300 Subject: [PATCH] Serialize error type to proto when generating stubs --- .../serialization/JvmSerializerExtension.java | 13 +++++++++++++ .../kotlin/serialization/DescriptorSerializer.java | 9 ++++++--- .../kotlin/serialization/SerializerExtension.java | 4 ++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java index 3478baefc44..c29e45031f8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.java @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.codegen.serialization; import com.intellij.openapi.util.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.codegen.ClassBuilderMode; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; @@ -43,6 +44,7 @@ public class JvmSerializerExtension extends SerializerExtension { private final AnnotationSerializer annotationSerializer; private final boolean useTypeTable; private final String moduleName; + private final ClassBuilderMode classBuilderMode; public JvmSerializerExtension(@NotNull JvmSerializationBindings bindings, @NotNull GenerationState state) { this.bindings = bindings; @@ -50,6 +52,7 @@ public class JvmSerializerExtension extends SerializerExtension { this.annotationSerializer = new AnnotationSerializer(stringTable); this.useTypeTable = state.getUseTypeTableInSerializer(); this.moduleName = state.getModuleName(); + this.classBuilderMode = state.getClassBuilderMode(); } @NotNull @@ -144,6 +147,16 @@ public class JvmSerializerExtension extends SerializerExtension { proto.setExtension(JvmProtoBuf.propertySignature, signature); } + @Override + public void serializeErrorType(@NotNull KotlinType type, @NotNull ProtoBuf.Type.Builder builder) { + if (classBuilderMode == ClassBuilderMode.LIGHT_CLASSES_WITH_METADATA) { + builder.setClassName(stringTable.getStringIndex("error.NonExistingClass")); + return; + } + + super.serializeErrorType(type, builder); + } + private class SignatureSerializer { @Nullable public JvmProtoBuf.JvmMethodSignature methodSignature(@Nullable FunctionDescriptor descriptor, @NotNull Method method) { diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java index 2ab7115a1f2..c157c6365cf 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java @@ -459,7 +459,12 @@ public class DescriptorSerializer { @NotNull private ProtoBuf.Type.Builder type(@NotNull KotlinType type) { - assert !type.isError() : "Can't serialize error types: " + type; // TODO + ProtoBuf.Type.Builder builder = ProtoBuf.Type.newBuilder(); + + if (type.isError()) { + extension.serializeErrorType(type, builder); + return builder; + } if (FlexibleTypesKt.isFlexible(type)) { Flexibility flexibility = FlexibleTypesKt.flexibility(type); @@ -475,8 +480,6 @@ public class DescriptorSerializer { return lowerBound; } - ProtoBuf.Type.Builder builder = ProtoBuf.Type.newBuilder(); - ClassifierDescriptor descriptor = type.getConstructor().getDeclarationDescriptor(); if (descriptor instanceof ClassDescriptor) { PossiblyInnerType possiblyInnerType = TypeParameterUtilsKt.buildPossiblyInnerType(type); diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.java b/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.java index eaf76c7a957..784864bf945 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.java +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.java @@ -54,4 +54,8 @@ public abstract class SerializerExtension { public void serializeTypeParameter(@NotNull TypeParameterDescriptor typeParameter, @NotNull ProtoBuf.TypeParameter.Builder proto) { } + + public void serializeErrorType(@NotNull KotlinType type, @NotNull ProtoBuf.Type.Builder builder) { + throw new IllegalStateException("Cannot serialize error type: " + type); + } }