Skip to content

Commit 02c18e6

Browse files
committed
Make RemoteObject.subtype more lenient because the protocol lies
The RemoteObject.subtype is not statically known, so the protocol's enum values are insufficient. One value that exists for sure and is not listed is 'trustedtype'. In general, we should make this enum more lenient. This commit introduces the concept of non-exhaustive enums to mark that some enums are actually just strings with some known values. Fixes: #546
1 parent baec9ce commit 02c18e6

File tree

9 files changed

+270
-33
lines changed

9 files changed

+270
-33
lines changed

api/chrome-devtools-kotlin.api

Lines changed: 177 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -49433,36 +49433,190 @@ public final class org/hildan/chrome/devtools/domains/runtime/RemoteObject$Compa
4943349433
public final fun serializer ()Lkotlinx/serialization/KSerializer;
4943449434
}
4943549435

49436-
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype : java/lang/Enum {
49436+
public abstract interface class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
4943749437
public static final field Companion Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$Companion;
49438-
public static final field array Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49439-
public static final field arraybuffer Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49440-
public static final field dataview Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49441-
public static final field date Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49442-
public static final field error Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49443-
public static final field generator Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49444-
public static final field iterator Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49445-
public static final field map Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49446-
public static final field node Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49447-
public static final field null Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49448-
public static final field promise Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49449-
public static final field proxy Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49450-
public static final field regexp Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49451-
public static final field set Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49452-
public static final field typedarray Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49453-
public static final field wasmvalue Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49454-
public static final field weakmap Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49455-
public static final field weakset Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49456-
public static final field webassemblymemory Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49457-
public static fun getEntries ()Lkotlin/enums/EnumEntries;
49458-
public static fun valueOf (Ljava/lang/String;)Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
49459-
public static fun values ()[Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype;
4946049438
}
4946149439

4946249440
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$Companion {
4946349441
public final fun serializer ()Lkotlinx/serialization/KSerializer;
4946449442
}
4946549443

49444+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$NotDefinedInProtocol : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49445+
public static final field Companion Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$NotDefinedInProtocol$Companion;
49446+
public fun <init> (Ljava/lang/String;)V
49447+
public final fun component1 ()Ljava/lang/String;
49448+
public final fun copy (Ljava/lang/String;)Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$NotDefinedInProtocol;
49449+
public static synthetic fun copy$default (Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$NotDefinedInProtocol;Ljava/lang/String;ILjava/lang/Object;)Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$NotDefinedInProtocol;
49450+
public fun equals (Ljava/lang/Object;)Z
49451+
public final fun getValue ()Ljava/lang/String;
49452+
public fun hashCode ()I
49453+
public fun toString ()Ljava/lang/String;
49454+
}
49455+
49456+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$NotDefinedInProtocol$Companion {
49457+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49458+
}
49459+
49460+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$array : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49461+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$array;
49462+
public fun equals (Ljava/lang/Object;)Z
49463+
public fun hashCode ()I
49464+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49465+
public fun toString ()Ljava/lang/String;
49466+
}
49467+
49468+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$arraybuffer : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49469+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$arraybuffer;
49470+
public fun equals (Ljava/lang/Object;)Z
49471+
public fun hashCode ()I
49472+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49473+
public fun toString ()Ljava/lang/String;
49474+
}
49475+
49476+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$dataview : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49477+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$dataview;
49478+
public fun equals (Ljava/lang/Object;)Z
49479+
public fun hashCode ()I
49480+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49481+
public fun toString ()Ljava/lang/String;
49482+
}
49483+
49484+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$date : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49485+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$date;
49486+
public fun equals (Ljava/lang/Object;)Z
49487+
public fun hashCode ()I
49488+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49489+
public fun toString ()Ljava/lang/String;
49490+
}
49491+
49492+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$error : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49493+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$error;
49494+
public fun equals (Ljava/lang/Object;)Z
49495+
public fun hashCode ()I
49496+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49497+
public fun toString ()Ljava/lang/String;
49498+
}
49499+
49500+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$generator : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49501+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$generator;
49502+
public fun equals (Ljava/lang/Object;)Z
49503+
public fun hashCode ()I
49504+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49505+
public fun toString ()Ljava/lang/String;
49506+
}
49507+
49508+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$iterator : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49509+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$iterator;
49510+
public fun equals (Ljava/lang/Object;)Z
49511+
public fun hashCode ()I
49512+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49513+
public fun toString ()Ljava/lang/String;
49514+
}
49515+
49516+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$map : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49517+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$map;
49518+
public fun equals (Ljava/lang/Object;)Z
49519+
public fun hashCode ()I
49520+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49521+
public fun toString ()Ljava/lang/String;
49522+
}
49523+
49524+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$node : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49525+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$node;
49526+
public fun equals (Ljava/lang/Object;)Z
49527+
public fun hashCode ()I
49528+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49529+
public fun toString ()Ljava/lang/String;
49530+
}
49531+
49532+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$null : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49533+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$null;
49534+
public fun equals (Ljava/lang/Object;)Z
49535+
public fun hashCode ()I
49536+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49537+
public fun toString ()Ljava/lang/String;
49538+
}
49539+
49540+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$promise : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49541+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$promise;
49542+
public fun equals (Ljava/lang/Object;)Z
49543+
public fun hashCode ()I
49544+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49545+
public fun toString ()Ljava/lang/String;
49546+
}
49547+
49548+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$proxy : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49549+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$proxy;
49550+
public fun equals (Ljava/lang/Object;)Z
49551+
public fun hashCode ()I
49552+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49553+
public fun toString ()Ljava/lang/String;
49554+
}
49555+
49556+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$regexp : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49557+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$regexp;
49558+
public fun equals (Ljava/lang/Object;)Z
49559+
public fun hashCode ()I
49560+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49561+
public fun toString ()Ljava/lang/String;
49562+
}
49563+
49564+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$set : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49565+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$set;
49566+
public fun equals (Ljava/lang/Object;)Z
49567+
public fun hashCode ()I
49568+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49569+
public fun toString ()Ljava/lang/String;
49570+
}
49571+
49572+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$trustedtype : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49573+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$trustedtype;
49574+
public fun equals (Ljava/lang/Object;)Z
49575+
public fun hashCode ()I
49576+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49577+
public fun toString ()Ljava/lang/String;
49578+
}
49579+
49580+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$typedarray : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49581+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$typedarray;
49582+
public fun equals (Ljava/lang/Object;)Z
49583+
public fun hashCode ()I
49584+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49585+
public fun toString ()Ljava/lang/String;
49586+
}
49587+
49588+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$wasmvalue : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49589+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$wasmvalue;
49590+
public fun equals (Ljava/lang/Object;)Z
49591+
public fun hashCode ()I
49592+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49593+
public fun toString ()Ljava/lang/String;
49594+
}
49595+
49596+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$weakmap : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49597+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$weakmap;
49598+
public fun equals (Ljava/lang/Object;)Z
49599+
public fun hashCode ()I
49600+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49601+
public fun toString ()Ljava/lang/String;
49602+
}
49603+
49604+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$weakset : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49605+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$weakset;
49606+
public fun equals (Ljava/lang/Object;)Z
49607+
public fun hashCode ()I
49608+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49609+
public fun toString ()Ljava/lang/String;
49610+
}
49611+
49612+
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$webassemblymemory : org/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype {
49613+
public static final field INSTANCE Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectSubtype$webassemblymemory;
49614+
public fun equals (Ljava/lang/Object;)Z
49615+
public fun hashCode ()I
49616+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
49617+
public fun toString ()Ljava/lang/String;
49618+
}
49619+
4946649620
public final class org/hildan/chrome/devtools/domains/runtime/RemoteObjectType : java/lang/Enum {
4946749621
public static final field Companion Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectType$Companion;
4946849622
public static final field bigint Lorg/hildan/chrome/devtools/domains/runtime/RemoteObjectType;

protocol-generator/cdp-json-parser/src/main/kotlin/org/hildan/chrome/devtools/protocol/json/JsonProtocolTypes.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ data class JsonDomain(
3030
val dependencies: List<String> = emptyList(),
3131
val types: List<JsonDomainType> = emptyList(),
3232
val commands: List<JsonDomainCommand> = emptyList(),
33-
val events: List<JsonDomainEvent> = emptyList()
33+
val events: List<JsonDomainEvent> = emptyList(),
3434
)
3535

3636
@Serializable
@@ -42,8 +42,14 @@ data class JsonDomainType(
4242
val type: String,
4343
val properties: List<JsonDomainParameter> = emptyList(), // only for type="object"?
4444
val enum: List<String>? = null, // only for type="string"?
45-
val items: ArrayItemDescriptor? = null // only for type="array"?
46-
// add maxItems/minItems? present in the go generator but never appear in the actual protocol JSONs
45+
val items: ArrayItemDescriptor? = null, // only for type="array"?
46+
/**
47+
* True for string types that have [enum] values that don't actually represent the whole set of possible values.
48+
*
49+
* This is a custom marker that's not part of the protocol. It's added to mitigate bugs in the protocol definition.
50+
*/
51+
@Transient
52+
val isNonExhaustiveEnum: Boolean = false,
4753
)
4854

4955
@Serializable
@@ -56,14 +62,28 @@ data class JsonDomainParameter(
5662
val experimental: Boolean = false,
5763
val enum: List<String>? = null, // only for type="string"?
5864
val items: ArrayItemDescriptor? = null, // only for type="array"?
59-
val `$ref`: String? = null
65+
val `$ref`: String? = null,
66+
/**
67+
* True for string types that have [enum] values that don't actually represent the whole set of possible values.
68+
*
69+
* This is a custom marker that's not part of the protocol. It's added to mitigate bugs in the protocol definition.
70+
*/
71+
@Transient
72+
val isNonExhaustiveEnum: Boolean = false,
6073
)
6174

6275
@Serializable
6376
data class ArrayItemDescriptor(
6477
val type: String? = null, // null if $ref is present, string (even for enum), integer, boolean, array?, object
6578
val enum: List<String>? = null, // only for type="string"?
66-
val `$ref`: String? = null
79+
val `$ref`: String? = null,
80+
/**
81+
* True for string types that have [enum] values that don't actually represent the whole set of possible values.
82+
*
83+
* This is a custom marker that's not part of the protocol. It's added to mitigate bugs in the protocol definition.
84+
*/
85+
@Transient
86+
val isNonExhaustiveEnum: Boolean = false,
6787
)
6888

6989
@Serializable

protocol-generator/cdp-kotlin-generator/src/main/kotlin/org/hildan/chrome/devtools/protocol/generator/DomainTypesGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ private fun DomainTypeDeclaration.toDataClassTypeSpec(type: ChromeDPType.Object)
3232
}.build()
3333

