Skip to content

Commit 34f1411

Browse files
committed
Rename @Json.JsonAlias -> @Json.Alias with deprecation
To be more consistent with the other json annotations
1 parent 2f3c6f9 commit 34f1411

File tree

7 files changed

+60
-17
lines changed

7 files changed

+60
-17
lines changed

blackbox-test/src/main/java/org/example/customer/alias/WithAlias.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
import io.avaje.jsonb.Json;
44

55
@Json
6-
public record WithAlias(int id, @Json.JsonAlias({"something", "something2"}) String alias, String message) {
6+
public record WithAlias(int id, @Json.Alias({"something", "something2"}) String alias, String message) {
77

88
}

jsonb-generator/src/main/java/io/avaje/jsonb/generator/FieldReader.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22

33
import javax.lang.model.element.Element;
44
import javax.lang.model.element.Modifier;
5-
import java.util.LinkedHashMap;
6-
import java.util.List;
7-
import java.util.Map;
8-
import java.util.Set;
9-
import java.util.stream.Collectors;
5+
import java.util.*;
106

117
final class FieldReader {
128

@@ -41,13 +37,15 @@ final class FieldReader {
4137
.map(Util::escapeQuotes)
4238
.orElse(namingConvention.from(fieldName));
4339

44-
this.aliases =
45-
JsonAliasPrism.getOptionalOn(element)
46-
.map(JsonAliasPrism::value)
47-
.stream()
48-
.flatMap(List::stream)
49-
.map(Util::escapeQuotes)
50-
.collect(Collectors.toList());
40+
this.aliases = initAliases(element);
41+
}
42+
43+
private static List<String> initAliases(Element element) {
44+
return AliasPrism.getOptionalOn(element)
45+
.map(a -> Util.escapeQuotes(a.value()))
46+
.orElse(JsonAliasPrism.getOptionalOn(element)
47+
.map(a -> Util.escapeQuotes(a.value()))
48+
.orElse(Collections.emptyList()));
5149
}
5250

5351
void position(int pos) {

jsonb-generator/src/main/java/io/avaje/jsonb/generator/Util.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static io.avaje.jsonb.generator.ProcessingContext.element;
44

5+
import java.util.ArrayList;
6+
import java.util.List;
57
import java.util.regex.Matcher;
68
import java.util.regex.Pattern;
79

@@ -103,6 +105,14 @@ static String initCap(String input) {
103105
}
104106
}
105107

108+
static List<String> escapeQuotes(List<String> all) {
109+
List<String> escaped = new ArrayList<>(all.size());
110+
for (String raw : all) {
111+
escaped.add(Util.escapeQuotes(raw));
112+
}
113+
return escaped;
114+
}
115+
106116
static String escapeQuotes(String input) {
107117
return input.replaceAll("^\"|\"$", "\\\\\"");
108118
}

jsonb-generator/src/main/java/io/avaje/jsonb/generator/package-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
@GeneratePrism(io.avaje.jsonb.Json.class)
33
@GeneratePrism(io.avaje.jsonb.Json.Import.class)
44
@GeneratePrism(value = io.avaje.jsonb.Json.Import.List.class, name = "ImportListPrism")
5+
@GeneratePrism(io.avaje.jsonb.Json.Alias.class)
56
@GeneratePrism(io.avaje.jsonb.Json.JsonAlias.class)
67
@GeneratePrism(io.avaje.jsonb.Json.Ignore.class)
78
@GeneratePrism(io.avaje.jsonb.Json.Property.class)

jsonb-generator/src/test/java/io/avaje/jsonb/generator/UtilTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package io.avaje.jsonb.generator;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
4-
53
import org.junit.jupiter.api.Test;
64

5+
import java.util.List;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
710
class UtilTest {
811

912
@Test
@@ -21,4 +24,23 @@ void initLower() {
2124
assertEquals("url", Util.initLower("URL"));
2225
assertEquals("initCap", Util.initLower("InitCap"));
2326
}
27+
28+
@Test
29+
void escapeQuotes() {
30+
assertEquals("\\\"Hi\\\"", Util.escapeQuotes("\"Hi\""));
31+
assertEquals("\\\"\\\"", Util.escapeQuotes("\"\""));
32+
33+
assertEquals("\\\"Hi", Util.escapeQuotes("\"Hi"));
34+
assertEquals("Hi\\\"", Util.escapeQuotes("Hi\""));
35+
}
36+
37+
@Test
38+
void escapeQuotesList() {
39+
assertThat(Util.escapeQuotes(List.of("a", "b"))).containsOnly("a", "b");
40+
assertThat(Util.escapeQuotes(List.of("\"a\""))).containsOnly("\\\"a\\\"");
41+
assertThat(Util.escapeQuotes(List.of("\"a\"", "\"b\""))).containsOnly("\\\"a\\\"", "\\\"b\\\"");
42+
43+
assertThat(Util.escapeQuotes(List.of("\"a\"", "b"))).containsOnly("\\\"a\\\"", "b");
44+
assertThat(Util.escapeQuotes(List.of("a", "\"b\""))).containsOnly("a", "\\\"b\\\"");
45+
}
2446
}

jsonb-generator/src/test/java/io/avaje/jsonb/generator/models/valid/TestClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
@Json
99
public class TestClass {
1010

11-
@Json.JsonAlias({"something", "something2"})
11+
@Json.Alias({"something", "something2"})
1212
private String alias;
1313

1414
private String s;

jsonb/src/main/java/io/avaje/jsonb/Json.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,25 @@
119119
* during deserialization.
120120
*
121121
* <pre>{@code
122-
* @Json.JsonAlias("$code")
122+
* @Json.Alias("$code")
123123
* String referenceCode;
124124
*
125125
* }</pre>
126126
*/
127127
@Retention(CLASS)
128128
@Target({ElementType.FIELD})
129+
@interface Alias {
130+
131+
/** One or more secondary names to accept as aliases to the official name. */
132+
String[] value();
133+
}
134+
135+
/**
136+
* Deprecate - migrate to {@link Json.Alias}.
137+
*/
138+
@Deprecated
139+
@Retention(CLASS)
140+
@Target({ElementType.FIELD})
129141
@interface JsonAlias {
130142

131143
/** One or more secondary names to accept as aliases to the official name. */

0 commit comments

Comments
 (0)