Program: 91207
Project: 91207
Buggy source:
public void loadExtendsOrImplements(List<ClassOrInterfaceType> extendsList){
  if (extendsList != null) {
    for (    ClassOrInterfaceType type : extendsList) {
      String name=type.accept(nameBuilder,null);
      Symbol<?> s=table.findSymbol(name,ReferenceType.TYPE);
      if (s == null) {
        SymbolType st=ASTSymbolTypeResolver.getInstance().valueOf(type);
        name=st.getClazz().getCanonicalName();
        s=table.findSymbol(name,ReferenceType.TYPE);
      }
      if (s != null) {
        Object location=s.getLocation();
        if (location != null && location instanceof TypeDeclaration) {
          TypeDeclaration superClass=((TypeDeclaration)location);
          superClass.accept(this,s.getInnerScope());
        }
 else {
          Class<?> clazz=s.getType().getClazz();
          Set<Method> methods=MethodInspector.getNonPrivateMethods(clazz);
          Symbol<?> parent=table.findSymbol("String_Node_Str",ReferenceType.VARIABLE);
          if (parent == null) {
            parent=table.pushSymbol("String_Node_Str",ReferenceType.TYPE,new SymbolType(clazz),null);
          }
          Scope parentScope=parent.getInnerScope();
          if (parentScope == null) {
            parentScope=new Scope(parent);
            parent.setInnerScope(parentScope);
          }
          SymbolType typeArg=ASTSymbolTypeResolver.getInstance().valueOf(type);
          List<SymbolType> params=typeArg.getParameterizedTypes();
          table.pushScope(parentScope);
          for (          Method method : methods) {
            Map<String,SymbolType> parameterTypes=null;
            try {
              java.lang.reflect.Type[] genericParameterTypes=method.getGenericParameterTypes();
              SymbolType[] methodArgs=new SymbolType[genericParameterTypes.length];
              if (params != null) {
                parameterTypes=new HashMap<String,SymbolType>();
                TypeVariable<?>[] typeParams=method.getDeclaringClass().getTypeParameters();
                for (int i=0; i < typeParams.length; i++) {
                  SymbolType.valueOf(typeParams[i],params.get(i),parameterTypes,null);
                }
              }
              for (int i=0; i < genericParameterTypes.length; i++) {
                methodArgs[i]=SymbolType.valueOf(genericParameterTypes[i],parameterTypes);
              }
              MethodSymbol methodSymbol=new MethodSymbol(method.getName(),SymbolType.valueOf(method,parameterTypes),null,s.getType(),methodArgs,false,method.isVarArgs(),method,null);
              table.pushSymbol(methodSymbol);
            }
 catch (            Exception e) {
              throw new RuntimeException(e);
            }
          }
          table.popScope(true);
        }
      }
    }
  }
}

Fixed version (ground truth):
public void loadExtendsOrImplements(List<ClassOrInterfaceType> extendsList){
  if (extendsList != null) {
    for (    ClassOrInterfaceType type : extendsList) {
      String name=type.accept(nameBuilder,null);
      Symbol<?> s=table.findSymbol(name,ReferenceType.TYPE);
      if (s == null) {
        SymbolType st=ASTSymbolTypeResolver.getInstance().valueOf(type);
        name=st.getClazz().getCanonicalName();
        s=table.findSymbol(name,ReferenceType.TYPE);
      }
      if (s != null) {
        Object location=s.getLocation();
        if (location != null && location instanceof TypeDeclaration) {
          TypeDeclaration superClass=((TypeDeclaration)location);
          superClass.accept(this,s.getInnerScope());
        }
 else {
          Class<?> clazz=s.getType().getClazz();
          Set<Method> methods=MethodInspector.getNonPrivateMethods(clazz);
          Symbol<?> parent=table.findSymbol("String_Node_Str",ReferenceType.VARIABLE);
          if (parent == null) {
            parent=table.pushSymbol("String_Node_Str",ReferenceType.TYPE,new SymbolType(clazz),null);
          }
          Scope parentScope=parent.getInnerScope();
          if (parentScope == null) {
            parentScope=new Scope(parent);
            parent.setInnerScope(parentScope);
          }
          SymbolType typeArg=ASTSymbolTypeResolver.getInstance().valueOf(type);
          List<SymbolType> params=typeArg.getParameterizedTypes();
          table.pushScope(parentScope);
          for (          Method method : methods) {
            Map<String,SymbolType> parameterTypes=null;
            try {
              java.lang.reflect.Type[] genericParameterTypes=method.getGenericParameterTypes();
              SymbolType[] methodArgs=new SymbolType[genericParameterTypes.length];
              if (params != null) {
                parameterTypes=new HashMap<String,SymbolType>();
                TypeVariable<?>[] typeParams=method.getDeclaringClass().getTypeParameters();
                for (int i=0; i < params.size() && i < typeParams.length; i++) {
                  SymbolType.valueOf(typeParams[i],params.get(i),parameterTypes,null);
                }
              }
              for (int i=0; i < genericParameterTypes.length; i++) {
                methodArgs[i]=SymbolType.valueOf(genericParameterTypes[i],parameterTypes);
              }
              MethodSymbol methodSymbol=new MethodSymbol(method.getName(),SymbolType.valueOf(method,parameterTypes),null,s.getType(),methodArgs,false,method.isVarArgs(),method,null);
              table.pushSymbol(methodSymbol);
            }
 catch (            Exception e) {
              throw new RuntimeException(e);
            }
          }
          table.popScope(true);
        }
      }
    }
  }
}