/**
  * Returns the {@link JavaType} from the specified {@link MemberDetails} object;
  *
  * <p>If the found type is abstract the next {@link MemberHoldingTypeDetails} is searched.
  *
  * @param memberDetails the {@link MemberDetails} to search (required)
  * @return the first non-abstract JavaType, or null if not found
  */
 private JavaType getConcreteJavaType(MemberDetails memberDetails) {
   Assert.notNull(memberDetails, "Member details required");
   JavaType javaType = null;
   for (MemberHoldingTypeDetails memberHoldingTypeDetails : memberDetails.getDetails()) {
     if (Modifier.isAbstract(memberHoldingTypeDetails.getModifier())) {
       continue;
     }
     javaType = memberHoldingTypeDetails.getName();
   }
   return javaType;
 }