File tree Expand file tree Collapse file tree 3 files changed +30
-12
lines changed
jsonb-generator/src/main/java/io/avaje/jsonb/generator Expand file tree Collapse file tree 3 files changed +30
-12
lines changed Original file line number Diff line number Diff line change @@ -9,16 +9,9 @@ final class AdapterName {
9
9
final String fullName ;
10
10
11
11
AdapterName (TypeElement origin ) {
12
- String originName = origin .getQualifiedName ().toString ();
13
- String name = origin .getSimpleName ().toString ();
14
- String originPackage = Util .packageOf (originName );
15
- if (origin .getNestingKind ().isNested ()) {
16
- String parent = Util .shortName (originPackage );
17
- originPackage = Util .packageOf (originPackage );
18
- shortName = parent + "$" + name ;
19
- } else {
20
- shortName = name ;
21
- }
12
+ String originPackage = APContext .elements ().getPackageOf (origin ).toString ();
13
+ var name = shortName (origin );
14
+ shortName = name .substring (0 , name .length () - 1 );
22
15
if ("" .equals (originPackage )) {
23
16
this .adapterPackage = "jsonb" ;
24
17
} else {
@@ -27,6 +20,14 @@ final class AdapterName {
27
20
this .fullName = adapterPackage + "." + shortName + "JsonAdapter" ;
28
21
}
29
22
23
+ private String shortName (TypeElement origin ) {
24
+ var sb = new StringBuilder ();
25
+ if (origin .getNestingKind ().isNested ()) {
26
+ sb .append (shortName ((TypeElement ) origin .getEnclosingElement ()));
27
+ }
28
+ return sb .append (Util .shortName (origin .getSimpleName ().toString ())).append ("$" ).toString ();
29
+ }
30
+
30
31
String shortName () {
31
32
return shortName ;
32
33
}
Original file line number Diff line number Diff line change @@ -239,7 +239,7 @@ private void addImported(ImportPrism importPrism) {
239
239
for (final TypeMirror importType : importPrism .value ()) {
240
240
// if imported by mixin annotation skip
241
241
if (mixInImports .contains (importType .toString ())) {
242
- return ;
242
+ continue ;
243
243
}
244
244
writeAdapterForImportedType (asTypeElement (importType ), implementationType (importPrism ));
245
245
}
Original file line number Diff line number Diff line change 3
3
import javax .lang .model .element .*;
4
4
import javax .lang .model .type .TypeMirror ;
5
5
import javax .lang .model .util .ElementFilter ;
6
+
6
7
import java .util .*;
7
8
import java .util .function .Supplier ;
8
9
import java .util .stream .Collectors ;
@@ -170,7 +171,23 @@ void read(TypeElement type) {
170
171
171
172
private void readField (Element element , List <FieldReader > localFields ) {
172
173
final Element mixInField = mixInFields .get (element .getSimpleName ().toString ());
173
- if (mixInField != null && mixInField .asType ().equals (element .asType ())) {
174
+ if (mixInField != null && APContext .types ().isSameType (mixInField .asType (), element .asType ())) {
175
+
176
+ var mixinModifiers = new HashSet <>(mixInField .getModifiers ());
177
+ var modifiers = new HashSet <>(mixInField .getModifiers ());
178
+
179
+ Arrays .stream (Modifier .values ())
180
+ .filter (m -> m != Modifier .PRIVATE || m != Modifier .PROTECTED || m != Modifier .PUBLIC )
181
+ .forEach (
182
+ m -> {
183
+ modifiers .remove (m );
184
+ mixinModifiers .remove (m );
185
+ });
186
+
187
+ if (!modifiers .equals (mixinModifiers )) {
188
+ APContext .logError (mixInField , "mixIn fields must have the same modifiers as the target class" );
189
+ }
190
+
174
191
element = mixInField ;
175
192
}
176
193
if (element .asType ().toString ().contains ("java.util.Optional" )) {
You can’t perform that action at this time.
0 commit comments