Skip to content

Commit 9ea793b

Browse files
committed
implemented empty mapper impl
1 parent f9e32ad commit 9ea793b

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed
Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,54 @@
11
import 'package:analyzer/dart/element/element.dart';
22
import 'package:build/src/builder/build_step.dart';
3+
import 'package:code_builder/code_builder.dart';
4+
import 'package:dart_style/dart_style.dart';
35
import 'package:source_gen/source_gen.dart';
46
import 'package:dartstruct/dartstruct.dart';
57

68
class DartStructGenerator extends GeneratorForAnnotation<Mapper> {
9+
final _emitter = DartEmitter();
10+
final _formatter = DartFormatter();
11+
712
@override
8-
generateForAnnotatedElement(
9-
Element element, ConstantReader annotation, BuildStep buildStep) {
10-
return null;
13+
String generateForAnnotatedElement(Element element, ConstantReader annotation, BuildStep buildStep) {
14+
15+
if (element is! ClassElement) {
16+
throw InvalidGenerationSourceError('${element.displayName} cannot be annotated with @Mapper',
17+
element: element,
18+
todo: 'Remove @Mapper annotation'
19+
);
20+
}
21+
22+
final classElement = element as ClassElement;
23+
24+
if (!classElement.constructors.any((c) => c.isDefaultConstructor)) {
25+
throw InvalidGenerationSourceError('${element.displayName} must provide a default constructor',
26+
element: element,
27+
todo: 'Provide a default constructor'
28+
);
29+
}
30+
31+
final classBuilder = ClassBuilder()
32+
..name = '${classElement.displayName}Impl'
33+
..abstract = false
34+
..extend = refer(classElement.displayName)
35+
..methods.addAll(_generateMethods(classElement.methods));
36+
37+
final mapperImpl = classBuilder.build();
38+
39+
final code = '${mapperImpl.accept(_emitter)}';
40+
41+
return _formatter.format(code);
42+
43+
}
44+
45+
List<Method> _generateMethods(List<MethodElement> methods) {
46+
if (methods.any((method) => method.isAbstract)) {
47+
throw InvalidGenerationSourceError('Not implemented yet',
48+
todo: 'remove all methods'
49+
);
50+
}
51+
52+
return <Method>[];
1153
}
1254
}

generator/pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ environment:
88
dependencies:
99
build: ^1.2.2
1010
source_gen: ^0.9.5
11+
code_builder: ^3.2.1
12+
dart_style: ^1.3.3
1113
dartstruct:
1214
path: ../core
1315

0 commit comments

Comments
 (0)