Skip to content

Commit 2b79489

Browse files
committed
Fixed SharedPreference processor
1 parent 5ab851e commit 2b79489

File tree

5 files changed

+115
-67
lines changed

5 files changed

+115
-67
lines changed

app/src/main/java/devmike/jade/com/jadesharedpreference/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import devmike.jade.com.binder.JadeSharedPreference
1212
import kotlinx.android.synthetic.main.activity_main.*
1313

1414

15-
class MainActivity constructor(): AppCompatActivity() {
15+
class MainActivity @SharedPref("setting") constructor(): AppCompatActivity() {
1616

1717

1818
private lateinit var jsp :JadeSharedPreference

app/src/main/java/devmike/jade/com/jadesharedpreference/TestClass.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import devmike.jade.com.annotations.preference.ReadPrefString
77
import devmike.jade.com.annotations.sharedpreference.ReadString
88
import devmike.jade.com.binder.JadeSharedPreference
99

10-
class TestClass constructor(context: Context){
10+
class TestClass @SettingsPreference constructor(context: Context){
1111

1212
var jsp: JadeSharedPreference = JadeSharedPreference.plug(this, context)
1313

1414
@ReadPrefString("string")
1515
var TEST_KEY: String ="test_key"
1616

1717
fun init(context: Context){
18+
jsp.plug(this, context)
1819
}
1920

2021

compiler/src/main/java/devmike/jade/com/compiler/NameStore.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ package devmike.jade.com.compiler
22

33
public object NameStore {
44

5-
//public fun getGeneratedClassName(className: String) = className.plus(BindingSuffix.
6-
// GENERATED_CLASS_SUFFIX)
7-
85
const val SUFFIX_SHAREDPREF_CLASSNAME: String ="JSP"
96
const val SUFFIX_PREFERENCE_CLASSNAME: String ="JSP_Preference"
107

@@ -58,17 +55,11 @@ public object NameStore {
5855
const val INIT_SHAREDPREF ="plug"
5956
const val CLEAR_SHARE_PREF ="clearSharedPref"
6057
const val REMOVE_FROM_SHARE_PREF= "removeValue"
61-
const val ADD_OTHER_SET ="customSet"
62-
const val UNPLUG ="unplug"
6358
const val UNREGISTER_SHARED_PREF ="unregisterSharedPref"
6459
const val SHAREDPREFERENCE_CHANGED="onSharedPreferenceChanged"
6560
}
6661

6762
object Types{
68-
const val STRING ="String"
69-
const val FLOAT ="Float"
70-
const val INT ="Int"
71-
const val LONG ="Long"
7263
const val STRINGSET ="StringSet"
7364
}
7465

compiler/src/main/java/devmike/jade/com/compiler/preferences/PreferenceProcessorHelper.kt

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class PreferenceProcessorHelper {
2222

2323
private lateinit var buildClassAccessBuilder: FunSpec.Builder
2424
private lateinit var sharedPrefListenerBuilder: FunSpec.Builder
25-
private lateinit var readAllBuilder: FunSpec.Builder
2625
private lateinit var generatedRoot: String
2726
private lateinit var packageName: String
2827
private lateinit var classBuilder: TypeSpec.Builder
@@ -108,23 +107,23 @@ class PreferenceProcessorHelper {
108107
// val buildReadSharedPrefValueBuilder = FunSpec.builder(NameStore.Method.SHARED_PREF_READ_VALUE)
109108
// .addModifiers(KModifier.PRIVATE)
110109

111-
for (method in ElementFilter.constructorsIn(typeElement.enclosedElements)) {
112-
if (method != null) {
113-
//Create the method where we initialize the SharedPrefence
114-
val settingsPref = method.getAnnotation(SettingsPreference::class.java)
110+
for (element in ElementFilter.constructorsIn(typeElement.enclosedElements)) {
111+
if (element != null) {
112+
//Create the element where we initialize the SharedPrefence
113+
val settingsPref = element.getAnnotation(SettingsPreference::class.java)
115114

116115

117116
//Read data from annotations
118-
val readStringAn = method.getAnnotation(ReadPrefString::class.java)
119-
val readStringSetAn = method.getAnnotation(ReadPrefStringSet::class.java)
120-
val readIntAn = method.getAnnotation(ReadPrefInt::class.java)
121-
val readLongAn = method.getAnnotation(ReadPrefLong::class.java)
122-
val readFloatAn = method.getAnnotation(ReadPrefFloat::class.java)
123-
val readAll = method.getAnnotation(ReadAllPref::class.java)
117+
val readStringAn = element.getAnnotation(ReadPrefString::class.java)
118+
val readStringSetAn = element.getAnnotation(ReadPrefStringSet::class.java)
119+
val readIntAn = element.getAnnotation(ReadPrefInt::class.java)
120+
val readLongAn = element.getAnnotation(ReadPrefLong::class.java)
121+
val readFloatAn = element.getAnnotation(ReadPrefFloat::class.java)
122+
val readAll = element.getAnnotation(ReadAllPref::class.java)
124123

125124
if (settingsPref != null) {
126125

127-
//Generate code for a method that access preference
126+
//Generate code for a element that access preference
128127
buildSharedPrefBuilder.addModifiers(KModifier.PUBLIC)
129128
.addStatement(
130129
"this.%L = %L.%N(%L)", //Generate the sharedpreference
@@ -144,19 +143,19 @@ class PreferenceProcessorHelper {
144143
.addStatement("%N()", NameStore.Method.SHARED_PREF_READ_VALUE)
145144

146145

147-
146+
//Read Preference file if a variable is annotated
148147
if (readFloatAn != null) {
149148
annotationBuilder(
150149
className,
151-
method, Float::class.simpleName, readFloatAn.defaultValue,
150+
element, Float::class.simpleName, readFloatAn.defaultValue,
152151
readFloatAn.key
153152
)
154153
}
155154

156155
if (readStringAn != null) {
157156
annotationBuilder(
158157
className,
159-
method,
158+
element,
160159
String::class.java.simpleName,
161160
readStringAn.defaultValue,
162161
readStringAn.key
@@ -165,7 +164,7 @@ class PreferenceProcessorHelper {
165164

166165
if (readStringSetAn != null) {
167166
annotationBuilder(
168-
className, method,
167+
className, element,
169168
NameStore.Types.STRINGSET,
170169
"mutableSetOf(\"\")",
171170
readStringSetAn.key
@@ -175,7 +174,7 @@ class PreferenceProcessorHelper {
175174

176175
if (readIntAn != null) {
177176
annotationBuilder(
178-
className, method, Int::class.simpleName,
177+
className, element, Int::class.simpleName,
179178
readIntAn.defaultValue,
180179
readIntAn.key
181180
)
@@ -184,14 +183,14 @@ class PreferenceProcessorHelper {
184183
if (readLongAn != null) {
185184

186185
annotationBuilder(
187-
className, method,
186+
className, element,
188187
LONG.simpleName, readLongAn.defaultValue, readLongAn.key
189188
)
190189
}
191190

192191
if (readAll != null) {
193192
annotationBuilder(
194-
className, method,
193+
className, element,
195194
MutableMap::class.java.name,
196195
null,
197196
NameStore.Variable.READ_ALL

compiler/src/main/java/devmike/jade/com/compiler/sharedpreference/ProcessorHelper.kt

Lines changed: 94 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package devmike.jade.com.compiler.sharedpreference
22

33
import com.squareup.kotlinpoet.*
44
import devmike.jade.com.annotations.SharedPref
5+
import devmike.jade.com.annotations.preference.*
56
import devmike.jade.com.annotations.sharedpreference.*
67
import devmike.jade.com.compiler.FileGenerator
78
import 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

Comments
 (0)