3434
private fun DomainTypeDeclaration.toEnumAndSerializerTypeSpecs(type: ChromeDPType.Enum, experimentalDomain: Boolean): List<TypeSpec> =
35-
if (experimental || experimentalDomain) {
35+
if (experimental || experimentalDomain || type.isNonExhaustive) {
3636
val serializerTypeSpec = serializerForFCEnum(names.className, type.enumValues)
3737
val serializerClass = ClassName(names.packageName, serializerTypeSpec.name!!)
3838
listOf(serializerTypeSpec, toFCEnumTypeSpec(type, serializerClass))

protocol-generator/cdp-kotlin-generator/src/main/kotlin/org/hildan/chrome/devtools/protocol/model/Model.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import kotlinx.serialization.json.JsonElement
66
import kotlinx.serialization.json.JsonObject
77
import org.hildan.chrome.devtools.protocol.json.*
88
import org.hildan.chrome.devtools.protocol.names.*
9+
import kotlin.Boolean
910
import kotlin.reflect.KClass
1011

1112
interface ChromeDPElement {
@@ -94,6 +95,7 @@ private fun JsonDomainType.toDomainTypeDeclaration(domain: DomainNaming) = Domai
9495
arrayItemType = items,
9596
ref = null,
9697
domain = domain,
98+
isNonExhaustiveEnum = isNonExhaustiveEnum,
9799
),
98100
)
99101

@@ -123,6 +125,7 @@ private fun JsonDomainParameter.toParameter(domain: DomainNaming): ChromeDPParam
123125
arrayItemType = items,
124126
ref = `$ref`,
125127
domain = domain,
128+
isNonExhaustiveEnum = isNonExhaustiveEnum,
126129
)
127130
val namedRef = (type as? ChromeDPType.NamedRef) ?: error("Nested enums or objects are not allowed in parameters")
128131

