@@ -2,6 +2,7 @@ package devmike.jade.com.compiler.sharedpreference
22
33import com.squareup.kotlinpoet.*
44import devmike.jade.com.annotations.SharedPref
5+ import devmike.jade.com.annotations.preference.*
56import devmike.jade.com.annotations.sharedpreference.*
67import devmike.jade.com.compiler.FileGenerator
78import devmike.jade.com.compiler.NameStore
@@ -19,7 +20,6 @@ class ProcessorHelper {
1920
2021 private lateinit var buildClassAccessBuilder: FunSpec .Builder
2122 private lateinit var sharedPrefListenerBuilder: FunSpec .Builder
22- private lateinit var readAllBuilder : FunSpec .Builder
2323 private lateinit var generatedRoot: String
2424 private lateinit var packageName : String
2525 private lateinit var classBuilder : TypeSpec .Builder
@@ -99,13 +99,22 @@ class ProcessorHelper {
9999
100100
101101
102- for (method in ElementFilter .constructorsIn(typeElement.enclosedElements)) {
103- if (method != null ) {
104- // Create the method where we initialize the SharedPrefence
105- val baseSharedPrefA = method.getAnnotation(SharedPref ::class .java)
102+ for (element in ElementFilter .constructorsIn(typeElement.enclosedElements)) {
103+ if (element != null ) {
104+ // Create the element where we initialize the SharedPrefence
105+ val baseSharedPrefA = element.getAnnotation(SharedPref ::class .java)
106+
107+
108+ // Read data from annotations
109+ val readStringAn = element.getAnnotation(ReadString ::class .java)
110+ val readStringSetAn = element.getAnnotation(ReadStringSet ::class .java)
111+ val readIntAn = element.getAnnotation(ReadInt ::class .java)
112+ val readLongAn = element.getAnnotation(ReadLong ::class .java)
113+ val readFloatAn = element.getAnnotation(ReadFloat ::class .java)
114+ val readAll = element.getAnnotation(ReadAll ::class .java)
106115
107116 if (baseSharedPrefA != null ) {
108- // Generate the method that access SharedPreferences
117+ // Generate the element that access SharedPreferences
109118 buildSharedPrefBuilder.addModifiers(KModifier .PUBLIC )
110119 .addStatement(
111120 " this.%L = %N.getSharedPreferences(%S, %L.%L)" , // Generate the sharedpreference
@@ -128,54 +137,102 @@ class ProcessorHelper {
128137 .addStatement(" %N()" , NameStore .Method .SHARED_PREF_READ_VALUE )
129138 // .addComment("Read the saved value from the SharedPreference")
130139
131- }
132140
133141
142+ if (readFloatAn != null ) {
143+ annotationBuilder(
144+ className,
145+ element, Float ::class .simpleName, readFloatAn.defaultValue,
146+ readFloatAn.key
147+ )
148+ }
149+
150+ if (readStringAn != null ) {
151+ annotationBuilder(
152+ className,
153+ element,
154+ String ::class .java.simpleName,
155+ readStringAn.defaultValue,
156+ readStringAn.key
157+ )
158+ }
134159
160+ if (readStringSetAn != null ) {
161+ annotationBuilder(
162+ className, element,
163+ NameStore .Types .STRINGSET ,
164+ " mutableSetOf(\"\" )" ,
165+ readStringSetAn.key
166+ )
135167
136- // Create method for inserting values into shared preference
137- insertValueMethodBuilder(classBuilder)
168+ }
138169
170+ if (readIntAn != null ) {
171+ annotationBuilder(
172+ className, element, Int ::class .simpleName,
173+ readIntAn.defaultValue,
174+ readIntAn.key
175+ )
176+ }
139177
178+ if (readLongAn != null ) {
140179
141- val buildReadSharedPrefValueBuilder = FunSpec .builder(NameStore .Method .SHARED_PREF_READ_VALUE )
142- .addModifiers(KModifier .PRIVATE )
143- // Generate the statement that saved value into the SharedPreference
144- for (annotatedParam in ElementFilter .fieldsIn(typeElement.enclosedElements)) {
145- if (annotatedParam != null ) {
146- val annotatedList = listOf (
147- ReadString ::class .simpleName,
148- ReadLong ::class .simpleName,
149- ReadStringSet ::class .simpleName,
150- ReadFloat ::class .simpleName,
151- ReadInt ::class .simpleName,
152- ReadAll ::class .simpleName
180+ annotationBuilder(
181+ className, element,
182+ LONG .simpleName, readLongAn.defaultValue, readLongAn.key
153183 )
184+ }
154185
155- // Select the annotations and use it to generate the appropriate method
156- pickAnnotation(
157- buildReadSharedPrefValueBuilder, annotatedList,
158- annotatedParam, className
186+ if (readAll != null ) {
187+ annotationBuilder(
188+ className, element,
189+ MutableMap ::class .java.name,
190+ null ,
191+ NameStore .Variable .READ_ALL
159192 )
160193 }
161194
162- }
163195
164196
197+ val buildReadSharedPrefValueBuilder = FunSpec .builder(NameStore .Method .SHARED_PREF_READ_VALUE )
198+ .addModifiers(KModifier .PRIVATE )
199+ // Generate the statement that saved value into the SharedPreference
200+ for (annotatedParam in ElementFilter .fieldsIn(typeElement.enclosedElements)) {
201+ if (annotatedParam != null ) {
202+ val annotatedList = listOf (
203+ ReadString ::class .simpleName,
204+ ReadLong ::class .simpleName,
205+ ReadStringSet ::class .simpleName,
206+ ReadFloat ::class .simpleName,
207+ ReadInt ::class .simpleName,
208+ ReadAll ::class .simpleName
209+ )
210+
211+ pickAnnotation(
212+ buildReadSharedPrefValueBuilder, annotatedList,
213+ annotatedParam, className
214+ )
215+ }
165216
166- classBuilder.addFunction(buildClassAccessBuilder.build())
167- classBuilder.addFunction(buildReadSharedPrefValueBuilder.build())
168- classBuilder.addFunction(buildSharedPrefBuilder.build())
169- classBuilder.addFunction(sharedPrefListenerBuilder.build())
170- wipeOutSharedPref(classBuilder)
217+ }
218+
219+
220+ // Create element for inserting values into shared preference
221+ insertValueMethodBuilder(classBuilder)
222+ classBuilder.addFunction(buildReadSharedPrefValueBuilder.build())
223+ classBuilder.addFunction(buildClassAccessBuilder.build())
224+ classBuilder.addFunction(buildSharedPrefBuilder.build())
225+ classBuilder.addFunction(sharedPrefListenerBuilder.build())
226+ wipeOutSharedPref(classBuilder)
171227
172- val file = File (generatedRoot).apply { mkdir() }
228+ val file = File (generatedRoot).apply { mkdir() }
173229
174- FileGenerator .builder(packageName,
175- NameStore .getGeneratedSharedPrefClassName(typeName))
176- .addType(classBuilder.build())
177- .addFile(file)
178- .build()
230+
231+ FileGenerator .builder(packageName, NameStore .getGeneratedSharedPrefClassName(typeName))
232+ .addType(classBuilder.build())
233+ .addFile(file)
234+ .build()
235+ }
179236
180237
181238 }
0 commit comments