Class ClassParser

java.lang.Object
org.eclipse.yasson.internal.ClassParser

class ClassParser extends Object
Created a class internal model.
  • Field Details

  • Constructor Details

  • Method Details

    • parseProperties

      void parseProperties(ClassModel classModel, JsonbAnnotatedElement<Class<?>> classElement)
      Parse class fields and getters setters. Merge to java bean like properties.
    • mergePropertyModels

      private static void mergePropertyModels(List<PropertyModel> unsortedMerged)
    • parseClassAndInterfaceMethods

      private void parseClassAndInterfaceMethods(JsonbAnnotatedElement<Class<?>> classElement, Map<String,Property> classProperties)
    • parseIfaceMethodAnnotations

      private void parseIfaceMethodAnnotations(Class<?> ifc, JsonbAnnotatedElement<Class<?>> classElement, Map<String,Property> classProperties)
    • registerMethod

      private Property registerMethod(String propertyName, Method method, JsonbAnnotatedElement<Class<?>> classElement, Map<String,Property> classProperties)
    • parseMethods

      private void parseMethods(Class<?> clazz, JsonbAnnotatedElement<Class<?>> classElement, Map<String,Property> classProperties)
    • isSpecialCaseMethod

      private static boolean isSpecialCaseMethod(Class<?> clazz, Method m)
      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

      private static boolean isGetter(Method m)
    • isSetter

      private static boolean isSetter(Method m)
    • toPropertyMethod

      private static String toPropertyMethod(String name)
    • lowerFirstLetter

      private static String lowerFirstLetter(String name)
    • isPropertyMethod

      private static boolean isPropertyMethod(Method m)
    • parseFields

      private static void parseFields(JsonbAnnotatedElement<Class<?>> classElement, Map<String,Property> classProperties)
    • checkPropertyNameClash

      private static void checkPropertyNameClash(List<PropertyModel> collectedProperties, Class<?> cls)
    • 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

      private static Method selectMostSpecificNonDefaultMethod(Method current, Method parent)
      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' implementation
      parent - parent implementation
      Returns:
      effective method to register as getter or setter
    • mergeProperty

      private static Property mergeProperty(Property current, PropertyModel parentProp, JsonbAnnotatedElement<Class<?>> classElement)