Skip to content

Commit 8db0e84

Browse files
committed
Merge branch 'SentryMan-prism' into main
2 parents 5d10b2e + d948273 commit 8db0e84

23 files changed

+224
-339
lines changed

jsonb-generator/pom.xml

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
35
<modelVersion>4.0.0</modelVersion>
46
<parent>
57
<groupId>io.avaje</groupId>
@@ -16,7 +18,17 @@
1618
<dependency>
1719
<groupId>io.avaje</groupId>
1820
<artifactId>avaje-jsonb</artifactId>
19-
<version>1.2-SNAPSHOT</version>
21+
<version>${project.version}</version>
22+
<optional>true</optional>
23+
<scope>provided</scope>
24+
</dependency>
25+
26+
<dependency>
27+
<groupId>io.avaje</groupId>
28+
<artifactId>avaje-prisms</artifactId>
29+
<version>1.1</version>
30+
<optional>true</optional>
31+
<scope>provided</scope>
2032
</dependency>
2133

2234
<!-- test dependencies -->
@@ -35,25 +47,19 @@
3547
<plugin>
3648
<groupId>org.apache.maven.plugins</groupId>
3749
<artifactId>maven-compiler-plugin</artifactId>
38-
<version>3.8.1</version>
3950
<configuration>
4051
<source>${java.version}</source>
4152
<target>${java.version}</target>
42-
<!-- Turn off annotation processing for building -->
43-
<compilerArgument>-proc:none</compilerArgument>
53+
<annotationProcessorPaths>
54+
<path>
55+
<groupId>io.avaje</groupId>
56+
<artifactId>avaje-prisms</artifactId>
57+
<version>1.1</version>
58+
</path>
59+
</annotationProcessorPaths>
4460
</configuration>
4561
</plugin>
4662

47-
<!-- <plugin>-->
48-
<!-- <artifactId>maven-surefire-plugin</artifactId>-->
49-
<!-- <version>3.0.0-M4</version>-->
50-
<!-- <configuration>-->
51-
<!-- <argLine>-->
52-
<!-- &#45;&#45;add-opens io.avaje.jsonb.generator/io.avaje.jsonb.generator=ALL-UNNAMED-->
53-
<!-- </argLine>-->
54-
<!-- </configuration>-->
55-
<!-- </plugin>-->
56-
5763
<plugin>
5864
<groupId>org.moditect</groupId>
5965
<artifactId>moditect-maven-plugin</artifactId>
@@ -66,6 +72,7 @@
6672
<goal>add-module-info</goal>
6773
</goals>
6874
<configuration>
75+
<overwriteExistingFiles>true</overwriteExistingFiles>
6976
<module>
7077
<moduleInfoFile>src/main/java9/module-info.java</moduleInfoFile>
7178
</module>

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

Lines changed: 0 additions & 27 deletions
This file was deleted.

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.avaje.jsonb.generator;
22

3-
import io.avaje.jsonb.Json;
4-
53
import javax.lang.model.element.Element;
64
import javax.lang.model.element.TypeElement;
75
import java.lang.reflect.InvocationTargetException;
@@ -107,7 +105,7 @@ boolean nonAccessibleField() {
107105
}
108106

109107
boolean hasJsonAnnotation() {
110-
return beanType.getAnnotation(Json.class) != null;
108+
return JsonPrism.getInstanceOn(beanType) != null;
111109
}
112110

