Skip to content

Commit 3b10f9f

Browse files
committed
Added read all annotation
1 parent 8606654 commit 3b10f9f

File tree

5 files changed

+90
-33
lines changed

5 files changed

+90
-33
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ A lite weight SharedPreference library which uses annotation processing to gener
55
* Write less code to configure JadeSharedPreference
66
* Save multiple values to JadeSharedPrefence at onces
77
* Read from JadeSharedPreference using just annotations `@Read...`)
8-
* Listen to value changes in realtime
8+
* Listen to value changes in real-time
99

10-
```kotin
10+
```kotlin
1111
class InecBox @SharedPref("key") constructor(context: Context) {
1212

1313
val TAG: String = "InecBox"
@@ -54,8 +54,10 @@ allprojects {
5454
kapt 'com.github.devmike01.JadeSharedPreference:compiler:1.2.15'
5555
}
5656
```
57-
##### Note: Add `apply plugin: 'kotlin-kapt'` - if you don't already have it, to your app `build.gradle` to allow the the processor generates the necessary codes.
57+
> Note: Add `apply plugin: 'kotlin-kapt'` - if you don't already have it, to your app `build.gradle` to allow the the processor generates the necessary codes.
5858
59+
Contributions are highly welcome. There're some features I intend to add in the future. They're listed below:
60+
* Lint for checking
5961

6062
License
6163
-------
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package devmike.jade.com.annotations.read
2+
3+
@Target(AnnotationTarget.FIELD, AnnotationTarget.FUNCTION)
4+
@Retention(AnnotationRetention.SOURCE)
5+
annotation class ReadAll {
6+
}

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,27 @@ class MainActivity @SharedPref("sharedSetKey") constructor(): AppCompatActivity(
2424

2525
//Read string from JadeSharedPreference
2626
@ReadString("string")
27-
public lateinit var mString: String
27+
lateinit var mString: String
2828

2929
//Read Integer from JadeSharedPreference
3030
@ReadInt("integer_anything")
31-
public var mInteger: Int =0
31+
var mInteger: Int =0
3232

3333
//Read Long from JadeSharedPreference
3434
@ReadLong("long_")
35-
public var mLong: Long =0
35+
var mLong: Long =0
3636

3737
//Read Float from JadeSharedPreference
3838
@ReadFloat("float_key")
39-
public var mFloat: Float =0f
39+
var mFloat: Float =0f
4040

4141
//Read StringSet from JadeSharedPreference
4242
@ReadStringSet("stringset__")
43-
public var mStringSet: MutableSet<String> = mutableSetOf()
43+
lateinit var mStringSet: MutableSet<String>
44+
45+
@ReadAll
46+
lateinit var mMapAll: Map<String, *>
47+
4448

4549
//@SharedPref("key")
4650
override fun onCreate(savedInstanceState: Bundle?) {
@@ -60,9 +64,12 @@ class MainActivity @SharedPref("sharedSetKey") constructor(): AppCompatActivity(
6064
save_btn4.setOnClickListener(this::btnTestOne)
6165
save_btn5.setOnClickListener(this::btnTestOne)
6266

67+
68+
Log.d("MainActivity", mMapAll.toString())
69+
6370
}
6471

65-
public fun btnTestOne(v: View){
72+
fun btnTestOne(v: View){
6673
/**
6774
* Click to write to JadeSharedPreference
6875
*/
@@ -106,4 +113,9 @@ class MainActivity @SharedPref("sharedSetKey") constructor(): AppCompatActivity(
106113
fun stringSetChanges(set: MutableSet<String>){
107114
read_5.text = set.toString()
108115
}
116+
117+
@ReadAll
118+
fun readAllItems(allItems: MutableMap<String, *>){
119+
Log.d("MainActivity", allItems.toString())
120+
}
109121
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public object NameStore {
2828
const val CLASS_VAR ="mClass"
2929
const val SHAREDPREF_LISTENER ="sharedPrefListener"
3030
const val ARGUMENT ="arg0"
31+
const val READ_ALL = "Hey! Read All"
3132

3233
}
3334

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

Lines changed: 60 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import devmike.jade.com.annotations.SharedPref
55
import devmike.jade.com.annotations.read.*
66
import devmike.jade.com.processor.NameStore
77
import java.io.File
8+
import java.lang.NullPointerException
89
import java.util.EnumSet.range
910
import java.util.HashSet
1011
import 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

Comments
 (0)