From c0d57bf8b100c0767bfd6d6b50a169c2598280d4 Mon Sep 17 00:00:00 2001 From: Tobe O Date: Tue, 27 Feb 2018 14:47:42 -0500 Subject: [PATCH] Add final fields --- ...analysis-options => analysis_options.yaml} | 0 .../lib/angel_serialize_generator.dart | 16 ++- .../test/models/author.g.dart | 130 ++---------------- .../test/models/book.g.dart | 67 ++------- 4 files changed, 34 insertions(+), 179 deletions(-) rename angel_serialize_generator/{.analysis-options => analysis_options.yaml} (100%) diff --git a/angel_serialize_generator/.analysis-options b/angel_serialize_generator/analysis_options.yaml similarity index 100% rename from angel_serialize_generator/.analysis-options rename to angel_serialize_generator/analysis_options.yaml diff --git a/angel_serialize_generator/lib/angel_serialize_generator.dart b/angel_serialize_generator/lib/angel_serialize_generator.dart index 2ce77263..f06d6ec7 100644 --- a/angel_serialize_generator/lib/angel_serialize_generator.dart +++ b/angel_serialize_generator/lib/angel_serialize_generator.dart @@ -9,6 +9,7 @@ import 'package:code_builder/code_builder.dart'; import 'package:source_gen/source_gen.dart' hide LibraryBuilder; import 'build_context.dart'; import 'context.dart'; + part 'model.dart'; class JsonModelGenerator extends GeneratorForAnnotation { @@ -19,8 +20,8 @@ class JsonModelGenerator extends GeneratorForAnnotation { {this.autoSnakeCaseNames: true, this.autoIdAndDateFields: true}); @override - Future generateForAnnotatedElement(Element element, - ConstantReader reader, BuildStep buildStep) async { + Future generateForAnnotatedElement( + Element element, ConstantReader reader, BuildStep buildStep) async { if (element.kind != ElementKind.CLASS) throw 'Only classes can be annotated with a @Serializable() annotation.'; @@ -42,7 +43,16 @@ class JsonModelGenerator extends GeneratorForAnnotation { void generateClass(BuildContext ctx, FileBuilder file) { file.body.add(new Class((clazz) { + clazz.name = ctx.modelClassNameRecase.pascalCase; + for (var field in ctx.fields) { + clazz.fields.add(new Field((b) { + b + ..name = field.name + ..modifier = FieldModifier.final$ + ..type = new Reference(field.type.name); + })); + } })); } -} \ No newline at end of file +} diff --git a/angel_serialize_generator/test/models/author.g.dart b/angel_serialize_generator/test/models/author.g.dart index 9aa6dd76..b9ec7010 100644 --- a/angel_serialize_generator/test/models/author.g.dart +++ b/angel_serialize_generator/test/models/author.g.dart @@ -6,132 +6,28 @@ part of angel_serialize.test.models.author; // Generator: JsonModelGenerator // ************************************************************************** -class Author extends _Author { - @override - String id; +class Author { + final String id; - @override - String name; + final String name; - @override - int age; + final int age; - @override - List books; + final List books; - @override - Book newestBook; + final Book newestBook; - @override - DateTime createdAt; + final DateTime createdAt; - @override - DateTime updatedAt; - - Author( - {this.id, - this.name, - this.age, - this.books, - this.newestBook, - this.createdAt, - this.updatedAt}); - - factory Author.fromJson(Map data) { - return new Author( - id: data['id'], - name: data['name'], - age: data['age'], - books: data['books'] is List - ? data['books'] - .map((x) => - x == null ? null : (x is Book ? x : new Book.fromJson(x))) - .toList() - : null, - newestBook: data['newest_book'] == null - ? null - : (data['newest_book'] is Book - ? data['newest_book'] - : new Book.fromJson(data['newest_book'])), - createdAt: data['created_at'] is DateTime - ? data['created_at'] - : (data['created_at'] is String - ? DateTime.parse(data['created_at']) - : null), - updatedAt: data['updated_at'] is DateTime - ? data['updated_at'] - : (data['updated_at'] is String - ? DateTime.parse(data['updated_at']) - : null)); - } - - Map toJson() => { - 'id': id, - 'name': name, - 'age': age, - 'books': books, - 'newest_book': newestBook, - 'created_at': createdAt == null ? null : createdAt.toIso8601String(), - 'updated_at': updatedAt == null ? null : updatedAt.toIso8601String() - }; - - static Author parse(Map map) => new Author.fromJson(map); - - Author clone() { - return new Author.fromJson(toJson()); - } + final DateTime updatedAt; } -class Library extends _Library { - @override - String id; +class Library { + final String id; - @override - Map collection; + final Map collection; - @override - DateTime createdAt; + final DateTime createdAt; - @override - DateTime updatedAt; - - Library({this.id, this.collection, this.createdAt, this.updatedAt}); - - factory Library.fromJson(Map data) { - return new Library( - id: data['id'], - collection: data['collection'] is Map - ? data['collection'].keys.fold({}, (out, k) { - out[k] = data['collection'][k] == null - ? null - : (data['collection'][k] is Book - ? data['collection'][k] - : new Book.fromJson(data['collection'][k])); - return out; - }) - : null, - createdAt: data['created_at'] is DateTime - ? data['created_at'] - : (data['created_at'] is String - ? DateTime.parse(data['created_at']) - : null), - updatedAt: data['updated_at'] is DateTime - ? data['updated_at'] - : (data['updated_at'] is String - ? DateTime.parse(data['updated_at']) - : null)); - } - - Map toJson() => { - 'id': id, - 'collection': collection, - 'created_at': createdAt == null ? null : createdAt.toIso8601String(), - 'updated_at': updatedAt == null ? null : updatedAt.toIso8601String() - }; - - static Library parse(Map map) => new Library.fromJson(map); - - Library clone() { - return new Library.fromJson(toJson()); - } + final DateTime updatedAt; } diff --git a/angel_serialize_generator/test/models/book.g.dart b/angel_serialize_generator/test/models/book.g.dart index 7385a354..eaafb316 100644 --- a/angel_serialize_generator/test/models/book.g.dart +++ b/angel_serialize_generator/test/models/book.g.dart @@ -6,69 +6,18 @@ part of angel_serialize.test.models.book; // Generator: JsonModelGenerator // ************************************************************************** -class Book extends _Book { - @override - String id; +class Book { + final String id; - @override - String author; + final String author; - @override - String title; + final String title; - @override - String description; + final String description; - @override - int pageCount; + final int pageCount; - @override - DateTime createdAt; + final DateTime createdAt; - @override - DateTime updatedAt; - - Book( - {this.id, - this.author, - this.title, - this.description, - this.pageCount, - this.createdAt, - this.updatedAt}); - - factory Book.fromJson(Map data) { - return new Book( - id: data['id'], - author: data['author'], - title: data['title'], - description: data['description'], - pageCount: data['page_count'], - createdAt: data['created_at'] is DateTime - ? data['created_at'] - : (data['created_at'] is String - ? DateTime.parse(data['created_at']) - : null), - updatedAt: data['updated_at'] is DateTime - ? data['updated_at'] - : (data['updated_at'] is String - ? DateTime.parse(data['updated_at']) - : null)); - } - - Map toJson() => { - 'id': id, - 'author': author, - 'title': title, - 'description': description, - 'page_count': pageCount, - 'created_at': createdAt == null ? null : createdAt.toIso8601String(), - 'updated_at': updatedAt == null ? null : updatedAt.toIso8601String() - }; - - static Book parse(Map map) => new Book.fromJson(map); - - Book clone() { - return new Book.fromJson(toJson()); - } + final DateTime updatedAt; }