public static Value from(JsonTypeInfo src) { if (src == null) { return null; } return construct(src.use(), src.include(), src.property(), src.defaultImpl(), src.visible()); }
public JsonTypeInfo.Id getTypeIdType() { JsonTypeInfo.Id typeIdType = JsonTypeInfo.Id.CLASS; JsonTypeInfo typeInfo = getAnnotation(JsonTypeInfo.class); if (typeInfo != null) { typeIdType = typeInfo.use(); } return typeIdType; }
public JsonTypeInfo.Id getTypeIdType() { JsonTypeInfo.Id typeIdType = JsonTypeInfo.Id.CLASS; JsonTypeInfo typeInfo = getAnnotation(JsonTypeInfo.class); if (typeInfo != null) { typeIdType = typeInfo.use(); } return typeIdType; }
private String getPropertyName(JsonTypeInfo typeInfo) { String property = typeInfo.property(); if (property.isEmpty()) { JsonTypeInfo.Id use = typeInfo.use(); property = use.getDefaultPropertyName(); } return property; }
private String getDiscriminantPropertyName(JsonTypeInfo jsonTypeInfo) { return jsonTypeInfo.property().isEmpty() ? jsonTypeInfo.use().getDefaultPropertyName() : jsonTypeInfo.property(); }
private String getJsonType(Class<?> clazz, JsonTypeInfo typeInfo) { String value; JsonTypeInfo.Id use = typeInfo.use(); switch (use) { case CLASS: value = clazz.getName(); break; case NAME: { JsonSubTypes.Type needed = null; JsonSubTypes subTypes = AnnotationUtils.findAnnotation(clazz, JsonSubTypes.class); if(subTypes != null) { for(JsonSubTypes.Type type: subTypes.value()) { if(type.value().equals(clazz)) { needed = type; break; } } } if(needed == null) { throw new IllegalArgumentException("On " + clazz + " can not find 'JsonSubTypes' record for current type."); } value = needed.name(); break; } default: throw new IllegalArgumentException("On " + clazz + " find unexpected 'JsonTypeInfo.use' value: " + use); } return value; }
private String getTypeName(JsonTypeInfo parentJsonTypeInfo, final Class<?> cls) { // Id.CLASS if (parentJsonTypeInfo.use() == JsonTypeInfo.Id.CLASS) { return cls.getName(); } // find @JsonTypeName recursively final JsonTypeName jsonTypeName = getAnnotationRecursive(cls, JsonTypeName.class); if (jsonTypeName != null && !jsonTypeName.value().isEmpty()) { return jsonTypeName.value(); } // find @JsonSubTypes.Type recursively final JsonSubTypes jsonSubTypes = getAnnotationRecursive(cls, JsonSubTypes.class, new Predicate<JsonSubTypes>() { @Override public boolean test(JsonSubTypes types) { return getJsonSubTypeForClass(types, cls) != null; } }); if (jsonSubTypes != null) { final JsonSubTypes.Type jsonSubType = getJsonSubTypeForClass(jsonSubTypes, cls); if (!jsonSubType.name().isEmpty()) { return jsonSubType.name(); } } // use simplified class name if it's not an interface or abstract if(!cls.isInterface() && !Modifier.isAbstract(cls.getModifiers())) { return cls.getName().substring(cls.getName().lastIndexOf(".") + 1); } return null; }
public static String getTypeInfoPropertyValue(JsonTypeInfo typeInfo) { if (typeInfo.include() == JsonTypeInfo.As.PROPERTY) { if (typeInfo.property() == null || "".equals(typeInfo.property())) { return typeInfo.use().getDefaultPropertyName(); } } return typeInfo.property(); }
public static String getTypeInfoPropertyValue(JsonTypeInfo typeInfo) { if (typeInfo.include() == JsonTypeInfo.As.PROPERTY) { if (typeInfo.property() == null || "".equals(typeInfo.property())) { return typeInfo.use().getDefaultPropertyName(); } } return typeInfo.property(); }
private List<Subtype> getPossibleTypes(JsonTypeInfo typeInfo, boolean isLeaf) throws UnableToCompleteException { if (typeInfo == null) { return Lists.newArrayList(new Subtype(null, source)); } Collection<Type> subTypes = findJsonSubTypes(source); if (subTypes.isEmpty()) { JsonSubTypes foundAnnotation = getAnnotation(source, JsonSubTypes.class); if (foundAnnotation != null) { Type[] value = foundAnnotation.value(); subTypes = Arrays.asList(value); } } PossibleTypesVisitor v = new PossibleTypesVisitor(context, source, isLeaf, getLogger(), subTypes); return v.visit(typeInfo.use()); }
private List<Subtype> getPossibleTypes(JsonTypeInfo typeInfo, boolean isLeaf) throws UnableToCompleteException { if (typeInfo == null) { return Lists.newArrayList(new Subtype(null, source)); } Collection<Type> subTypes = findJsonSubTypes(source); if (subTypes.isEmpty()) { JsonSubTypes foundAnnotation = getAnnotation(source, JsonSubTypes.class); if (foundAnnotation != null) { Type[] value = foundAnnotation.value(); subTypes = Arrays.asList(value); } } PossibleTypesVisitor v = new PossibleTypesVisitor(context, source, isLeaf, getLogger(), subTypes); return v.visit(typeInfo.use()); }
private static String extractTypeMetadata( TreeLogger logger, RebindConfiguration configuration, JClassType baseType, JClassType subtype, JsonTypeInfo typeInfo, Optional<JsonSubTypes> propertySubTypes, Optional<JsonSubTypes> baseSubTypes, ImmutableList<JClassType> allSubtypes ) throws UnableToCompleteException { switch ( typeInfo.use() ) { case NAME: return subtype.getQualifiedBinaryName(); default: logger.log( TreeLogger.Type.ERROR, "JsonTypeInfo.Id." + typeInfo.use() + " is not supported" ); throw new UnableToCompleteException();
for (JsonSubTypes.Type subType : jsonSubTypes.value()) { String propertyValue = null; if (jsonTypeInfo.use() == JsonTypeInfo.Id.NAME) { if (subType.name().equals("")) { final JsonTypeName jsonTypeName = subType.value().getAnnotation(JsonTypeName.class);