Program: 102875
Project: 102875
Buggy source:
private void init(Class clazz){
  this.clazz=clazz;
  initTargetUrlPatterns();
  fieldExtractors=new ArrayList<FieldExtractor>();
  if (clazz.isAssignableFrom(AfterExtractor.class)) {
    try {
      afterExtractor=(AfterExtractor)clazz.newInstance();
    }
 catch (    Exception e) {
      throw new IllegalArgumentException(e);
    }
  }
  for (  Field field : clazz.getDeclaredFields()) {
    field.setAccessible(true);
    ExtractBy extractBy=field.getAnnotation(ExtractBy.class);
    if (extractBy != null) {
      if (!extractBy.multi() && !field.getType().isAssignableFrom(String.class)) {
        throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
      }
 else       if (extractBy.multi() && !field.getType().isAssignableFrom(List.class)) {
        throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
      }
      String value=extractBy.value();
      Selector selector;
switch (extractBy.type()) {
case Css:
        selector=new CssSelector(value);
      break;
case Regex:
    selector=new RegexSelector(value);
  break;
case XPath:
selector=new XpathSelector(value);
break;
case XPath2:
selector=new Xpath2Selector(value);
break;
default :
selector=new Xpath2Selector(value);
}
FieldExtractor fieldExtractor=new FieldExtractor(field,selector,FieldExtractor.Source.Html,extractBy.notNull(),extractBy.multi());
Method setterMethod=getSetterMethod(clazz,field);
if (setterMethod != null) {
fieldExtractor.setSetterMethod(setterMethod);
}
fieldExtractors.add(fieldExtractor);
}
ExtractByUrl extractByUrl=field.getAnnotation(ExtractByUrl.class);
if (extractByUrl != null) {
if (!extractByUrl.multi() && !field.getType().isAssignableFrom(String.class)) {
throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
}
 else if (extractByUrl.multi() && !field.getType().isAssignableFrom(List.class)) {
throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
}
String regexPattern=extractByUrl.value();
if (regexPattern.trim().equals("String_Node_Str")) {
regexPattern="String_Node_Str";
}
FieldExtractor fieldExtractor=new FieldExtractor(field,new RegexSelector(regexPattern),FieldExtractor.Source.Url,extractByUrl.notNull(),extractByUrl.multi());
Method setterMethod=getSetterMethod(clazz,field);
if (setterMethod != null) {
fieldExtractor.setSetterMethod(setterMethod);
}
fieldExtractors.add(fieldExtractor);
}
}
}

Fixed version (ground truth):
private void init(Class clazz){
  this.clazz=clazz;
  initTargetUrlPatterns();
  fieldExtractors=new ArrayList<FieldExtractor>();
  if (AfterExtractor.class.isAssignableFrom(clazz)) {
    try {
      afterExtractor=(AfterExtractor)clazz.newInstance();
    }
 catch (    Exception e) {
      throw new IllegalArgumentException(e);
    }
  }
  for (  Field field : clazz.getDeclaredFields()) {
    field.setAccessible(true);
    ExtractBy extractBy=field.getAnnotation(ExtractBy.class);
    if (extractBy != null) {
      if (!extractBy.multi() && !String.class.isAssignableFrom(field.getType())) {
        throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
      }
 else       if (extractBy.multi() && !List.class.isAssignableFrom(field.getType())) {
        throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
      }
      String value=extractBy.value();
      Selector selector;
switch (extractBy.type()) {
case Css:
        selector=new CssSelector(value);
      break;
case Regex:
    selector=new RegexSelector(value);
  break;
case XPath:
selector=new XpathSelector(value);
break;
case XPath2:
selector=new Xpath2Selector(value);
break;
default :
selector=new Xpath2Selector(value);
}
FieldExtractor fieldExtractor=new FieldExtractor(field,selector,FieldExtractor.Source.Html,extractBy.notNull(),extractBy.multi());
Method setterMethod=getSetterMethod(clazz,field);
if (setterMethod != null) {
fieldExtractor.setSetterMethod(setterMethod);
}
fieldExtractors.add(fieldExtractor);
}
ExtractByUrl extractByUrl=field.getAnnotation(ExtractByUrl.class);
if (extractByUrl != null) {
if (!extractByUrl.multi() && !String.class.isAssignableFrom(field.getType())) {
throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
}
 else if (extractByUrl.multi() && !List.class.isAssignableFrom(field.getType())) {
throw new IllegalStateException("String_Node_Str" + field.getName() + "String_Node_Str");
}
String regexPattern=extractByUrl.value();
if (regexPattern.trim().equals("String_Node_Str")) {
regexPattern="String_Node_Str";
}
FieldExtractor fieldExtractor=new FieldExtractor(field,new RegexSelector(regexPattern),FieldExtractor.Source.Url,extractByUrl.notNull(),extractByUrl.multi());
Method setterMethod=getSetterMethod(clazz,field);
if (setterMethod != null) {
fieldExtractor.setSetterMethod(setterMethod);
}
fieldExtractors.add(fieldExtractor);
}
}
}