package com.fasterxml.jackson.databind.introspect; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.introspect.VisibilityChecker; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Method; public interface VisibilityChecker<T extends VisibilityChecker<T>> { boolean isCreatorVisible(AnnotatedMember annotatedMember); boolean isCreatorVisible(Member member); boolean isFieldVisible(AnnotatedField annotatedField); boolean isFieldVisible(Field field); boolean isGetterVisible(AnnotatedMethod annotatedMethod); boolean isGetterVisible(Method method); boolean isIsGetterVisible(AnnotatedMethod annotatedMethod); boolean isIsGetterVisible(Method method); boolean isSetterVisible(AnnotatedMethod annotatedMethod); boolean isSetterVisible(Method method); T with(JsonAutoDetect.Visibility visibility); T with(JsonAutoDetect jsonAutoDetect); T withCreatorVisibility(JsonAutoDetect.Visibility visibility); T withFieldVisibility(JsonAutoDetect.Visibility visibility); T withGetterVisibility(JsonAutoDetect.Visibility visibility); T withIsGetterVisibility(JsonAutoDetect.Visibility visibility); T withSetterVisibility(JsonAutoDetect.Visibility visibility); T withVisibility(PropertyAccessor propertyAccessor, JsonAutoDetect.Visibility visibility); @JsonAutoDetect(creatorVisibility = JsonAutoDetect.Visibility.ANY, fieldVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, setterVisibility = JsonAutoDetect.Visibility.ANY) public static class Std implements VisibilityChecker<Std>, Serializable { protected static final Std DEFAULT = new Std((JsonAutoDetect) Std.class.getAnnotation(JsonAutoDetect.class)); private static final long serialVersionUID = -7073939237187922755L; protected final JsonAutoDetect.Visibility _creatorMinLevel; protected final JsonAutoDetect.Visibility _fieldMinLevel; protected final JsonAutoDetect.Visibility _getterMinLevel; protected final JsonAutoDetect.Visibility _isGetterMinLevel; protected final JsonAutoDetect.Visibility _setterMinLevel; public static Std defaultInstance() { return DEFAULT; } public Std(JsonAutoDetect jsonAutoDetect) { this._getterMinLevel = jsonAutoDetect.getterVisibility(); this._isGetterMinLevel = jsonAutoDetect.isGetterVisibility(); this._setterMinLevel = jsonAutoDetect.setterVisibility(); this._creatorMinLevel = jsonAutoDetect.creatorVisibility(); this._fieldMinLevel = jsonAutoDetect.fieldVisibility(); } public Std(JsonAutoDetect.Visibility visibility, JsonAutoDetect.Visibility visibility2, JsonAutoDetect.Visibility visibility3, JsonAutoDetect.Visibility visibility4, JsonAutoDetect.Visibility visibility5) { this._getterMinLevel = visibility; this._isGetterMinLevel = visibility2; this._setterMinLevel = visibility3; this._creatorMinLevel = visibility4; this._fieldMinLevel = visibility5; } public Std(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { Std std = DEFAULT; this._getterMinLevel = std._getterMinLevel; this._isGetterMinLevel = std._isGetterMinLevel; this._setterMinLevel = std._setterMinLevel; this._creatorMinLevel = std._creatorMinLevel; this._fieldMinLevel = std._fieldMinLevel; return; } this._getterMinLevel = visibility; this._isGetterMinLevel = visibility; this._setterMinLevel = visibility; this._creatorMinLevel = visibility; this._fieldMinLevel = visibility; } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std with(JsonAutoDetect jsonAutoDetect) { return jsonAutoDetect != null ? withGetterVisibility(jsonAutoDetect.getterVisibility()).withIsGetterVisibility(jsonAutoDetect.isGetterVisibility()).withSetterVisibility(jsonAutoDetect.setterVisibility()).withCreatorVisibility(jsonAutoDetect.creatorVisibility()).withFieldVisibility(jsonAutoDetect.fieldVisibility()) : this; } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std with(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { return DEFAULT; } return new Std(visibility); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std withVisibility(PropertyAccessor propertyAccessor, JsonAutoDetect.Visibility visibility) { switch (propertyAccessor) { case GETTER: return withGetterVisibility(visibility); case SETTER: return withSetterVisibility(visibility); case CREATOR: return withCreatorVisibility(visibility); case FIELD: return withFieldVisibility(visibility); case IS_GETTER: return withIsGetterVisibility(visibility); case ALL: return with(visibility); default: return this; } } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std withGetterVisibility(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { visibility = DEFAULT._getterMinLevel; } if (this._getterMinLevel == visibility) { return this; } return new Std(visibility, this._isGetterMinLevel, this._setterMinLevel, this._creatorMinLevel, this._fieldMinLevel); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std withIsGetterVisibility(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { visibility = DEFAULT._isGetterMinLevel; } if (this._isGetterMinLevel == visibility) { return this; } return new Std(this._getterMinLevel, visibility, this._setterMinLevel, this._creatorMinLevel, this._fieldMinLevel); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std withSetterVisibility(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { visibility = DEFAULT._setterMinLevel; } if (this._setterMinLevel == visibility) { return this; } return new Std(this._getterMinLevel, this._isGetterMinLevel, visibility, this._creatorMinLevel, this._fieldMinLevel); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std withCreatorVisibility(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { visibility = DEFAULT._creatorMinLevel; } if (this._creatorMinLevel == visibility) { return this; } return new Std(this._getterMinLevel, this._isGetterMinLevel, this._setterMinLevel, visibility, this._fieldMinLevel); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public Std withFieldVisibility(JsonAutoDetect.Visibility visibility) { if (visibility == JsonAutoDetect.Visibility.DEFAULT) { visibility = DEFAULT._fieldMinLevel; } if (this._fieldMinLevel == visibility) { return this; } return new Std(this._getterMinLevel, this._isGetterMinLevel, this._setterMinLevel, this._creatorMinLevel, visibility); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isCreatorVisible(Member member) { return this._creatorMinLevel.isVisible(member); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isCreatorVisible(AnnotatedMember annotatedMember) { return isCreatorVisible(annotatedMember.getMember()); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isFieldVisible(Field field) { return this._fieldMinLevel.isVisible(field); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isFieldVisible(AnnotatedField annotatedField) { return isFieldVisible(annotatedField.getAnnotated()); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isGetterVisible(Method method) { return this._getterMinLevel.isVisible(method); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isGetterVisible(AnnotatedMethod annotatedMethod) { return isGetterVisible(annotatedMethod.getAnnotated()); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isIsGetterVisible(Method method) { return this._isGetterMinLevel.isVisible(method); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isIsGetterVisible(AnnotatedMethod annotatedMethod) { return isIsGetterVisible(annotatedMethod.getAnnotated()); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isSetterVisible(Method method) { return this._setterMinLevel.isVisible(method); } @Override // com.fasterxml.jackson.databind.introspect.VisibilityChecker public boolean isSetterVisible(AnnotatedMethod annotatedMethod) { return isSetterVisible(annotatedMethod.getAnnotated()); } public String toString() { return "[Visibility:" + " getter: " + this._getterMinLevel + ", isGetter: " + this._isGetterMinLevel + ", setter: " + this._setterMinLevel + ", creator: " + this._creatorMinLevel + ", field: " + this._fieldMinLevel + "]"; } } }