Program: 66274
Project: 66274
Buggy source:
/** 
 * INTERNAL: Complete building TypeInfo objects for a given set of JavaClass instances. This method assumes  that init, preBuildTypeInfo, and postBuildTypeInfo have been called.
 * @param allClasses
 * @return
 */
private Map<String,TypeInfo> buildTypeInfo(JavaClass[] allClasses){
  for (  JavaClass javaClass : allClasses) {
    if (javaClass == null) {
      continue;
    }
    TypeInfo info=typeInfo.get(javaClass.getQualifiedName());
    if (info == null || info.isPostBuilt()) {
      continue;
    }
    info.setPostBuilt(true);
    processFactoryMethods(javaClass,info);
    NamespaceInfo packageNamespace=getNamespaceInfoForPackage(javaClass);
    postProcessXmlAccessorType(info,packageNamespace);
    postProcessXmlType(javaClass,info,packageNamespace);
    if (info.isEnumerationType()) {
      addEnumTypeInfo(javaClass,((EnumTypeInfo)info));
      continue;
    }
    processTypeQName(javaClass,info,packageNamespace);
    JavaClass superClass=(JavaClass)javaClass.getSuperclass();
    if (shouldGenerateTypeInfo(superClass)) {
      JavaClass[] jClassArray=new JavaClass[]{superClass};
      buildNewTypeInfo(jClassArray);
    }
    info.setProperties(getPropertiesForClass(javaClass,info));
    processTypeInfoProperties(javaClass,info);
    postProcessXmlAccessorOrder(info,packageNamespace);
    if (info.getFactoryMethodName() == null && info.getObjectFactoryClassName() == null) {
      JavaConstructor zeroArgConstructor=javaClass.getDeclaredConstructor(new JavaClass[]{});
      if (zeroArgConstructor == null) {
        throw org.eclipse.persistence.exceptions.JAXBException.factoryMethodOrConstructorRequired(javaClass.getName());
      }
    }
    validatePropOrderForInfo(info);
  }
  return typeInfo;
}

Fixed version (ground truth):
/** 
 * INTERNAL: Complete building TypeInfo objects for a given set of JavaClass instances. This method assumes  that init, preBuildTypeInfo, and postBuildTypeInfo have been called.
 * @param allClasses
 * @return
 */
private Map<String,TypeInfo> buildTypeInfo(JavaClass[] allClasses){
  for (  JavaClass javaClass : allClasses) {
    if (javaClass == null) {
      continue;
    }
    TypeInfo info=typeInfo.get(javaClass.getQualifiedName());
    if (info == null || info.isPostBuilt()) {
      continue;
    }
    info.setPostBuilt(true);
    processFactoryMethods(javaClass,info);
    NamespaceInfo packageNamespace=getNamespaceInfoForPackage(javaClass);
    postProcessXmlAccessorType(info,packageNamespace);
    postProcessXmlType(javaClass,info,packageNamespace);
    if (info.isEnumerationType()) {
      addEnumTypeInfo(javaClass,((EnumTypeInfo)info));
      continue;
    }
    processTypeQName(javaClass,info,packageNamespace);
    JavaClass superClass=(JavaClass)javaClass.getSuperclass();
    if (shouldGenerateTypeInfo(superClass)) {
      JavaClass[] jClassArray=new JavaClass[]{superClass};
      buildNewTypeInfo(jClassArray);
    }
    info.setProperties(getPropertiesForClass(javaClass,info));
    processTypeInfoProperties(javaClass,info);
    postProcessXmlAccessorOrder(info,packageNamespace);
    if (!javaClass.isInterface()) {
      if (info.getFactoryMethodName() == null && info.getObjectFactoryClassName() == null) {
        JavaConstructor zeroArgConstructor=javaClass.getDeclaredConstructor(new JavaClass[]{});
        if (zeroArgConstructor == null) {
          throw org.eclipse.persistence.exceptions.JAXBException.factoryMethodOrConstructorRequired(javaClass.getName());
        }
      }
    }
    validatePropOrderForInfo(info);
  }
  return typeInfo;
}