@@ -65,6 +65,7 @@ public class SchemaRegistry {
6565 *
6666 * @param type
6767 * the {@link Type} the {@link Schema} applies to
68+ * @param views types applied to the currently-active JsonView (Jackson annotation)
6869 * @param resolver
6970 * a {@link TypeResolver} that will be used to resolve
7071 * parameterized and wildcard types
@@ -73,7 +74,7 @@ public class SchemaRegistry {
7374 * @return the same schema if not eligible for registration, or a reference
7475 * to the schema registered for the given Type
7576 */
76- public Schema checkRegistration (Type type , Set <Type > views , TypeResolver resolver , Schema schema ) {
77+ public Schema checkRegistration (Type type , Map <Type , Boolean > views , TypeResolver resolver , Schema schema ) {
7778 return register (type , views , resolver , schema , (reg , key ) -> reg .register (key , schema , null ));
7879 }
7980
@@ -99,6 +100,7 @@ public Schema checkRegistration(Type type, Set<Type> views, TypeResolver resolve
99100 *
100101 * @param type
101102 * the {@link Type} the {@link Schema} applies to
103+ * @param views types applied to the currently-active JsonView (Jackson annotation)
102104 * @param resolver
103105 * a {@link TypeResolver} that will be used to resolve
104106 * parameterized and wildcard types
@@ -107,11 +109,11 @@ public Schema checkRegistration(Type type, Set<Type> views, TypeResolver resolve
107109 * @return the same schema if not eligible for registration, or a reference
108110 * to the schema registered for the given Type
109111 */
110- public Schema registerReference (Type type , Set <Type > views , TypeResolver resolver , Schema schema ) {
112+ public Schema registerReference (Type type , Map <Type , Boolean > views , TypeResolver resolver , Schema schema ) {
111113 return register (type , views , resolver , schema , SchemaRegistry ::registerReference );
112114 }
113115
114- public Schema register (Type type , Set <Type > views , TypeResolver resolver , Schema schema ,
116+ public Schema register (Type type , Map <Type , Boolean > views , TypeResolver resolver , Schema schema ,
115117 BiFunction <SchemaRegistry , TypeKey , Schema > registrationAction ) {
116118
117119 final Type resolvedType = TypeResolver .resolve (type , resolver );
@@ -130,7 +132,7 @@ public Schema register(Type type, Set<Type> views, TypeResolver resolver, Schema
130132 return schema ;
131133 }
132134
133- TypeKey key = new TypeKey (resolvedType , views );
135+ TypeKey key = keyFor (resolvedType , views );
134136
135137 if (hasRef (key )) {
136138 schema = lookupRef (key );
@@ -153,7 +155,7 @@ public Schema register(Type type, Set<Type> views, TypeResolver resolver, Schema
153155 * @param resolver resolver for type parameter
154156 * @return true when schema references are enabled and the type is present in the registry, otherwise false
155157 */
156- public boolean hasSchema (Type type , Set <Type > views , TypeResolver resolver ) {
158+ public boolean hasSchema (Type type , Map <Type , Boolean > views , TypeResolver resolver ) {
157159 if (disabled ) {
158160 return false ;
159161 }
@@ -235,11 +237,20 @@ public SchemaRegistry(AnnotationScannerContext context) {
235237 return ;
236238 }
237239
238- this .register (new TypeKey (type , Collections .emptySet ()), schema , Extensions .getName (schema ));
240+ this .register (keyFor (type , Collections .emptyMap ()), schema , Extensions .getName (schema ));
239241 ScannerLogging .logger .configSchemaRegistered (typeSignature );
240242 });
241243 }
242244
245+ private static TypeKey keyFor (Type type , Map <Type , Boolean > views ) {
246+ if (TypeUtil .knownJavaType (type .name ())) {
247+ // do not apply views for JDK types
248+ return new TypeKey (type , Collections .emptyMap ());
249+ }
250+
251+ return new TypeKey (type , views );
252+ }
253+
243254 /**
244255 * Register the provided {@link Schema} for the provided {@link Type}. If an
245256 * existing schema has already been registered for the type, it will be
@@ -253,8 +264,8 @@ public SchemaRegistry(AnnotationScannerContext context) {
253264 * {@link Schema} to add to the registry
254265 * @return a reference to the newly registered {@link Schema}
255266 */
256- public Schema register (Type entityType , Set <Type > views , Schema schema ) {
257- TypeKey key = new TypeKey (entityType , views );
267+ public Schema register (Type entityType , Map <Type , Boolean > views , Schema schema ) {
268+ TypeKey key = keyFor (entityType , views );
258269
259270 if (hasRef (key )) {
260271 // This is a replacement registration
@@ -324,20 +335,20 @@ String deriveName(TypeKey key, String schemaName) {
324335 return name ;
325336 }
326337
327- public Schema lookupRef (Type instanceType , Set <Type > views ) {
328- return lookupRef (new TypeKey (instanceType , views ));
338+ public Schema lookupRef (Type instanceType , Map <Type , Boolean > views ) {
339+ return lookupRef (keyFor (instanceType , views ));
329340 }
330341
331- public boolean hasRef (Type instanceType , Set <Type > views ) {
332- return hasRef (new TypeKey (instanceType , views ));
342+ public boolean hasRef (Type instanceType , Map <Type , Boolean > views ) {
343+ return hasRef (keyFor (instanceType , views ));
333344 }
334345
335- public Schema lookupSchema (Type instanceType , Set <Type > views ) {
336- return lookupSchema (new TypeKey (instanceType , views ));
346+ public Schema lookupSchema (Type instanceType , Map <Type , Boolean > views ) {
347+ return lookupSchema (keyFor (instanceType , views ));
337348 }
338349
339- public boolean hasSchema (Type instanceType , Set <Type > views ) {
340- return hasSchema (new TypeKey (instanceType , views ));
350+ public boolean hasSchema (Type instanceType , Map <Type , Boolean > views ) {
351+ return hasSchema (keyFor (instanceType , views ));
341352 }
342353
343354 public boolean isTypeRegistrationSupported (Type type , Schema schema ) {
@@ -398,20 +409,14 @@ private void remove(TypeKey key) {
398409 */
399410 public static final class TypeKey {
400411 private final Type type ;
401- private final Set <Type > views ;
412+ private final Map <Type , Boolean > views ;
402413 private int hashCode = 0 ;
403414
404- TypeKey (Type type , Set <Type > views ) {
415+ TypeKey (Type type , Map <Type , Boolean > views ) {
405416 this .type = type ;
406- this .views = new LinkedHashSet <>(views );
417+ this .views = new LinkedHashMap <>(views );
407418 }
408419
409- /*
410- * TypeKey(Type type) {
411- * this(type, Collections.emptySet());
412- * }
413- */
414-
415420 public String defaultName () {
416421 StringBuilder name = new StringBuilder (type .name ().local ());
417422
@@ -436,9 +441,12 @@ public String viewSuffix() {
436441
437442 StringBuilder suffix = new StringBuilder ();
438443
439- for (Type view : views ) {
440- suffix .append ('_' );
441- suffix .append (view .name ().local ());
444+ for (Map .Entry <Type , Boolean > view : views .entrySet ()) {
445+ if (Boolean .TRUE .equals (view .getValue ())) {
446+ // Only views that are directly specified contribute to the schema's name
447+ suffix .append ('_' );
448+ suffix .append (view .getKey ().name ().local ());
449+ }
442450 }
443451
444452 return suffix .toString ();
0 commit comments