Github user aljoscha commented on a diff in the pull request:

    https://github.com/apache/flink/pull/5097#discussion_r156090443
  
    --- Diff: 
flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java 
---
    @@ -1837,56 +1845,111 @@ private boolean isValidPojoField(Field f, Class<?> 
clazz, ArrayList<Type> typeHi
                        Class<?> fieldTypeWrapper = 
ClassUtils.primitiveToWrapper(f.getType());
     
                        TypeVariable<?> fieldTypeGeneric = null;
    -                   if(fieldType instanceof TypeVariable) {
    +                   if (fieldType instanceof TypeVariable) {
                                fieldTypeGeneric = (TypeVariable<?>) fieldType;
                                fieldType = 
materializeTypeVariable(typeHierarchy, (TypeVariable<?>)fieldType);
                        }
    -                   for(Method m : clazz.getMethods()) {
    +                   for (Method m : clazz.getMethods()) {
                                final String methodNameLow = 
m.getName().endsWith("_$eq") ?
                                                
m.getName().toLowerCase().replaceAll("_", "").replaceFirst("\\$eq$", "_\\$eq") :
                                                
m.getName().toLowerCase().replaceAll("_", "");
     
                                // check for getter
    -                           if(     // The name should be "get<FieldName>" 
or "<fieldName>" (for scala) or "is<fieldName>" for boolean fields.
    +                           if (    // The name should be "get<FieldName>" 
or "<fieldName>" (for scala) or "is<fieldName>" for boolean fields.
                                        
(methodNameLow.equals("get"+fieldNameLow) || 
methodNameLow.equals("is"+fieldNameLow) || methodNameLow.equals(fieldNameLow)) 
&&
                                        // no arguments for the getter
                                        m.getParameterTypes().length == 0 &&
                                        // return type is same as field type 
(or the generic variant of it)
    -                                   (m.getGenericReturnType().equals( 
fieldType ) || (fieldTypeWrapper != null && m.getReturnType().equals( 
fieldTypeWrapper )) || (fieldTypeGeneric != null && 
m.getGenericReturnType().equals(fieldTypeGeneric)) )
    +                                   
(m.getGenericReturnType().equals(fieldType) || (fieldTypeWrapper != null && 
m.getReturnType().equals(fieldTypeWrapper)) || (fieldTypeGeneric != null && 
m.getGenericReturnType().equals(fieldTypeGeneric)))
                                ) {
                                        hasGetter = true;
                                }
                                // check for setters (<FieldName>_$eq for scala)
    -                           if((methodNameLow.equals("set"+fieldNameLow) || 
methodNameLow.equals(fieldNameLow+"_$eq")) &&
    +                           if ((methodNameLow.equals("set"+fieldNameLow) 
|| methodNameLow.equals(fieldNameLow+"_$eq")) &&
                                        m.getParameterTypes().length == 1 && // 
one parameter of the field's type
    -                                   
(m.getGenericParameterTypes()[0].equals( fieldType ) || (fieldTypeWrapper != 
null && m.getParameterTypes()[0].equals( fieldTypeWrapper )) || 
(fieldTypeGeneric != null && 
m.getGenericParameterTypes()[0].equals(fieldTypeGeneric) ) )&&
    +                                   
(m.getGenericParameterTypes()[0].equals( fieldType ) || (fieldTypeWrapper != 
null && m.getParameterTypes()[0].equals(fieldTypeWrapper)) || (fieldTypeGeneric 
!= null && m.getGenericParameterTypes()[0].equals(fieldTypeGeneric)))&&
                                        // return type is void.
                                        m.getReturnType().equals(Void.TYPE)
                                ) {
                                        hasSetter = true;
                                }
                        }
                        if(hasGetter && hasSetter) {
    -                           return true;
    -                   } else {
    -                           if(!hasGetter) {
    -                                   LOG.info(clazz+" does not contain a 
getter for field "+f.getName() );
    -                           }
    -                           if(!hasSetter) {
    -                                   LOG.info(clazz+" does not contain a 
setter for field "+f.getName() );
    +                           return Optional.empty();
    +                   } else if (!hasGetter && !hasSetter) {
    +                           return Optional.of("No getter and setter found 
for field " + f.getName());
    +                   }
    +                   else if(!hasGetter) {
    +                           return Optional.of("No getter found for field " 
+ f.getName());
    +                   }
    +                   else {
    +                           return Optional.of("No setter found for field " 
+ f.getName());
    +                   }
    +           }
    +   }
    +
    +   /**
    +    * Returns whether the given class can be instantiated. This requires a 
public, static, class
    +    * with default constructor. Custom serialization logic must not be 
present.
    +    *
    +    * @param clazz class to be analyzed
    +    * @param allowAbstract if true, allows abstract classes but prints an 
info to the log
    +    */
    +   private static Optional<String> checkSerialization(Class<?> clazz, 
boolean allowAbstract) {
    --- End diff --
    
    Same as above


---

Reply via email to