Add stub code for generator

This commit is contained in:
Tobe O 2018-08-24 09:47:37 -04:00
parent 2ba124c12e
commit 41fc6395ff
2 changed files with 25 additions and 3 deletions

View file

@ -21,7 +21,8 @@ Future<OrmBuildContext> buildOrmContext(
bool autoIdAndDateFields, bool autoIdAndDateFields,
{bool heedExclude: true}) async { {bool heedExclude: true}) async {
var buildCtx = await buildContext(clazz, annotation, buildStep, resolver, var buildCtx = await buildContext(clazz, annotation, buildStep, resolver,
autoSnakeCaseNames, autoIdAndDateFields); autoSnakeCaseNames, autoIdAndDateFields,
heedExclude: heedExclude);
var ormAnnotation = reviveORMAnnotation(annotation); var ormAnnotation = reviveORMAnnotation(annotation);
var ctx = new OrmBuildContext( var ctx = new OrmBuildContext(
buildCtx, buildCtx,

View file

@ -1,20 +1,41 @@
import 'dart:async';
import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/element.dart';
import 'package:angel_orm/angel_orm.dart'; import 'package:angel_orm/angel_orm.dart';
import 'package:build/build.dart'; import 'package:build/build.dart';
import 'package:code_builder/code_builder.dart' hide LibraryBuilder;
import 'package:source_gen/source_gen.dart'; import 'package:source_gen/source_gen.dart';
import 'orm_build_context.dart';
Builder ormBuilder(_) { Builder ormBuilder(_) {
return new LibraryBuilder(new OrmGenerator(), return new LibraryBuilder(new OrmGenerator(),
generatedExtension: '.orm.g.dart'); generatedExtension: '.orm.g.dart');
} }
/// Builder that generates `.orm.g.dart`, with an abstract `FooOrm` class.
class OrmGenerator extends GeneratorForAnnotation<ORM> { class OrmGenerator extends GeneratorForAnnotation<ORM> {
final bool autoSnakeCaseNames;
final bool autoIdAndDateFields;
OrmGenerator({this.autoSnakeCaseNames, this.autoIdAndDateFields});
@override @override
generateForAnnotatedElement( Future<String> generateForAnnotatedElement(
Element element, ConstantReader annotation, BuildStep buildStep) { Element element, ConstantReader annotation, BuildStep buildStep) async {
if (element is ClassElement) { if (element is ClassElement) {
var ctx = await buildOrmContext(element, annotation, buildStep,
buildStep.resolver, autoSnakeCaseNames, autoIdAndDateFields);
var lib = buildOrmBaseLibrary(ctx);
return lib.accept(new DartEmitter()).toString();
} else { } else {
throw 'The @Orm() annotation can only be applied to classes.'; throw 'The @Orm() annotation can only be applied to classes.';
} }
} }
Library buildOrmBaseLibrary(OrmBuildContext ctx) {
return new Library((lib) {
});
}
} }