Program: 33986
Project: 33986
Buggy source:
/** 
 * Method deserialize.
 * @param element JsonElement
 * @param type Type
 * @param context JsonDeserializationContext
 * @return ASObject 
 * @throws JsonParseException
 * @see com.google.gson.JsonDeserializer#deserialize(JsonElement,Type,JsonDeserializationContext) 
 */
public final ASObject deserialize(JsonElement element,Type type,JsonDeserializationContext context) throws JsonParseException {
  JsonObject obj=(JsonObject)element;
  ASObject.AbstractBuilder<?,?> builder=null;
  Model propMap=null;
  TypeValue tv=null;
  if (knowsType(type)) {
    builder=builderFor(type);
    propMap=modelFor(type);
  }
 else {
    if (obj.has("String_Node_Str")) {
      tv=context.deserialize(obj.get("String_Node_Str"),TypeValue.class);
      @SuppressWarnings("String_Node_Str") Class<? extends ASObject.AbstractBuilder> _class=schema.builderForObjectTypeOrClass(tv.id(),(Class)type);
      if (_class != null) {
        propMap=schema.forObjectClassOrType(_class,tv.id());
        if (!_class.isInterface()) {
          try {
            builder=_class.getConstructor(String.class).newInstance(tv.id());
          }
 catch (          Throwable t) {
            try {
              builder=_class.newInstance();
              builder.set("String_Node_Str",tv);
            }
 catch (            Throwable t2) {
              builder=Makers.object(tv);
            }
          }
        }
 else         builder=Makers.object(tv);
      }
 else {
        builder=Makers.object(tv);
        propMap=schema.forObjectClassOrType(ASObject.Builder.class,tv.id());
      }
    }
 else {
      if (obj.has("String_Node_Str") && (obj.has("String_Node_Str") || obj.has("String_Node_Str") || obj.has("String_Node_Str"))) {
        builder=activity();
        propMap=schema.forObjectClassOrType(Activity.Builder.class,"String_Node_Str");
      }
 else       if (obj.has("String_Node_Str")) {
        builder=collection();
        propMap=schema.forObjectClassOrType(Collection.Builder.class,"String_Node_Str");
      }
 else {
        @SuppressWarnings("String_Node_Str") Class<? extends ASObject.AbstractBuilder> _class=schema.builderFor((Class)type);
        if (_class != null) {
          if (!_class.isInterface()) {
            try {
              builder=_class.newInstance();
            }
 catch (            Throwable t) {
              builder=object();
            }
          }
 else           builder=object();
        }
        if (builder == null)         builder=object();
        propMap=schema.forObjectClass(builder.getClass());
        propMap=propMap != null ? propMap : schema.forObjectClass(ASObject.Builder.class);
      }
    }
  }
  for (  Entry<String,JsonElement> entry : obj.entrySet()) {
    String name=entry.getKey();
    if (name.equalsIgnoreCase("String_Node_Str"))     continue;
    Class<?> _class=propMap.get(name);
    JsonElement val=entry.getValue();
    if (val.isJsonPrimitive())     builder.set(name,_class != null ? context.deserialize(val,_class) : primConverter.convert(val.getAsJsonPrimitive()));
 else     if (val.isJsonArray())     builder.set(name,LinkValue.class.isAssignableFrom(_class != null ? _class : Object.class) ? context.deserialize(val,LinkValue.class) : convert(val.getAsJsonArray(),_class,context,builder()));
 else     if (val.isJsonObject())     builder.set(name,context.deserialize(val,propMap.has(name) ? propMap.get(name) : ASObject.class));
  }
  return builder.get();
}

Fixed version (ground truth):
/** 
 * Method deserialize.
 * @param element JsonElement
 * @param type Type
 * @param context JsonDeserializationContext
 * @return ASObject 
 * @throws JsonParseException
 * @see com.google.gson.JsonDeserializer#deserialize(JsonElement,Type,JsonDeserializationContext) 
 */
public final ASObject deserialize(JsonElement element,Type type,JsonDeserializationContext context) throws JsonParseException {
  JsonObject obj=(JsonObject)element;
  ASObject.AbstractBuilder<?,?> builder=null;
  Model propMap=null;
  TypeValue tv=null;
  if (knowsType(type)) {
    builder=builderFor(type);
    propMap=modelFor(type);
  }
 else {
    if (obj.has("String_Node_Str")) {
      tv=context.deserialize(obj.get("String_Node_Str"),TypeValue.class);
      @SuppressWarnings("String_Node_Str") Class<? extends ASObject.AbstractBuilder> _class=schema.builderForObjectTypeOrClass(tv.id(),(Class)type);
      if (_class != null) {
        propMap=schema.forObjectClassOrType(_class,tv.id());
        if (!_class.isInterface()) {
          try {
            builder=_class.getConstructor(String.class).newInstance(tv.id());
          }
 catch (          Throwable t) {
            try {
              builder=_class.newInstance();
              builder.set("String_Node_Str",tv);
            }
 catch (            Throwable t2) {
              builder=Makers.object(tv);
            }
          }
        }
 else         builder=Makers.object(tv);
      }
 else {
        builder=Makers.object(tv);
        propMap=schema.forObjectClassOrType(ASObject.Builder.class,tv.id());
      }
    }
 else {
      if (obj.has("String_Node_Str") && (obj.has("String_Node_Str") || obj.has("String_Node_Str") || obj.has("String_Node_Str"))) {
        builder=activity();
        propMap=schema.forObjectClassOrType(Activity.Builder.class,"String_Node_Str");
      }
 else       if (obj.has("String_Node_Str")) {
        builder=collection();
        propMap=schema.forObjectClassOrType(Collection.Builder.class,"String_Node_Str");
      }
 else {
        @SuppressWarnings("String_Node_Str") Class<? extends ASObject.AbstractBuilder> _class=schema.builderFor((Class)type);
        if (_class != null) {
          if (!_class.isInterface()) {
            try {
              builder=_class.newInstance();
            }
 catch (            Throwable t) {
              builder=object();
            }
          }
 else           builder=object();
        }
        if (builder == null)         builder=object();
        propMap=schema.forObjectClass(builder.getClass());
        propMap=propMap != null ? propMap : schema.forObjectClass(ASObject.Builder.class);
      }
    }
  }
  for (  Entry<String,JsonElement> entry : obj.entrySet()) {
    String name=entry.getKey();
    if (name.equalsIgnoreCase("String_Node_Str"))     continue;
    Class<?> _class=propMap.get(name);
    JsonElement val=entry.getValue();
    if (val.isJsonPrimitive())     builder.set(name,_class != null ? context.deserialize(val,_class) : primConverter.convert(val.getAsJsonPrimitive()));
 else     if (val.isJsonArray()) {
      builder.set(name,LinkValue.class.isAssignableFrom(_class != null ? _class : Object.class) ? context.deserialize(val,LinkValue.class) : convert(val.getAsJsonArray(),_class,context,builder()));
    }
 else     if (val.isJsonObject())     builder.set(name,context.deserialize(val,propMap.has(name) ? propMap.get(name) : ASObject.class));
  }
  return builder.get();
}