Added modelClassNameReCas
This commit is contained in:
parent
387f05009b
commit
50153dedf3
4 changed files with 59 additions and 2 deletions
48
angel_serialize_generator/lib/angel_serialize_generator.dart
Normal file
48
angel_serialize_generator/lib/angel_serialize_generator.dart
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
library angel_serialize_generator;
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
import 'package:analyzer/dart/element/element.dart';
|
||||||
|
import 'package:analyzer/dart/element/type.dart';
|
||||||
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:build/build.dart';
|
||||||
|
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<Serializable> {
|
||||||
|
final bool autoSnakeCaseNames;
|
||||||
|
final bool autoIdAndDateFields;
|
||||||
|
|
||||||
|
const JsonModelGenerator(
|
||||||
|
{this.autoSnakeCaseNames: true, this.autoIdAndDateFields: true});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> generateForAnnotatedElement(Element element,
|
||||||
|
ConstantReader reader, BuildStep buildStep) async {
|
||||||
|
if (element.kind != ElementKind.CLASS)
|
||||||
|
throw 'Only classes can be annotated with a @Serializable() annotation.';
|
||||||
|
|
||||||
|
var ctx = await buildContext(
|
||||||
|
element,
|
||||||
|
serializable,
|
||||||
|
buildStep,
|
||||||
|
await buildStep.resolver,
|
||||||
|
autoSnakeCaseNames != false,
|
||||||
|
autoIdAndDateFields != false);
|
||||||
|
|
||||||
|
var lib = new File((b) {
|
||||||
|
generateClass(ctx, b);
|
||||||
|
});
|
||||||
|
|
||||||
|
var buf = lib.accept(new DartEmitter());
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
void generateClass(BuildContext ctx, FileBuilder file) {
|
||||||
|
file.body.add(new Class((clazz) {
|
||||||
|
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
|
@ -57,7 +57,8 @@ Future<BuildContext> buildContext(
|
||||||
|
|
||||||
if (autoIdAndDateFields != false) {
|
if (autoIdAndDateFields != false) {
|
||||||
if (!fieldNames.contains('id')) {
|
if (!fieldNames.contains('id')) {
|
||||||
var idField = new ShimFieldImpl('id', lib.context.typeProvider.stringType);
|
var idField =
|
||||||
|
new ShimFieldImpl('id', lib.context.typeProvider.stringType);
|
||||||
ctx.fields.insert(0, idField);
|
ctx.fields.insert(0, idField);
|
||||||
ctx.shimmed['id'] = true;
|
ctx.shimmed['id'] = true;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +79,6 @@ Future<BuildContext> buildContext(
|
||||||
ctx.shimmed[key] = true;
|
ctx.shimmed[key] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
|
@ -88,5 +88,6 @@ Future<BuildContext> buildContext(
|
||||||
class ShimFieldImpl extends FieldElementImpl {
|
class ShimFieldImpl extends FieldElementImpl {
|
||||||
@override
|
@override
|
||||||
final DartType type;
|
final DartType type;
|
||||||
|
|
||||||
ShimFieldImpl(String name, this.type) : super(name, -1);
|
ShimFieldImpl(String name, this.type) : super(name, -1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
import 'package:analyzer/dart/element/element.dart';
|
import 'package:analyzer/dart/element/element.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
import 'package:recase/recase.dart';
|
||||||
|
|
||||||
/// A base context for building serializable classes.
|
/// A base context for building serializable classes.
|
||||||
class BuildContext {
|
class BuildContext {
|
||||||
|
ReCase _modelClassNameRecase;
|
||||||
|
|
||||||
/// A map of field names to resolved names from `@Alias()` declarations.
|
/// A map of field names to resolved names from `@Alias()` declarations.
|
||||||
final Map<String, String> aliases = {};
|
final Map<String, String> aliases = {};
|
||||||
|
|
||||||
|
@ -26,6 +29,9 @@ class BuildContext {
|
||||||
? originalClassName.substring(1)
|
? originalClassName.substring(1)
|
||||||
: originalClassName;
|
: originalClassName;
|
||||||
|
|
||||||
|
/// A [ReCase] instance reflecting on the [modelClassName].
|
||||||
|
ReCase get modelClassNameRecase => _modelClassNameRecase ??= new ReCase(modelClassName);
|
||||||
|
|
||||||
/// The [FieldElement] pointing to the primary key.
|
/// The [FieldElement] pointing to the primary key.
|
||||||
FieldElement get primaryKeyField =>
|
FieldElement get primaryKeyField =>
|
||||||
fields.firstWhere((f) => f.name == primaryKeyName);
|
fields.firstWhere((f) => f.name == primaryKeyName);
|
||||||
|
|
2
angel_serialize_generator/lib/model.dart
Normal file
2
angel_serialize_generator/lib/model.dart
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
part of angel_serialize_generator;
|
||||||
|
|
Loading…
Reference in a new issue