113111
void read() {

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

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
package io.avaje.jsonb.generator;
22

3-
import javax.annotation.processing.FilerException;
4-
import javax.lang.model.element.AnnotationMirror;
5-
import javax.lang.model.element.AnnotationValue;
6-
import javax.lang.model.element.ExecutableElement;
7-
import javax.lang.model.element.TypeElement;
8-
import javax.tools.FileObject;
9-
import javax.tools.StandardLocation;
103
import java.io.FileNotFoundException;
114
import java.io.LineNumberReader;
125
import java.io.Reader;
136
import java.nio.file.NoSuchFileException;
147
import java.util.ArrayList;
158
import java.util.Collections;
169
import java.util.List;
17-
import java.util.Map;
10+
import java.util.Optional;
11+
12+
import javax.annotation.processing.FilerException;
13+
import javax.lang.model.element.AnnotationMirror;
14+
import javax.lang.model.element.TypeElement;
15+
import javax.lang.model.type.TypeMirror;
16+
import javax.tools.FileObject;
17+
import javax.tools.StandardLocation;
1818

1919
final class ComponentReader {
2020

21-
private static final String META_DATA = "io.avaje.jsonb.spi.MetaData";
22-
private static final String META_DATA_FACTORY = "io.avaje.jsonb.spi.MetaData.Factory";
2321
private final ProcessingContext ctx;
2422
private final ComponentMetaData componentMetaData;
2523

@@ -43,23 +41,28 @@ void read() {
4341
* Read the existing JsonAdapters from the MetaData annotation of the generated component.
4442
*/
4543
private void readMetaData(TypeElement moduleType) {
46-
for (AnnotationMirror annotationMirror : moduleType.getAnnotationMirrors()) {
47-
if (META_DATA.equals(annotationMirror.getAnnotationType().toString())) {
48-
readValues(annotationMirror).forEach(componentMetaData::add);
49-
} else if (META_DATA_FACTORY.equals(annotationMirror.getAnnotationType().toString())) {
50-
readValues(annotationMirror).forEach(componentMetaData::addFactory);
51-
}
52-
}
53-
}
44+
for (final AnnotationMirror annotationMirror : moduleType.getAnnotationMirrors()) {
45+
46+
final MetaDataPrism metaData = MetaDataPrism.getInstance(annotationMirror);
47+
final FactoryPrism metaDataFactory = FactoryPrism.getInstance(annotationMirror);
5448

55-
private List<String> readValues(AnnotationMirror annotationMirror) {
56-
List<String> adapterClasses = new ArrayList<>();
57-
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : annotationMirror.getElementValues().entrySet()) {
58-
for (Object adapterEntry : (List<?>) entry.getValue().getValue()) {
59-
adapterClasses.add(adapterNameFromEntry(adapterEntry));
49+
if (metaData != null) {
50+
51+
Optional.ofNullable(metaData.value()).stream()
52+
.flatMap(List::stream)
53+
.map(TypeMirror::toString)
54+
.map(this::adapterNameFromEntry)
55+
.forEach(componentMetaData::add);
56+
57+
} else if (metaDataFactory != null) {
58+
59+
Optional.ofNullable(metaDataFactory.value()).stream()
60+
.flatMap(List::stream)
61+
.map(TypeMirror::toString)
62+
.map(this::adapterNameFromEntry)
63+
.forEach(componentMetaData::add);
6064
}
6165
}
62-
return adapterClasses;
6366
}
6467

6568
private String adapterNameFromEntry(Object adapterEntry) {
@@ -103,5 +106,4 @@ private List<String> loadMetaInf() {
103106
}
104107
return Collections.emptyList();
105108
}
106-
107109
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ final class Constants {
66
static final String JSONB_WILD = "io.avaje.jsonb.*";
77
static final String JSONB_SPI = "io.avaje.jsonb.spi.*";
88
static final String JSONB = "io.avaje.jsonb.Jsonb";
9+
static final String JSON = "io.avaje.jsonb.Json";
10+
static final String JSON_IMPORT = "io.avaje.jsonb.Json.Import";
11+
static final String JSON_MIXIN = "io.avaje.jsonb.Json.MixIn";
912
static final String IOEXCEPTION = "java.io.IOException";
1013
static final String METHODHANDLE = "java.lang.invoke.MethodHandle";
1114
static final String REFLECT_TYPE = "java.lang.reflect.Type";

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

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package io.avaje.jsonb.generator;
22

3-
import javax.lang.model.element.Element;
4-
import javax.lang.model.element.Modifier;
53
import java.util.LinkedHashMap;
64
import java.util.List;
75
import java.util.Map;
6+
import java.util.Objects;
7+
import java.util.Optional;
88
import java.util.Set;
9+
import java.util.stream.Collectors;
10+
11+
import javax.lang.model.element.Element;
12+
import javax.lang.model.element.Modifier;
913

1014
final class FieldReader {
1115

@@ -33,20 +37,39 @@ final class FieldReader {
3337
private int genericTypeParamPosition;
3438
private final List<String> aliases;
3539

36-
FieldReader(Element element, NamingConvention namingConvention, TypeSubTypeMeta subType, List<String> genericTypeParams) {
40+
FieldReader(
41+
Element element,
42+
NamingConvention namingConvention,
43+
TypeSubTypeMeta subType,
44+
List<String> genericTypeParams) {
3745
addSubType(subType);
3846
this.genericTypeParams = genericTypeParams;
3947
this.fieldName = element.getSimpleName().toString();
40-
this.propertyName = PropertyReader.name(namingConvention, fieldName, element);
48+
4149
this.publicField = element.getModifiers().contains(Modifier.PUBLIC);
4250
this.rawType = trimAnnotations(element.asType().toString());
43-
this.aliases = AliasReader.getAliases(element);
4451

4552
final PropertyIgnoreReader ignoreReader = new PropertyIgnoreReader(element);
4653
this.unmapped = ignoreReader.unmapped();
4754
this.raw = ignoreReader.raw();
4855
this.serialize = ignoreReader.serialize();
4956
this.deserialize = ignoreReader.deserialize();
57+
58+
this.propertyName =
59+
Optional.ofNullable(PropertyPrism.getInstanceOn(element))
60+
.map(PropertyPrism::value)
61+
.filter(Objects::nonNull)
62+
.map(Util::escapeQuotes)
63+
.orElse(namingConvention.from(fieldName));
64+
this.aliases =
65+
Optional.ofNullable(JsonAliasPrism.getInstanceOn(element))
66+
.map(JsonAliasPrism::value)
67+
.filter(Objects::nonNull)
68+
.stream()
69+
.flatMap(List::stream)
70+
.map(Util::escapeQuotes)
71+
.collect(Collectors.toList());
72+
5073
if (raw) {
5174
genericType = GenericType.parse("java.lang.String");
5275
adapterShortType = "JsonAdapter<String>";

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

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.avaje.jsonb.generator;
2+
3+
enum Naming {
4+
Match,
5+
LowerHyphen,
6+
LowerUnderscore,
7+
LowerSpace,
8+
UpperCamel,
9+
UpperHyphen,
10+
UpperUnderscore,
11+
UpperSpace
12+
}

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
package io.avaje.jsonb.generator;
22

3-
import io.avaje.jsonb.Json;
4-
53
final class NamingConvention {
64

7-
private final Json.Naming naming;
5+
private final Naming naming;
86
private final Convert convert;
97

10-
static NamingConvention of(Json.Naming naming) {
8+
static NamingConvention of(Naming naming) {
119
return new NamingConvention(naming);
1210
}
1311

14-
private NamingConvention(Json.Naming naming) {
12+
private NamingConvention(Naming naming) {
1513
this.naming = naming;
1614
this.convert = init(naming);
1715
}
@@ -21,7 +19,7 @@ public String toString() {
2119
return naming.toString();
2220
}
2321

24-
Convert init(Json.Naming naming) {
22+
Convert init(Naming naming) {
2523
switch (naming) {
2624
case Match: return fieldName -> fieldName;
2725
case LowerHyphen: return new LowerExtra('-');

0 commit comments

Comments
 (0)