Skip to content

Commit 7a8657a

Browse files
feat: add missing setter in union interface leading to compile errors in implementing classes (#2232)
* feat: add missing setter on union interface leading to compile errors in classes implementing that union * Fix snapshot --------- Co-authored-by: Jonas Lagoni <jonas-lt@live.dk>
1 parent 48f43e1 commit 7a8657a

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

src/generators/java/JavaPreset.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ export interface UnionPreset<R extends AbstractRenderer, O>
4848
discriminatorGetter?: (
4949
args: PresetArgs<R, O, ConstrainedUnionModel>
5050
) => string;
51+
discriminatorSetter?: (
52+
args: PresetArgs<R, O, ConstrainedUnionModel>
53+
) => string;
5154
}
5255

5356
export type RecordPresetType<O> = InterfacePreset<RecordRenderer, O>;

src/generators/java/renderers/UnionRenderer.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export class UnionRenderer extends JavaRenderer<ConstrainedUnionModel> {
2020
const content = [];
2121

2222
if (this.model.options.discriminator) {
23-
content.push(await this.runDiscriminatorAccessorPreset());
23+
content.push(await this.runDiscriminatorGetterPreset());
24+
content.push(await this.runDiscriminatorSetterPreset());
2425
}
2526
content.push(await this.runAdditionalContentPreset());
2627

@@ -32,9 +33,13 @@ export class UnionRenderer extends JavaRenderer<ConstrainedUnionModel> {
3233
]);
3334
}
3435

35-
runDiscriminatorAccessorPreset(): Promise<string> {
36+
runDiscriminatorGetterPreset(): Promise<string> {
3637
return this.runPreset('discriminatorGetter');
3738
}
39+
40+
runDiscriminatorSetterPreset(): Promise<string> {
41+
return this.runPreset('discriminatorSetter');
42+
}
3843
}
3944

4045
export const JAVA_DEFAULT_UNION_PRESET: UnionPresetType<JavaOptions> = {
@@ -49,5 +54,16 @@ export const JAVA_DEFAULT_UNION_PRESET: UnionPresetType<JavaOptions> = {
4954
return `${model.options.discriminator.type} get${FormatHelpers.toPascalCase(
5055
model.options.discriminator.discriminator
5156
)}();`;
57+
},
58+
discriminatorSetter({ model }) {
59+
if (!model.options.discriminator?.type) {
60+
return '';
61+
}
62+
63+
return `void set${FormatHelpers.toPascalCase(
64+
model.options.discriminator.discriminator
65+
)}(${model.options.discriminator.type} ${FormatHelpers.toCamelCase(
66+
model.options.discriminator.discriminator
67+
)});`;
5268
}
5369
};

test/generators/java/__snapshots__/JavaGenerator.spec.ts.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Array [
1212
*/
1313
public interface Animal {
1414
String getPetType();
15+
void setPetType(String petType);
1516
}",
1617
"public class Boxer implements Animal, Dog {
1718
@JsonProperty(\\"breed\\")
@@ -144,6 +145,7 @@ Array [
144145
*/
145146
public interface Vehicle {
146147
VehicleType getVehicleType();
148+
void setVehicleType(VehicleType vehicleType);
147149
}",
148150
"public class Car implements Vehicle {
149151
private final VehicleType vehicleType = VehicleType.CAR;
@@ -301,6 +303,7 @@ Array [
301303
*/
302304
public interface Pet {
303305
CloudEventType getType();
306+
void setType(CloudEventType type);
304307
}",
305308
"public class Dog implements Pet {
306309
@NotNull
@@ -805,6 +808,7 @@ Array [
805808
*/
806809
public interface Vehicle {
807810
VehicleType getVehicleType();
811+
void setVehicleType(VehicleType vehicleType);
808812
}",
809813
"public class Cargo {
810814
@Valid

test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ Array [
9393
*/
9494
public interface Vehicle {
9595
String getVehicleType();
96+
void setVehicleType(String vehicleType);
9697
}",
9798
"public class Car implements Vehicle {
9899
@JsonProperty(\\"vehicle_type\\")
@@ -151,6 +152,7 @@ Array [
151152
*/
152153
public interface Vehicle {
153154
String getVehicleType();
155+
void setVehicleType(String vehicleType);
154156
}",
155157
"public class Car implements Vehicle {
156158
@JsonProperty(\\"vehicleType\\")
@@ -197,6 +199,7 @@ Array [
197199
*/
198200
public interface Vehicle {
199201
String getVehicleType();
202+
void setVehicleType(String vehicleType);
200203
}",
201204
"public class Car implements Vehicle {
202205
@JsonProperty(\\"vehicleType\\")

0 commit comments

Comments
 (0)