Program: 133782
Project: 133782
Buggy source:
@Override public void validate(IValidatable<T> validatable){
  T fieldValue=validatable.getValue();
  OProperty p=getProperty();
  if (fieldValue == null) {
    if (p.isNotNull()) {
      validatable.error(new ValidationError(this,"String_Node_Str"));
    }
  }
 else {
    OType type=p.getType();
switch (type) {
case LINK:
      validateLink(validatable,p,fieldValue);
    break;
case LINKLIST:
  if (!(fieldValue instanceof List))   validatable.error(newValidationError("String_Node_Str"));
 else   if (p.getLinkedClass() != null)   for (  Object item : ((List<?>)fieldValue))   validateLink(validatable,p,item);
break;
case LINKSET:
if (!(fieldValue instanceof Set)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) for (Object item : ((Set<?>)fieldValue)) validateLink(validatable,p,item);
break;
case LINKMAP:
if (!(fieldValue instanceof Map)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) for (Entry<?,?> entry : ((Map<?,?>)fieldValue).entrySet()) validateLink(validatable,p,entry.getValue());
break;
case EMBEDDED:
validateEmbedded(validatable,p,fieldValue);
break;
case EMBEDDEDLIST:
if (!(fieldValue instanceof List)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) {
for (Object item : ((List<?>)fieldValue)) validateEmbedded(validatable,p,item);
}
 else if (p.getLinkedType() != null) {
for (Object item : ((List<?>)fieldValue)) validateType(validatable,p,item);
}
break;
case EMBEDDEDSET:
if (!(fieldValue instanceof Set)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) {
for (Object item : ((Set<?>)fieldValue)) validateEmbedded(validatable,p,item);
}
 else if (p.getLinkedType() != null) {
for (Object item : ((Set<?>)fieldValue)) validateType(validatable,p,item);
}
break;
case EMBEDDEDMAP:
if (!(fieldValue instanceof Map)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) {
for (Entry<?,?> entry : ((Map<?,?>)fieldValue).entrySet()) validateEmbedded(validatable,p,entry.getValue());
}
 else if (p.getLinkedType() != null) {
for (Entry<?,?> entry : ((Map<?,?>)fieldValue).entrySet()) validateType(validatable,p,entry.getValue());
}
break;
default :
break;
}
if (p.getMin() != null) {
final String min=p.getMin();
if (p.getType().equals(OType.STRING) && (fieldValue != null && ((String)fieldValue).length() < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.BINARY) && (fieldValue != null && ((byte[])fieldValue).length < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.INTEGER) && (fieldValue != null && type.asInt(fieldValue) < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.LONG) && (fieldValue != null && type.asLong(fieldValue) < Long.parseLong(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.FLOAT) && (fieldValue != null && type.asFloat(fieldValue) < Float.parseFloat(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.DOUBLE) && (fieldValue != null && type.asDouble(fieldValue) < Double.parseDouble(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.DATE)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateFormatInstance().parse(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
}
 catch (ParseException e) {
}
}
 else if (p.getType().equals(OType.DATETIME)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateTimeFormatInstance().parse(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
}
 catch (ParseException e) {
}
}
 else if ((p.getType().equals(OType.EMBEDDEDLIST) || p.getType().equals(OType.EMBEDDEDSET) || p.getType().equals(OType.LINKLIST)|| p.getType().equals(OType.LINKSET)) && (fieldValue != null && ((Collection<?>)fieldValue).size() < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
}
if (p.getMax() != null) {
final String max=p.getMax();
if (p.getType().equals(OType.STRING) && (fieldValue != null && ((String)fieldValue).length() > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.BINARY) && (fieldValue != null && ((byte[])fieldValue).length > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.INTEGER) && (fieldValue != null && type.asInt(fieldValue) > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.LONG) && (fieldValue != null && type.asLong(fieldValue) > Long.parseLong(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.FLOAT) && (fieldValue != null && type.asFloat(fieldValue) > Float.parseFloat(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.DOUBLE) && (fieldValue != null && type.asDouble(fieldValue) > Double.parseDouble(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.DATE)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateFormatInstance().parse(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
}
 catch (ParseException e) {
}
}
 else if (p.getType().equals(OType.DATETIME)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateTimeFormatInstance().parse(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
}
 catch (ParseException e) {
}
}
 else if ((p.getType().equals(OType.EMBEDDEDLIST) || p.getType().equals(OType.EMBEDDEDSET) || p.getType().equals(OType.LINKLIST)|| p.getType().equals(OType.LINKSET)) && (fieldValue != null && ((Collection<?>)fieldValue).size() > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
}
}
}

Fixed version (ground truth):
@Override public void validate(IValidatable<T> validatable){
  T fieldValue=validatable.getValue();
  OProperty p=getProperty();
  if (fieldValue == null) {
    if (p.isNotNull()) {
      validatable.error(newValidationError("String_Node_Str"));
    }
  }
 else {
    OType type=p.getType();
switch (type) {
case LINK:
      validateLink(validatable,p,fieldValue);
    break;
case LINKLIST:
  if (!(fieldValue instanceof List))   validatable.error(newValidationError("String_Node_Str"));
 else   if (p.getLinkedClass() != null)   for (  Object item : ((List<?>)fieldValue))   validateLink(validatable,p,item);
break;
case LINKSET:
if (!(fieldValue instanceof Set)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) for (Object item : ((Set<?>)fieldValue)) validateLink(validatable,p,item);
break;
case LINKMAP:
if (!(fieldValue instanceof Map)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) for (Entry<?,?> entry : ((Map<?,?>)fieldValue).entrySet()) validateLink(validatable,p,entry.getValue());
break;
case EMBEDDED:
validateEmbedded(validatable,p,fieldValue);
break;
case EMBEDDEDLIST:
if (!(fieldValue instanceof List)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) {
for (Object item : ((List<?>)fieldValue)) validateEmbedded(validatable,p,item);
}
 else if (p.getLinkedType() != null) {
for (Object item : ((List<?>)fieldValue)) validateType(validatable,p,item);
}
break;
case EMBEDDEDSET:
if (!(fieldValue instanceof Set)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) {
for (Object item : ((Set<?>)fieldValue)) validateEmbedded(validatable,p,item);
}
 else if (p.getLinkedType() != null) {
for (Object item : ((Set<?>)fieldValue)) validateType(validatable,p,item);
}
break;
case EMBEDDEDMAP:
if (!(fieldValue instanceof Map)) validatable.error(newValidationError("String_Node_Str"));
 else if (p.getLinkedClass() != null) {
for (Entry<?,?> entry : ((Map<?,?>)fieldValue).entrySet()) validateEmbedded(validatable,p,entry.getValue());
}
 else if (p.getLinkedType() != null) {
for (Entry<?,?> entry : ((Map<?,?>)fieldValue).entrySet()) validateType(validatable,p,entry.getValue());
}
break;
default :
break;
}
if (p.getMin() != null) {
final String min=p.getMin();
if (p.getType().equals(OType.STRING) && (fieldValue != null && ((String)fieldValue).length() < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.BINARY) && (fieldValue != null && ((byte[])fieldValue).length < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.INTEGER) && (fieldValue != null && type.asInt(fieldValue) < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.LONG) && (fieldValue != null && type.asLong(fieldValue) < Long.parseLong(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.FLOAT) && (fieldValue != null && type.asFloat(fieldValue) < Float.parseFloat(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.DOUBLE) && (fieldValue != null && type.asDouble(fieldValue) < Double.parseDouble(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
 else if (p.getType().equals(OType.DATE)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateFormatInstance().parse(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
}
 catch (ParseException e) {
}
}
 else if (p.getType().equals(OType.DATETIME)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateTimeFormatInstance().parse(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
}
 catch (ParseException e) {
}
}
 else if ((p.getType().equals(OType.EMBEDDEDLIST) || p.getType().equals(OType.EMBEDDEDSET) || p.getType().equals(OType.LINKLIST)|| p.getType().equals(OType.LINKSET)) && (fieldValue != null && ((Collection<?>)fieldValue).size() < Integer.parseInt(min))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",min));
}
if (p.getMax() != null) {
final String max=p.getMax();
if (p.getType().equals(OType.STRING) && (fieldValue != null && ((String)fieldValue).length() > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.BINARY) && (fieldValue != null && ((byte[])fieldValue).length > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.INTEGER) && (fieldValue != null && type.asInt(fieldValue) > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.LONG) && (fieldValue != null && type.asLong(fieldValue) > Long.parseLong(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.FLOAT) && (fieldValue != null && type.asFloat(fieldValue) > Float.parseFloat(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.DOUBLE) && (fieldValue != null && type.asDouble(fieldValue) > Double.parseDouble(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
 else if (p.getType().equals(OType.DATE)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateFormatInstance().parse(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
}
 catch (ParseException e) {
}
}
 else if (p.getType().equals(OType.DATETIME)) {
try {
if (fieldValue != null && ((Date)fieldValue).before(getDatabase().getStorage().getConfiguration().getDateTimeFormatInstance().parse(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
}
 catch (ParseException e) {
}
}
 else if ((p.getType().equals(OType.EMBEDDEDLIST) || p.getType().equals(OType.EMBEDDEDSET) || p.getType().equals(OType.LINKLIST)|| p.getType().equals(OType.LINKSET)) && (fieldValue != null && ((Collection<?>)fieldValue).size() > Integer.parseInt(max))) validatable.error(newValidationError("String_Node_Str","String_Node_Str",max));
}
}
}