99import java .util .Collection ;
1010import java .util .Collections ;
1111import java .util .HashSet ;
12- import java .util .LinkedList ;
1312import java .util .List ;
1413import java .util .Set ;
14+ import net .openhft .hashing .LongHashFunction ;
1515
1616/**
1717 *
2020public class ClassBlock extends PermissionBlock {
2121
2222 private String packageName ;
23- private Set <String > imports = new HashSet <>();
23+ private final Set <String > imports = new HashSet <>();
2424 protected String className = null ;
2525 private String extend = null ;
2626 protected List <String > implementList ;
27+ private boolean enableSerializedId ;
2728
2829 public ClassBlock (String name ) {
2930 this .className = name ;
3031 this .implementList = Collections .EMPTY_LIST ;
32+ this .enableSerializedId = false ;
3133 }
3234
33- public String getClassName ()
34- {
35+ public String getClassName () {
3536 return this .className ;
3637 }
37-
38+
39+ public ClassBlock enableSerializedId (boolean enable ) {
40+ this .enableSerializedId = enable ;
41+ return this ;
42+ }
43+
3844 public ClassBlock extend (String className ) {
3945 this .extend = className ;
4046 return this ;
4147 }
4248
43- public ClassBlock withPackageName (String packageName ) {
49+ public ClassBlock withPackageName (String packageName ) {
4450 this .packageName = packageName ;
4551 return this ;
4652 }
@@ -53,12 +59,11 @@ public Collection<String> getImports() {
5359 return imports ;
5460 }
5561
56-
5762 public ClassBlock withImports (String ... imports ) {
58- Arrays .asList (imports ).stream ().filter (p -> !p .substring (0 ,p .lastIndexOf ("." )).equals ("java.lang" )).forEach (imp -> this .imports .add (imp ));
63+ Arrays .asList (imports ).stream ().filter (p -> !p .substring (0 , p .lastIndexOf ("." )).equals ("java.lang" )).forEach (imp -> this .imports .add (imp ));
5964 return this ;
6065 }
61-
66+
6267 public ClassBlock implement (String ... clsList ) {
6368 implementList = Arrays .asList (clsList );
6469 return this ;
@@ -76,16 +81,15 @@ public FunctionBlock createFunction(String functionName) {
7681 return pushBlock (new FunctionBlock (functionName ));
7782 }
7883
79- public void emptyBlock ()
80- {
84+ public void emptyBlock () {
8185 pushBlock (new CodeBlock () {
8286 @ Override
8387 protected Statement generateHeader () {
8488 return null ;
8589 }
8690 });
8791 }
88-
92+
8993 public FunctionBlock createGetter (Var var ) {
9094 FunctionBlock func = new FunctionBlock ("get" + (("" + var .var .charAt (0 )).toUpperCase () + var .var .substring (1 )));
9195 func .stmt ().append ("return" ).append2 ("this." ).append (var .var ).end ();
@@ -100,12 +104,23 @@ public void createSetter(Var var) {
100104 pushBlock (func .withAccess (AccessLevel .PUBLIC ));
101105 }
102106
107+ @ Override
103108 protected Statement generateHeader () {
104109 return stmt ().append (level )
105110 .append (isStatic , "static" )
106111 .append (isFinal , "final" )
107112 .append ("class" ).append (className )
108113 .append (extend != null , "extends " + extend )
109- .append (!implementList .isEmpty (),"implements " +String .join ("," , implementList ));
114+ .append (!implementList .isEmpty (), "implements " + String .join ("," , implementList ));
115+ }
116+
117+ @ Override
118+ public void generateCode (int tabIndex , StringBuilder builder ) {
119+ if (enableSerializedId ) {
120+ StringBuilder output = new StringBuilder ();
121+ super .generateCode (0 , output );
122+ var ("long" , "serialVersionUID" ).withAccess (AccessLevel .PUBLIC ).withFinal ().withStatic ().assign ("" + LongHashFunction .xx ().hashChars (output .toString ())+"L" ).end ();
123+ }
124+ super .generateCode (tabIndex , builder );
110125 }
111126}
0 commit comments