4
4
import java .lang .annotation .Annotation ;
5
5
import java .util .ArrayList ;
6
6
import java .util .HashSet ;
7
- import java .util .LinkedHashMap ;
8
7
import java .util .LinkedHashSet ;
9
8
import java .util .List ;
10
- import java .util .Map ;
11
- import java .util .Map .Entry ;
12
9
import java .util .Set ;
13
10
import java .util .TreeSet ;
14
11
import java .util .stream .Collectors ;
@@ -84,7 +81,7 @@ public class ClassBuilderInfo {
84
81
/** Imported files for this class. */
85
82
private final Set <String > imports = new TreeSet <>();
86
83
/** Members/Fields of this class. */
87
- private final List <ClassMember > members = new ArrayList <>();
84
+ private final List <MemberOrArgument > members = new ArrayList <>();
88
85
/** Interfaces implemented by this class. */
89
86
private final Set <String > implementedInterfaces = new LinkedHashSet <>();
90
87
/** Methods provided by this class. */
@@ -159,7 +156,7 @@ public List<ClassMethod> getMethods() {
159
156
return methods ;
160
157
}
161
158
162
- public List <ClassMember > getMembers () {
159
+ public List <MemberOrArgument > getMembers () {
163
160
return members ;
164
161
}
165
162
@@ -239,33 +236,28 @@ private List<String> createClassFileContent(boolean _staticClass, Set<String> _o
239
236
}
240
237
241
238
// add member fields
242
- for (ClassMember member : members ) {
239
+ for (MemberOrArgument member : members ) {
243
240
if (!member .getAnnotations ().isEmpty ()) {
244
241
content .addAll (member .getAnnotations ().stream ().map (l -> memberIndent + l ).collect (Collectors .toList ()));
245
242
}
246
- String memberType = TypeConverter .getProperJavaClass (member .getType (), allImports );
247
- if (!member .getGenerics ().isEmpty ()) {
248
- memberType += "<" + member .getGenerics ().stream ().map (c -> TypeConverter .getProperJavaClass (c , allImports )).collect (Collectors .joining (" ," )) + ">" ;
249
- }
250
- content .add (memberIndent + "private " + (member .isFinalMember () ? "final " : "" ) + memberType + " "
251
- + member .getName () + ";" );
252
-
243
+ content .add (memberIndent + "private " + member .asOneLineString (allImports , false ) + ";" );
253
244
}
254
245
255
246
if (!getConstructors ().isEmpty ()) {
256
247
content .add ("" );
257
248
for (ClassConstructor constructor : getConstructors ()) {
258
249
String outerIndent = _staticClass ? " " : " " ;
259
250
String cstr = outerIndent + "public " + getClassName () + "(" ;
251
+
260
252
if (!constructor .getSuperArguments ().isEmpty ()) {
261
- cstr += constructor .getSuperArguments ().entrySet (). stream ().map (e -> e .getValue () + " " + e . getKey ( )).collect (Collectors .joining (", " ));
253
+ cstr += constructor .getSuperArguments ().stream ().map (e -> e .asOneLineString ( allImports , false )).collect (Collectors .joining (", " ));
262
254
if (!constructor .getArguments ().isEmpty ()) {
263
255
cstr += ", " ;
264
256
}
265
257
}
258
+
266
259
if (!constructor .getArguments ().isEmpty ()) {
267
- cstr += constructor .getArguments ().entrySet ().stream ()
268
- .map (e -> TypeConverter .getProperJavaClass (e .getValue (), allImports ) + " " + e .getKey ()).collect (Collectors .joining (", " ));
260
+ cstr += constructor .argumentsAsString (allImports );
269
261
}
270
262
271
263
if (constructor .getThrowArguments ().isEmpty ()) {
@@ -279,11 +271,12 @@ private List<String> createClassFileContent(boolean _staticClass, Set<String> _o
279
271
String innerIndent = _staticClass ? " " : " " ;
280
272
281
273
if (!constructor .getSuperArguments ().isEmpty ()) {
282
- content .add (innerIndent + "super(" + String . join ( ", " , constructor . getSuperArguments (). keySet ( )) + ");" );
274
+ content .add (innerIndent + "super(" + constructor . getSuperArguments (). stream (). map ( c -> c . getName ()). collect ( Collectors . joining ( ", " )) + ");" );
283
275
}
276
+
284
277
if (!constructor .getArguments ().isEmpty ()) {
285
- for (Entry < String , String > e : constructor .getArguments (). entrySet ()) {
286
- content .add (innerIndent + "this." + e .getKey ().replaceFirst ("^_(.+)" , "$1" ) + " = " + e .getKey () + ";" );
278
+ for (MemberOrArgument e : constructor .getArguments ()) {
279
+ content .add (innerIndent + "this." + e .getName ().replaceFirst ("^_(.+)" , "$1" ) + " = " + e .getName () + ";" );
287
280
}
288
281
}
289
282
@@ -294,15 +287,15 @@ private List<String> createClassFileContent(boolean _staticClass, Set<String> _o
294
287
content .add ("" );
295
288
296
289
// add getter and setter
297
- for (ClassMember member : members ) {
290
+ for (MemberOrArgument member : members ) {
298
291
String memberType = TypeConverter .getProperJavaClass (member .getType (), allImports );
299
292
300
293
if (!member .getGenerics ().isEmpty ()) {
301
- memberType += "<" + member .getGenerics ().stream ().map (c -> TypeConverter .getProperJavaClass (c , allImports )).collect (Collectors .joining (" , " )) + ">" ;
294
+ memberType += "<" + member .getGenerics ().stream ().map (c -> TypeConverter .getProperJavaClass (c , allImports )).collect (Collectors .joining (", " )) + ">" ;
302
295
}
303
296
304
297
String getterSetterName = StringUtil .snakeToCamelCase (StringUtil .upperCaseFirstChar (member .getName ()));
305
- if (!member .isFinalMember ()) {
298
+ if (!member .isFinalArg ()) {
306
299
content .add (memberIndent + "public void set" + getterSetterName + "("
307
300
+ memberType + " arg) {" );
308
301
content .add (memberIndent + " " + member .getName () + " = arg;" );
@@ -325,7 +318,7 @@ private List<String> createClassFileContent(boolean _staticClass, Set<String> _o
325
318
String clzMth = memberIndent + "public " + (mth .getReturnType () == null ? "void " : TypeConverter .getProperJavaClass (mth .getReturnType (), allImports ) + " " );
326
319
clzMth += mth .getName () + "(" ;
327
320
if (!mth .getArguments ().isEmpty ()) {
328
- clzMth += mth .getArguments ().entrySet (). stream ().map (e -> e .getValue () + " " + e . getKey ( ))
321
+ clzMth += mth .getArguments ().stream ().map (e -> e .asOneLineString ( allImports , true ))
329
322
.collect (Collectors .joining (", " ));
330
323
}
331
324
clzMth += ");" ;
@@ -429,7 +422,7 @@ public static class ClassMethod {
429
422
/** True if method should be final, false otherwise. */
430
423
private final boolean finalMethod ;
431
424
/** Arguments for this method, key is argument name, value is argument type. */
432
- private final Map < String , String > arguments = new LinkedHashMap <>();
425
+ private final List < MemberOrArgument > arguments = new ArrayList <>();
433
426
/** List of annotations for this method. */
434
427
private final List <String > annotations = new ArrayList <>();
435
428
@@ -451,7 +444,7 @@ public boolean isFinalMethod() {
451
444
return finalMethod ;
452
445
}
453
446
454
- public Map < String , String > getArguments () {
447
+ public List < MemberOrArgument > getArguments () {
455
448
return arguments ;
456
449
}
457
450
@@ -462,28 +455,32 @@ public List<String> getAnnotations() {
462
455
}
463
456
464
457
/**
465
- * Pojo which represents a class member/field.
458
+ * Pojo which represents a class member/field or argument .
466
459
*
467
460
* @author hypfvieh
468
461
* @since v3.0.1 - 2018-12-20
469
462
*/
470
- public static class ClassMember {
463
+ public static class MemberOrArgument {
471
464
/** Name of member/field. */
472
465
private final String name ;
473
466
/** Type of member/field (e.g. String, int...). */
474
467
private final String type ;
475
468
/** True to force this member to be final, false otherwise. */
476
- private final boolean finalMember ;
469
+ private final boolean finalArg ;
477
470
/** List of classes/types or placeholders put into diamond operators to use as generics. */
478
471
private final List <String > generics = new ArrayList <>();
479
472
/** List of annotations for this member. */
480
473
private final List <String > annotations = new ArrayList <>();
481
474
482
- public ClassMember (String _name , String _type , boolean _finalMember ) {
475
+ public MemberOrArgument (String _name , String _type , boolean _finalMember ) {
483
476
// repair reserved words by adding 'Param' as appendix
484
477
name = RESERVED .contains (_name ) ? _name + "param" : _name ;
485
478
type = _type ;
486
- finalMember = _finalMember ;
479
+ finalArg = _finalMember ;
480
+ }
481
+
482
+ public MemberOrArgument (String _name , String _type ) {
483
+ this (_name , _type , false );
487
484
}
488
485
489
486
public List <String > getAnnotations () {
@@ -498,14 +495,48 @@ public String getType() {
498
495
return type ;
499
496
}
500
497
501
- public boolean isFinalMember () {
502
- return finalMember ;
498
+ public boolean isFinalArg () {
499
+ return finalArg ;
503
500
}
504
501
505
502
public List <String > getGenerics () {
506
503
return generics ;
507
504
}
508
505
506
+ public String getFullType (Set <String > _allImports ) {
507
+ StringBuilder sb = new StringBuilder ();
508
+ sb .append (TypeConverter .getProperJavaClass (getType (), _allImports ));
509
+
510
+ if (!getGenerics ().isEmpty ()) {
511
+ sb .append ("<" )
512
+ .append (getGenerics ().stream ().map (c -> TypeConverter .getProperJavaClass (c , _allImports )).collect (Collectors .joining (", " )))
513
+ .append (">" );
514
+ }
515
+
516
+ return sb .toString ();
517
+ }
518
+
519
+ public String asOneLineString (Set <String > _allImports , boolean _includeAnnotations ) {
520
+ StringBuilder sb = new StringBuilder ();
521
+
522
+ if (isFinalArg ()) {
523
+ sb .append ("final " );
524
+ }
525
+
526
+ if (_includeAnnotations && !getAnnotations ().isEmpty ()) {
527
+ sb .append (String .join (" " , getAnnotations ()))
528
+ .append (" " );
529
+ }
530
+
531
+ sb .append (getFullType (_allImports ));
532
+
533
+ sb .append (" " );
534
+
535
+ sb .append (getName ());
536
+
537
+ return sb .toString ();
538
+ }
539
+
509
540
}
510
541
511
542
/**
@@ -516,9 +547,9 @@ public List<String> getGenerics() {
516
547
*/
517
548
public static class ClassConstructor {
518
549
/** Map of arguments for the constructor. Key is argument name, value is argument type. */
519
- private final Map < String , String > arguments = new LinkedHashMap <>();
550
+ private final List < MemberOrArgument > arguments = new ArrayList <>();
520
551
/** Map of arguments for the super-constructor. Key is argument name, value is argument type. */
521
- private final Map < String , String > superArguments = new LinkedHashMap <>();
552
+ private final List < MemberOrArgument > superArguments = new ArrayList <>();
522
553
523
554
/** List of throws arguments. */
524
555
private final List <String > throwArguments = new ArrayList <>();
@@ -527,13 +558,17 @@ public List<String> getThrowArguments() {
527
558
return throwArguments ;
528
559
}
529
560
530
- public Map < String , String > getArguments () {
561
+ public List < MemberOrArgument > getArguments () {
531
562
return arguments ;
532
563
}
533
564
534
- public Map < String , String > getSuperArguments () {
565
+ public List < MemberOrArgument > getSuperArguments () {
535
566
return superArguments ;
536
567
}
568
+
569
+ public String argumentsAsString (Set <String > _allImports ) {
570
+ return getArguments ().stream ().map (a -> a .asOneLineString (_allImports , true )).collect (Collectors .joining (", " ));
571
+ }
537
572
}
538
573
539
574
/**
0 commit comments