Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions bin/model_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:model_generator/config/pubspec_config.dart';
import 'package:model_generator/config/yml_generator_config.dart';
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/model/custom_model.dart';
import 'package:model_generator/model/model/enum_model.dart';
import 'package:model_generator/model/model/json_converter_model.dart';
import 'package:model_generator/model/model/object_model.dart';
import 'package:model_generator/run_process/run_process.dart';
import 'package:model_generator/util/list_extensions.dart';
import 'package:model_generator/writer/enum_model_writer.dart';
import 'package:model_generator/writer/object_model_writer.dart';
import 'package:path/path.dart';
Expand Down Expand Up @@ -100,20 +98,9 @@ void writeToFiles(
}
String? content;
if (model is ObjectModel) {
final extendsModelfields = <Field>[];
var extendsModelextends = model.extendsModel;
while (extendsModelextends != null) {
final extendsModelextendsModel = modelGeneratorConfig.models
.firstWhereOrNull(
(element) => element.name == extendsModelextends)
as ObjectModel?; // ignore: avoid_as
extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []);
extendsModelextends = extendsModelextendsModel?.extendsModel;
}
content = ObjectModelWriter(
pubspecConfig,
model,
extendsModelfields,
modelGeneratorConfig,
).write();
} else if (model is EnumModel) {
Expand Down
18 changes: 16 additions & 2 deletions lib/writer/object_model_writer.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:model_generator/model/field.dart';
import 'package:model_generator/model/item_type/map_type.dart';
import 'package:model_generator/util/generic_type.dart';
import 'package:model_generator/util/list_extensions.dart';

import '../config/pubspec_config.dart';
import '../config/yml_generator_config.dart';
Expand All @@ -15,17 +16,16 @@ class ObjectModelWriter {
'// GENERATED CODE - DO NOT MODIFY BY HAND';
final PubspecConfig pubspecConfig;
final ObjectModel jsonModel;
final List<Field> extendsFields;
final YmlGeneratorConfig yamlConfig;

const ObjectModelWriter(
this.pubspecConfig,
this.jsonModel,
this.extendsFields,
this.yamlConfig,
);

String write() {
final extendsFields = _getExtendedFields(jsonModel, yamlConfig);
final sb = StringBuffer()
..writeln(autoGeneratedWarning)
..writeln();
Expand Down Expand Up @@ -351,4 +351,18 @@ class ObjectModelWriter {
'List<Map<String, dynamic>> serialize${jsonModel.name}List(List<${jsonModel.name}> objects)')
..writeln(' => objects.map((object) => object.toJson()).toList();');
}

List<Field> _getExtendedFields(
ObjectModel model, YmlGeneratorConfig ymlConfig) {
final extendsModelfields = <Field>[];
var extendsModelextends = model.extendsModel;
while (extendsModelextends != null) {
final extendsModelextendsModel = ymlConfig.models.firstWhereOrNull(
(element) => element.name == extendsModelextends)
as ObjectModel?; // ignore: avoid_as
extendsModelfields.addAll(extendsModelextendsModel?.fields ?? []);
extendsModelextends = extendsModelextendsModel?.extendsModel;
}
return extendsModelfields;
}
}
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/array/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'info', required: true)
@JsonKey(name: 'info', required: true, includeIfNull: false)
final List<String> info;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/converter/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Person:
- DateTimeConverter
properties:
birthDay:
type: DateTime
type: DateTime?
DateTimeConverter:
path: user/person/
type: json_converter
6 changes: 3 additions & 3 deletions test/writer/object_model_writer/converter/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
@DateTimeConverter()
class Person {
@JsonKey(name: 'birthday')
final DateTime? birthday;
@JsonKey(name: 'birthDay', includeIfNull: false)
final DateTime? birthDay;

const Person({
this.birthday,
this.birthDay,
});

factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/custom-from-to/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Person:
path: user/person/
type: object
properties:
time: Time
time: Time?
Time:
path: user/person/
type: custom_from_to_json
4 changes: 2 additions & 2 deletions test/writer/object_model_writer/custom-from-to/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'time', fromJson: handleTimeFromJson, toJson: handleTimeToJson)
Time? time;
final Time? time;

Person({
const Person({
this.time,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ Person:
firstName:
description: A good description
type: String
default_field: "'test'"
default_value: "'test'"
disallow_null: true
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName', required: false, disallowNullValue: true)
@JsonKey(name: 'firstName', required: false, disallowNullValue: true, includeIfNull: false)
final String firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ Person:
firstName:
description: A good description
type: String
default_field: "'test'"
default_value: "'test'"
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName', required: false, disallowNullValue: false)
@JsonKey(name: 'firstName', required: false, disallowNullValue: false, includeIfNull: false)
final String firstName;

const Person({
Expand Down
4 changes: 2 additions & 2 deletions test/writer/object_model_writer/default-field/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ Person:
properties:
firstName:
description: A good description
type: string
default_field: "'test'"
type: String?
default_value: "'test'"
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/default-field/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Admin:
type: object
extends: User
properties:
permission: String?
permission: String

User:
path: user/person/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ class Admin extends User {

const Admin({
required this.permission,
required String name,
required String email,
String? email,
String? name,
}) : super(
name: name,
email: email,
name: name,
);

factory Admin.fromJson(Map<String, dynamic> json) => _$AdminFromJson(json);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ User:
type: object
extends: Person
properties:
email: String?
email: String

Person:
path: user/person/
Expand Down
6 changes: 2 additions & 4 deletions test/writer/object_model_writer/extend-fields/config.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
User:
path: user/person/
type: object
extends: Person
properties:
email: String?
email: String

Person:
path: user/person/
type: object
properties:
name: String?
name: String
6 changes: 3 additions & 3 deletions test/writer/object_model_writer/ignore/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false)
final String? firstName;
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false)
String? firstName;

const Person({
Person({
this.firstName,
});

Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/import_sorting/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ BModel:
path: user/b_model/
type: object
properties:
firstName: AModel?
aModel: AModel?
AModel:
path: user/a_model/
type: object
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Person:
path: user/person/
type: object
properties:
firstName:
include_if_null: true
type: String?
20 changes: 20 additions & 0 deletions test/writer/object_model_writer/include-if-null-true/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// GENERATED CODE - DO NOT MODIFY BY HAND

import 'package:json_annotation/json_annotation.dart';

part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
final String? firstName;

const Person({
this.firstName,
});

factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

Map<String, dynamic> toJson() => _$PersonToJson(this);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name: model_generator_example

model_generator:
config_path: model_generator/config.yaml
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/includeFromJson/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ Person:
firstName:
includeFromJson: false
includeToJson: false
include_if_null: false
type: String?
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeFromJson: false, includeToJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeFromJson: false, includeToJson: false)
final String? firstName;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/includeToJson/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName', includeToJson: false)
@JsonKey(name: 'firstName', includeIfNull: false, includeToJson: false)
final String? firstName;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/map-reference/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'info')
@JsonKey(name: 'info', includeIfNull: false)
final Map<String, Person>? info;

const Person({
Expand Down
2 changes: 1 addition & 1 deletion test/writer/object_model_writer/non-final/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'gender')
@JsonKey(name: 'gender', includeIfNull: false)
String? gender;

Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;
@JsonKey(name: 'lastName')
final String? lastName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person {
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ part 'person.g.dart';
@JsonSerializable(explicitToJson: true)
class Person {
///A good description
@JsonKey(name: 'firstName')
@JsonKey(name: 'firstName', includeIfNull: false)
final String? firstName;

const Person({
Expand Down
Loading