java.lang.Object
org.eclipse.yasson.internal.ClassParser
Created a class internal model.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final String
private static final String
private final JsonbContext
private static final String
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static void
checkPropertyNameClash
(List<PropertyModel> collectedProperties, Class<?> cls) private List
<PropertyModel> getSortedParentProperties
(ClassModel classModel, JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) Merges current class properties with parent class properties.private static boolean
private static boolean
private static boolean
private static boolean
isSpecialCaseMethod
(Class<?> clazz, Method m) Filter out certain methods that get forcibly added to some classes.private static String
lowerFirstLetter
(String name) private static Property
mergeProperty
(Property current, PropertyModel parentProp, JsonbAnnotatedElement<Class<?>> classElement) private static void
mergePropertyModels
(List<PropertyModel> unsortedMerged) private void
parseClassAndInterfaceMethods
(JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) private static void
parseFields
(JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) private void
parseIfaceMethodAnnotations
(Class<?> ifc, JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) private void
parseMethods
(Class<?> clazz, JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) (package private) void
parseProperties
(ClassModel classModel, JsonbAnnotatedElement<Class<?>> classElement) Parse class fields and getters setters.private Property
registerMethod
(String propertyName, Method method, JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) private static Method
selectMostSpecificNonDefaultMethod
(Method current, Method parent) Select the correct method to use.private static String
toPropertyMethod
(String name)
-
Field Details
-
IS_PREFIX
- See Also:
-
GET_PREFIX
- See Also:
-
SET_PREFIX
- See Also:
-
jsonbContext
-
-
Constructor Details
-
ClassParser
ClassParser(JsonbContext jsonbContext)
-
-
Method Details
-
parseProperties
Parse class fields and getters setters. Merge to java bean like properties. -
mergePropertyModels
-
parseClassAndInterfaceMethods
private void parseClassAndInterfaceMethods(JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) -
parseIfaceMethodAnnotations
-
registerMethod
-
parseMethods
-
isSpecialCaseMethod
Filter out certain methods that get forcibly added to some classes. For example the public groovy.lang.MetaClass X.getMetaClass() method from Groovy classes -
isGetter
-
isSetter
-
toPropertyMethod
-
lowerFirstLetter
-
isPropertyMethod
-
parseFields
private static void parseFields(JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) -
checkPropertyNameClash
-
getSortedParentProperties
private List<PropertyModel> getSortedParentProperties(ClassModel classModel, JsonbAnnotatedElement<Class<?>> classElement, Map<String, Property> classProperties) Merges current class properties with parent class properties. If javabean property is declared in more than one inheritance levels, merge field, getters and setters of that property.For example BaseClass contains field foo and getter getFoo. In BaseExtensions there is a setter setFoo. All three will be merged for BaseExtension.
Such property is sorted based on where its getter or field is located.
-
selectMostSpecificNonDefaultMethod
Select the correct method to use. The correct method is the most specific method which is not a default one:- if current is not defined, returns parent;
- if parent is not defined, returns current;
- if current is a default method and parent is not, returns parent;
- By definition, it is not possible to make a choice betweentwo default
methods.
Here, the most specific is selected, but a concrete implementation MUST eventually be provided as the source code won't even compile if such a method does not exist - returns current otherwise
- Parameters:
current
- current 'child' implementationparent
- parent implementation- Returns:
- effective method to register as getter or setter
-
mergeProperty
private static Property mergeProperty(Property current, PropertyModel parentProp, JsonbAnnotatedElement<Class<?>> classElement)
-