Skip to content

Commit 388381d

Browse files
committed
Merge pull request androidannotations#1624 from dodgex/fix_1555_for_emtpy_values
Fix generated code for emtpy value of @DefaultStringSet
2 parents e1f1aaf + bdf41dc commit 388381d

3 files changed

Lines changed: 21 additions & 6 deletions

File tree

  • AndroidAnnotations/androidannotations-core
    • androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences
    • androidannotations-test/src/main/java/org/androidannotations/test/prefs
    • androidannotations/src/main/java/org/androidannotations/internal/core/handler

‎AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/DefaultStringSet.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@
2424

2525
/**
2626
* <p>
27-
* Use on methods in {@link SharedPref} annotated class. The generated method
28-
* will return an empty {@link java.util.Set} of Strings by default.
27+
* Use on methods in {@link SharedPref} annotated class to specified the default
28+
* value of this preference.
29+
* </p>
30+
* <p>
31+
* The annotation value must be a <code>String[]</code>. The generated method
32+
* will return a {@link java.util.Set Set&lt;String&gt;} containing the values of the
33+
* given array.
2934
* </p>
3035
* <p>
3136
* The key of the preference will be the method name by default. This can be

‎AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/prefs/SomePrefs.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,10 @@ public interface SomePrefs {
5454

5555
@DefaultStringSet({"a", "b", "c"})
5656
Set<String> setWithDefault();
57+
58+
@DefaultStringSet("")
59+
Set<String> emtpyString();
60+
61+
@DefaultStringSet({})
62+
Set<String> emtpyStringSet();
5763
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/SharedPrefHandler.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,15 @@ private IJExpression createFieldMethod(SharedPrefHolder holder, ExecutableElemen
264264
Set<String> arrayValues = new HashSet<>(Arrays.asList((String[]) value));
265265
value = arrayValues;
266266

267-
JInvocation arrayAsList = getClasses().ARRAYS.staticInvoke("asList");
268-
for (String arrayValue : arrayValues) {
269-
arrayAsList.arg(lit(arrayValue));
267+
if (arrayValues.isEmpty()) {
268+
defaultValueExpr = newEmptyStringHashSet();
269+
} else {
270+
JInvocation arrayAsList = getClasses().ARRAYS.staticInvoke("asList");
271+
for (String arrayValue : arrayValues) {
272+
arrayAsList.arg(lit(arrayValue));
273+
}
274+
defaultValueExpr = JExpr._new(getClasses().HASH_SET.narrow(getClasses().STRING)).arg(arrayAsList);
270275
}
271-
defaultValueExpr = JExpr._new(getClasses().HASH_SET.narrow(getClasses().STRING)).arg(arrayAsList);
272276
} else {
273277
defaultValueExpr = newEmptyStringHashSet();
274278
}

0 commit comments

Comments
 (0)