1616import javax .lang .model .element .Modifier ;
1717import javax .lang .model .element .TypeElement ;
1818import javax .lang .model .element .VariableElement ;
19- import javax .lang .model .type .TypeKind ;
2019import javax .lang .model .type .TypeMirror ;
2120import javax .lang .model .util .ElementFilter ;
2221import javax .tools .Diagnostic ;
@@ -34,7 +33,7 @@ static MapperGenerator create(TypeElement element, ProcessingEnvironment env) {
3433
3534 private final TypeElement element ;
3635 private final ProcessingEnvironment processingEnv ;
37- private List <Mapping > mappings ;
36+ private List <MappingInfo > mappings ;
3837
3938 private MapperGenerator (TypeElement mapperElement , ProcessingEnvironment processingEnvironment ) {
4039 this .processingEnv = processingEnvironment ;
@@ -49,7 +48,7 @@ public TypeSpec generate() {
4948 .addModifiers (Modifier .PUBLIC )
5049 .addSuperinterface (ClassName .get (element ));
5150
52- for (Mapping mapping : mappings ) {
51+ for (MappingInfo mapping : mappings ) {
5352 MethodSpec methodSpec = generateMappingMethod (mapping );
5453 implBuilder .addMethod (methodSpec );
5554 }
@@ -60,39 +59,39 @@ public TypeSpec generate() {
6059 private void collectMappings () {
6160 for (ExecutableElement method : ElementFilter .methodsIn (element .getEnclosedElements ())) {
6261 try {
63- mappings .add (new Mapping (method ));
62+ mappings .add (new MappingInfo (method ));
6463 } catch (IllegalArgumentException exc ) {
6564 processingEnv .getMessager ().printMessage (Diagnostic .Kind .WARNING , exc .getMessage (), method );
6665 }
6766 }
6867 }
6968
70- private MethodSpec generateMappingMethod (Mapping mapping ) {
71- ExecutableElement constructorElement = getConstructorElement (mapping .target .toString ());
69+ private MethodSpec generateMappingMethod (MappingInfo mapping ) {
70+ ExecutableElement constructorElement = getConstructorElement (mapping .getTargetType () .toString ());
7271 List <? extends VariableElement > constructorParameters = constructorElement .getParameters ();
7372
74- Map <String , ExecutableElement > argumentGetters = getGetters (mapping .source .toString ());
73+ Map <String , ExecutableElement > argumentGetters = getGetters (mapping .getSourceType () .toString ());
7574
7675
7776 if (constructorParameters .size () != argumentGetters .size ()) {
78- processingEnv .getMessager ().printMessage (Diagnostic .Kind .MANDATORY_WARNING , "Target constructor have different arguments count" , mapping .method );
77+ processingEnv .getMessager ().printMessage (Diagnostic .Kind .MANDATORY_WARNING , "Target constructor have different arguments count" , mapping .getMethod () );
7978 }
8079
81- MethodSpec .Builder methodBuilder = MethodSpec .overriding (mapping .method );
80+ MethodSpec .Builder methodBuilder = MethodSpec .overriding (mapping .getMethod () );
8281 StringBuilder statementBuilder = new StringBuilder ();
8382 statementBuilder
8483 .append ("return new " )
85- .append (mapping .target .toString ())
84+ .append (mapping .getTargetType () .toString ())
8685 .append ("(" );
8786
8887 String separator = "" ;
8988 for (VariableElement constructorParameter : constructorParameters ) {
9089 String sourceFieldName = constructorParameter .getSimpleName ().toString ().toLowerCase ();
91- com .devindi .mapper .Mapping annotation = mapping .method .getAnnotation (com .devindi .mapper .Mapping .class );
90+ com .devindi .mapper .Mapping annotation = mapping .getMethod () .getAnnotation (com .devindi .mapper .Mapping .class );
9291 if (annotation != null && annotation .target ().toLowerCase ().equals (constructorParameter .getSimpleName ().toString ().toLowerCase ())) {
9392 sourceFieldName = annotation .source ();
9493 }
95- Mappings mappings = mapping .method .getAnnotation (Mappings .class );
94+ Mappings mappings = mapping .getMethod () .getAnnotation (Mappings .class );
9695 if (mappings != null ) {
9796 for (com .devindi .mapper .Mapping fieldMapping : mappings .value ()) {
9897 if (fieldMapping != null && fieldMapping .target ().toLowerCase ().equals (constructorParameter .getSimpleName ().toString ().toLowerCase ())) {
@@ -107,18 +106,18 @@ private MethodSpec generateMappingMethod(Mapping mapping) {
107106 }
108107 if (!constructorParameter .asType ().equals (getter .getReturnType ())) {
109108 //getter and constructor parameter have different types
110- // TODO: 01.09.17 try to map/convert source field to target field
111- Mapping depMapping = findMapping (getter .getReturnType (), constructorParameter .asType ());
109+ MappingInfo depMapping = findMapping (getter .getReturnType (), constructorParameter .asType ());
112110 if (depMapping == null ) {
113- processingEnv .getMessager ().printMessage (Diagnostic .Kind .ERROR , "Getter return type and constructor argument type are different" , mapping .method );
111+ // TODO: 06.09.17 generate method
112+ processingEnv .getMessager ().printMessage (Diagnostic .Kind .ERROR , "Getter return type and constructor argument type are different" , mapping .getMethod ());
114113 } else {
115114 statementBuilder
116115 .append (separator )
117116 .append ('\n' )
118117 .append ("this." )
119- .append (depMapping .method .getSimpleName ())
118+ .append (depMapping .getMethod () .getSimpleName ())
120119 .append ("(" )
121- .append (mapping .method .getParameters ().get (0 ).getSimpleName ())
120+ .append (mapping .getMethod () .getParameters ().get (0 ).getSimpleName ())
122121 .append ("." )
123122 .append (getter .getSimpleName ())
124123 .append ("()" )
@@ -129,7 +128,7 @@ private MethodSpec generateMappingMethod(Mapping mapping) {
129128 statementBuilder
130129 .append (separator )
131130 .append ('\n' )
132- .append (mapping .method .getParameters ().get (0 ).getSimpleName ())
131+ .append (mapping .getMethod () .getParameters ().get (0 ).getSimpleName ())
133132 .append ("." )
134133 .append (getter .getSimpleName ())
135134 .append ("()" );
@@ -167,33 +166,16 @@ private Map<String, ExecutableElement> getGetters(String className) {
167166 return gettersMap ;
168167 }
169168
170- private Mapping findMapping (TypeMirror source , TypeMirror target ) {
171- for (Mapping mapping : mappings ) {
172- if (mapping .source .equals (source ) && mapping .target .equals (target )) {
169+ private MappingInfo findMapping (TypeMirror source , TypeMirror target ) {
170+ for (MappingInfo mapping : mappings ) {
171+ if (mapping .getSourceType () .equals (source ) && mapping .getTargetType () .equals (target )) {
173172 return mapping ;
174173 }
175174 }
176175 return null ;
177176 }
178177
179- private static class Mapping {
180- private final TypeMirror source ;
181- private final TypeMirror target ;
182- private final ExecutableElement method ;
183-
184- public Mapping (ExecutableElement method ) {
185- this .method = method ;
186- target = method .getReturnType ();
187- if (target .getKind ().equals (TypeKind .VOID )) {
188- throw new IllegalArgumentException ("Mapper method should return value. Method will be ignored" );
189- }
190- List <? extends VariableElement > parameters = method .getParameters ();
191- if (parameters .size () != 1 ) {
192- throw new IllegalArgumentException ("Mapper method should have only 1 parameter. Method will be ignored" );
193- }
194- source = parameters .get (0 ).asType ();
195- }
178+ private MappingInfo generateMapping (TypeMirror source , TypeMirror target ) {
179+ return null ;
196180 }
197-
198-
199181}
0 commit comments