@@ -59,21 +59,24 @@ public JavaFile generateCode(){
5959
6060 for (HelperSavedValues value : elementArrayList ) {
6161 Name fieldName = value .getSimpleName ();
62- if (value .getFieldType ().toString ().equals ("java.lang.String" )){
63- saveMethodBuilder .addStatement ("outState.putString($S,recoverActivity.$N)" , fieldName .toString
64- ().toUpperCase (),fieldName );
65- recoverMethodBuilder .addStatement ("recoverActivity.$N = savedInstanceState.getString($S)" ,fieldName ,
66- fieldName .toString ().toUpperCase ());
67- }else if (value .getFieldType ().toString ().equals ("int" )){
68- saveMethodBuilder .addStatement ("outState.putInt($S,recoverActivity.$N)" , fieldName .toString
69- ().toUpperCase (),fieldName );
70- recoverMethodBuilder .addStatement ("recoverActivity.$N = savedInstanceState.getInt($S)" ,fieldName ,
71- fieldName .toString ().toUpperCase ());
72- }else if (value .getFieldType () instanceof Serializable ){
73- saveMethodBuilder .addStatement ("outState.putSerializable($S,recoverActivity.$S)" , fieldName .toString
74- ().toUpperCase (),fieldName );
75- recoverMethodBuilder .addStatement ("recoverActivity.$N = savedInstanceState.getSerializable($S)" ,
76- fieldName , fieldName .toString ().toUpperCase ());
62+ String fieldType = value .getFieldType ().toString ();
63+ String type = getFieldType (fieldType );
64+ if (!type .equals ("unKnow" )){
65+ addMethodStatement (saveMethodBuilder ,recoverMethodBuilder , type , fieldName );
66+ }else {
67+ // Class c = Class.forName(fieldType);
68+ // Class[] interfaces = c.getInterfaces();
69+ // for (Class inter : interfaces) {
70+ // saveMethodBuilder.addStatement("//$N", inter.getName());
71+ // }
72+ if ( value .getFieldType () instanceof Serializable ){
73+ saveMethodBuilder .addStatement ("outState.putSerializable($S,recoverActivity.$S)" , fieldName .toString
74+ ().toUpperCase (),fieldName );
75+ recoverMethodBuilder .addStatement ("recoverActivity.$N = savedInstanceState.getSerializable($S)" ,
76+ fieldName , fieldName .toString ().toUpperCase ());
77+ }else {
78+ saveMethodBuilder .addStatement ("//$S" , fieldType );
79+ }
7780 }
7881 }
7982 recoverMethodBuilder .endControlFlow ();
@@ -102,4 +105,56 @@ private String getPackageName() {
102105 private String getCacheClassName (){
103106 return encloseElement .getSimpleName ().toString () + "_Cache" ;
104107 }
108+
109+ private String upperFirstWord (String str ){
110+ if (str != null ){
111+ char [] ch = str .toCharArray ();
112+ if (ch [0 ] >= 'a' && ch [0 ] <= 'z' ) {
113+ ch [0 ] = (char ) (ch [0 ] - 32 );
114+ }
115+ return new String (ch );
116+ }else {
117+ return "" ;
118+ }
119+ }
120+
121+ private void addSaveMethodStatement (MethodSpec .Builder saveMethodBuilder , String str , Name fieldName ){
122+ saveMethodBuilder .addStatement (String .format ("outState.put%s($S,recoverActivity.$N)" ,upperFirstWord (str )),
123+ fieldName .toString ().toUpperCase (),fieldName );
124+ }
125+
126+ private void addRecoverMethodStatement (MethodSpec .Builder recoverMethodBuilder , String str , Name fieldName ){
127+ recoverMethodBuilder .addStatement (String .format ("recoverActivity.$N = savedInstanceState.get%s($S)" ,upperFirstWord (str )),
128+ fieldName , fieldName .toString ().toUpperCase ());
129+ }
130+
131+ private void addMethodStatement (MethodSpec .Builder saveMethodBuilder ,MethodSpec .Builder recoverMethodBuilder , String str , Name fieldName ){
132+ addSaveMethodStatement (saveMethodBuilder ,str ,fieldName );
133+ addRecoverMethodStatement (recoverMethodBuilder ,str ,fieldName );
134+ }
135+
136+ private String getFieldType (String fieldType ){
137+ String type ;
138+ if (fieldType .equals ("java.lang.String" )){
139+ type = "String" ;
140+ }else if (fieldType .equals ("int" ) || fieldType .equals ("java.lang.Integer" )){
141+ type = "Int" ;
142+ }else if (fieldType .equals ("short" ) || fieldType .equals ("java.lang.Short" )){
143+ type = "Short" ;
144+ }else if (fieldType .equals ("double" ) || fieldType .equals ("java.lang.Double" )){
145+ type = "Double" ;
146+ }else if (fieldType .equals ("float" ) || fieldType .equals ("java.lang.Float" )){
147+ type = "Float" ;
148+ }else if (fieldType .equals ("boolean" ) || fieldType .equals ("java.lang.Boolean" )){
149+ type = "Boolean" ;
150+ }else if (fieldType .equals ("char" )){
151+ type = "Char" ;
152+ }else if (fieldType .equals ("char[]" )){
153+ type = "CharArray" ;
154+ }else {
155+ type = "unKnow" ;
156+ }
157+ return type ;
158+ }
159+
105160}
0 commit comments