@@ -5,6 +5,7 @@ import devmike.jade.com.annotations.SharedPref
55import devmike.jade.com.annotations.read.*
66import devmike.jade.com.processor.NameStore
77import java.io.File
8+ import java.lang.NullPointerException
89import java.util.EnumSet.range
910import java.util.HashSet
1011import javax.annotation.processing.ProcessingEnvironment
@@ -18,6 +19,7 @@ internal object ProcessorHelper {
1819 const val KAPT_KOTLIN_GENERATED = " kapt.kotlin.generated"
1920 private lateinit var buildClassAccessBuilder: FunSpec .Builder
2021 private lateinit var sharedPrefListenerBuilder: FunSpec .Builder
22+ private lateinit var readAllBuilder : FunSpec .Builder
2123
2224 public fun process (
2325 processingEnv : ProcessingEnvironment ,
@@ -170,7 +172,8 @@ internal object ProcessorHelper {
170172 ReadLong ::class .simpleName,
171173 ReadStringSet ::class .simpleName,
172174 ReadFloat ::class .simpleName,
173- ReadInt ::class .simpleName
175+ ReadInt ::class .simpleName,
176+ ReadAll ::class .simpleName
174177 )
175178
176179 // Select the annotations and use it to generate the appropriate method
@@ -195,44 +198,49 @@ internal object ProcessorHelper {
195198 val readIntAn = annotatedMethod.getAnnotation(ReadInt ::class .java)
196199 val readLongAn = annotatedMethod.getAnnotation(ReadLong ::class .java)
197200 val readFloatAn = annotatedMethod.getAnnotation(ReadFloat ::class .java)
201+ val readAll = annotatedMethod.getAnnotation(ReadAll ::class .java)
198202
199203
200204 if (readFloatAn != null ){
201- annotationBuilder(className,classBuilder,
205+ annotationBuilder(className,
202206 annotatedMethod, Float ::class .simpleName, readFloatAn.defaultValue,
203207 readFloatAn.key)
204208 }
205209
206210 if (readStringAn != null ){
207- annotationBuilder(className,classBuilder,
211+ annotationBuilder(className,
208212 annotatedMethod,
209213 String ::class .java.simpleName,
210214 readStringAn.defaultValue,
211215 readStringAn.key)
212216 }
213217
214218 if (readStringSetAn != null ){
215- annotationBuilder(className,classBuilder, annotatedMethod,
219+ annotationBuilder(className, annotatedMethod,
216220 NameStore .Types .STRINGSET ,
217221 " mutableSetOf(\"\" )" ,
218222 readStringSetAn.key)
219223
220224 }
221225
222226 if (readIntAn != null ){
223- annotationBuilder(className,
224- classBuilder,
225- annotatedMethod,
226- Int ::class .simpleName,
227+ annotationBuilder(className, annotatedMethod, Int ::class .simpleName,
227228 readIntAn.defaultValue,
228229 readIntAn.key)
229230 }
230231
231232 if (readLongAn != null ){
232233
233- annotationBuilder(className,classBuilder, annotatedMethod,
234+ annotationBuilder(className, annotatedMethod,
234235 LONG .simpleName, readLongAn.defaultValue, readLongAn.key)
235236 }
237+
238+ if (readAll != null ){
239+ annotationBuilder(className, annotatedMethod,
240+ MutableMap ::class .java.name,
241+ null ,
242+ NameStore .Variable .READ_ALL )
243+ }
236244 }
237245 }
238246
@@ -251,31 +259,42 @@ internal object ProcessorHelper {
251259 }
252260 }
253261
254- private fun annotationBuilder (className : ClassName ,classBuilder : TypeSpec . Builder ,
262+ private fun annotationBuilder (className : ClassName ,
255263 annotatedMethod : Element , annotatedVarType : String? ,
256- defaultValue : Any , key : String ){
264+ defaultValue : Any? , key : String ){
257265 if (annotatedVarType != null ) {
258- listenerBuilder(className, classBuilder, annotatedMethod, annotatedVarType,
266+ listenerBuilder(className, annotatedMethod, annotatedVarType,
259267 defaultValue, key)
260268 }
261269 }
262270
263- private fun listenerBuilder (className : ClassName , classBuilder : TypeSpec . Builder ,
271+ private fun listenerBuilder (className : ClassName ,
264272 annotatedMethod : Element ,
265- annotatedVarType : String , defaultValue : Any , key : String ){
273+ annotatedVarType : String , defaultValue : Any? , key : String ){
266274
267275 sharedPrefListenerBuilder
268276 .addComment(" Get $annotatedVarType value from SharedPreference" )
269- .addStatement(" if(%N.equals(%S)){(%L as %L).%L(%L.get%L(%S, ${placeHolder(annotatedVarType)} ))}" ,
270- NameStore .Variable .SHARED_VALUE_KEY ,
271- key,
272- NameStore .Variable .CLASS_VAR ,
273- className,
274- annotatedMethod.simpleName.toString(),
275- NameStore .Variable .SHARED_PREF_VALUE ,
276- annotatedVarType,
277- key,
278- defaultValue)
277+ if (key != NameStore .Variable .READ_ALL && defaultValue != null ) {
278+ sharedPrefListenerBuilder.addStatement(
279+ " if(%N.equals(%S)){(%L as %L).%L(%L.get%L(%S, ${placeHolder(annotatedVarType)} ))}" ,
280+ NameStore .Variable .SHARED_VALUE_KEY ,
281+ key,
282+ NameStore .Variable .CLASS_VAR ,
283+ className,
284+ annotatedMethod.simpleName.toString(),
285+ NameStore .Variable .SHARED_PREF_VALUE ,
286+ annotatedVarType,
287+ key,
288+ defaultValue
289+ )
290+ }else {
291+ sharedPrefListenerBuilder.addStatement(" (%L as %L).%L(%L.all)" ,
292+ NameStore .Variable .CLASS_VAR ,
293+ className,
294+ annotatedMethod.simpleName.toString(),
295+ NameStore .Variable .SHARED_PREF_VALUE
296+ )
297+ }
279298
280299 }
281300
@@ -370,6 +389,23 @@ internal object ProcessorHelper {
370389
371390 // }
372391 }
392+
393+ if (an == ReadAll ::class .simpleName){
394+ val readAllAnnotation = annotatedParam.getAnnotation(ReadAll ::class .java)
395+ if (readAllAnnotation != null ){
396+ try {
397+ buildReadSharedPrefValueBuilder.addStatement(
398+ " (%N as %L).%L = %N.all" ,
399+ NameStore .Variable .CLASS_VAR ,
400+ className,
401+ annotatedParam.simpleName,
402+ NameStore .Variable .SHARED_PREF_VALUE
403+ )
404+ }catch (npe: NullPointerException ){
405+ error(npe)
406+ }
407+ }
408+ }
373409 }
374410 }
375411
0 commit comments