@@ -162,7 +165,10 @@ sealed class ChromeDPType {
162165
}
163166
}
164167

165-
data class Enum(val enumValues: List<String>) : ChromeDPType()
168+
data class Enum(
169+
val enumValues: List<String>,
170+
val isNonExhaustive: Boolean,
171+
) : ChromeDPType()
166172

167173
data class Object(val properties: List<ChromeDPParameter>) : ChromeDPType()
168174

@@ -173,14 +179,15 @@ sealed class ChromeDPType {
173179
enumValues: List<String>?,
174180
arrayItemType: ArrayItemDescriptor?,
175181
ref: String?,
176-
domain: DomainNaming
182+
domain: DomainNaming,
183+
isNonExhaustiveEnum: Boolean,
177184
) = when (type) {
178185
"any" -> NamedRef.DynamicValue
179186
"boolean" -> NamedRef.Primitive(Boolean::class)
180187
"integer" -> NamedRef.Primitive(Int::class)
181188
"number" -> NamedRef.Primitive(Double::class)
182189
"string" -> when {
183-
enumValues != null -> Enum(enumValues)
190+
enumValues != null -> Enum(enumValues = enumValues, isNonExhaustive = isNonExhaustiveEnum)
184191
else -> NamedRef.Primitive(String::class)
185192
}
186193
"array" -> NamedRef.Array(
@@ -202,6 +209,7 @@ sealed class ChromeDPType {
202209
arrayItemType = null,
203210
ref = arrayItemDescriptor.`$ref`,
204211
domain = domain,
212+
isNonExhaustiveEnum = arrayItemDescriptor.isNonExhaustiveEnum,
205213
) as? NamedRef ?: error("Array item type is not a named ref")
206214

207215
private fun reference(ref: String, domain: DomainNaming): NamedRef.Reference {

protocol-generator/cdp-kotlin-generator/src/main/kotlin/org/hildan/chrome/devtools/protocol/preprocessing/EnumFixer.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ private class EnumFixer {
7979
inferredName = inferredName,
8080
sources = listOf(InferenceSource(name, containingType)),
8181
enumValues = enum!!,
82+
nonExhaustive = isNonExhaustiveEnum,
8283
deprecated = deprecated,
8384
experimental = experimental,
8485
allContainersAreDeprecated = containerIsDeprecated,
@@ -134,13 +135,14 @@ private data class InferredExtraEnumType(
134135
val inferredName: String,
135136
val sources: List<InferenceSource>,
136137
val enumValues: List<String>,
138+
val nonExhaustive: Boolean,
137139
val deprecated: Boolean,
138140
val experimental: Boolean,
139141
val allContainersAreDeprecated: Boolean,
140142
val allContainersAreExperimental: Boolean,
141143
) {
142144
val generatedDescription = "This enum doesn't have a proper description because it was generated from " +
143-
"${if (sources.size > 1) "" else "an "}inline declaration${if (sources.size > 1) "s" else ""}. " +
145+
"${if (sources.size > 1) "inline declarations" else "an inline declaration"}. " +
144146
"Its name was inferred based on the place${if (sources.size > 1) "s" else ""} where it is used:\n" +
145147
" - ${sources.joinToString("\n - ") { it.locationDescription }}"
146148
}
@@ -197,6 +199,7 @@ private fun InferredExtraEnumType.toTypeDeclaration(): JsonDomainType = JsonDoma
197199
properties = emptyList(),
198200
enum = enumValues,
199201
items = null,
202+
isNonExhaustiveEnum = nonExhaustive,
200203
)
201204

202205
private fun String.capitalize() = replaceFirstChar { it.titlecase() }

0 commit comments

Comments
 (0)