docs: @SuppressWarnings("unchecked")
      private void fixGetSet(HashMap<String, HashMap> propertyTable) {
  
          if (propertyTable == null) {
              return;
          }
  
          for (Map.Entry<String, HashMap> entry : propertyTable.entrySet()) {
              HashMap<String, Object> table = entry.getValue();
              ArrayList<Method> getters = (ArrayList<Method>) table.get(STR_GETTERS);
              ArrayList<Method> setters = (ArrayList<Method>) table.get(STR_SETTERS);
  
              Method normalGetter = null;
              Method normalSetter = null;
  
              Class<?> normalPropType = null;
  
              if (getters == null) {
                  getters = new ArrayList<>();
              }
  
              if (setters == null) {
                  setters = new ArrayList<>();
              }
  
              // retrieve getters
              Class<?>[] paramTypes;
              String methodName;
              for (Method getter : getters) {
                  paramTypes = getter.getParameterTypes();
                  methodName = getter.getName();
                  // checks if it's a normal getter
                  if (paramTypes == null || paramTypes.length == 0) {
                      // normal getter found
                      if (normalGetter == null || methodName.startsWith(PREFIX_IS)) {
                          normalGetter = getter;
                      }
                  }
              }
  
              // retrieve normal setter
              if (normalGetter != null) {
                  // Now we will try to look for normal setter of the same type.
                  Class<?> propertyType = normalGetter.getReturnType();
  
                  for (Method setter : setters) {
                      if (setter.getParameterTypes().length == 1
                          && propertyType.equals(setter.getParameterTypes()[0])) {
                          normalSetter = setter;
                          break;
                      }
                  }
              } else {
                  // Normal getter wasn't defined. Let's look for the last
                  // defined setter
  
                  for (Method setter : setters) {
                      if (setter.getParameterTypes().length == 1) {
                          normalSetter = setter;
                      }
                  }
              }
  
              // determine property type
              if (normalGetter != null) {
                  normalPropType = normalGetter.getReturnType();
              } else if (normalSetter != null) {
                  normalPropType = normalSetter.getParameterTypes()[0];
              }
  
              // RULES
              // These rules were created after performing extensive black-box
              // testing of RI
  
              // RULE1
              // Both normal getter and setter of the same type were defined;
              // no indexed getter/setter *PAIR* of the other type defined
              if (normalGetter != null && normalSetter != null) {
                  table.put(STR_NORMAL, STR_VALID);
                  table.put(STR_NORMAL + PREFIX_GET, normalGetter);
                  table.put(STR_NORMAL + PREFIX_SET, normalSetter);
                  table.put(STR_NORMAL + STR_PROPERTY_TYPE, normalPropType);
                  continue;
              }
  
              // RULE2
              // normal getter and/or setter was defined; no indexed
              // getters & setters defined
              if ((normalGetter != null || normalSetter != null)) {
                  table.put(STR_NORMAL, STR_VALID);
                  table.put(STR_NORMAL + PREFIX_GET, normalGetter);
                  table.put(STR_NORMAL + PREFIX_SET, normalSetter);
                  table.put(STR_NORMAL + STR_PROPERTY_TYPE, normalPropType);
                  continue;
              }
  
              // default rule - invalid property
              table.put(STR_NORMAL, STR_INVALID);
          }
      }