Program: 60526
Project: 60526
Buggy source:
public void testBindToProvider(){
  final Provider<String> aProvider=new Provider<String>(){
    public String get(){
      return "String_Node_Str";
    }
  }
;
  checkModule(new AbstractModule(){
    protected void configure(){
      bind(String.class).toProvider(aProvider);
      bind(List.class).toProvider(ListProvider.class);
      bind(Collection.class).toProvider(Key.get(ListProvider.class));
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderInstanceBinding);
      assertEquals(Key.get(String.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderInstanceBinding<? extends T> binding){
          assertSame(aProvider,binding.getProviderInstance());
          return null;
        }
      }
);
      return null;
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderKeyBinding);
      assertEquals(Key.get(List.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderKeyBinding<? extends T> binding){
          assertEquals(Key.get(ListProvider.class),binding.getProviderKey());
          return null;
        }
      }
);
      return null;
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderKeyBinding);
      assertEquals(Key.get(Collection.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderKeyBinding<? extends T> binding){
          assertEquals(Key.get(ListProvider.class),binding.getProviderKey());
          return null;
        }
      }
);
      return null;
    }
  }
);
}

Fixed version (ground truth):
public void testBindToProvider(){
  final Provider<String> aProvider=new Provider<String>(){
    public String get(){
      return "String_Node_Str";
    }
  }
;
  checkModule(new AbstractModule(){
    protected void configure(){
      bind(String.class).toProvider(aProvider);
      bind(List.class).toProvider(ListProvider.class);
      bind(Collection.class).toProvider(Key.get(ListProvider.class));
      bind(Iterable.class).toProvider(new TypeLiteral<TProvider<List>>(){
      }
);
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderInstanceBinding);
      assertEquals(Key.get(String.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderInstanceBinding<? extends T> binding){
          assertSame(aProvider,binding.getProviderInstance());
          return null;
        }
      }
);
      return null;
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderKeyBinding);
      assertEquals(Key.get(List.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderKeyBinding<? extends T> binding){
          assertEquals(Key.get(ListProvider.class),binding.getProviderKey());
          return null;
        }
      }
);
      return null;
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderKeyBinding);
      assertEquals(Key.get(Collection.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderKeyBinding<? extends T> binding){
          assertEquals(Key.get(ListProvider.class),binding.getProviderKey());
          return null;
        }
      }
);
      return null;
    }
  }
,new FailingElementVisitor(){
    @Override public <T>Void visit(    Binding<T> command){
      assertTrue(command instanceof ProviderKeyBinding);
      assertEquals(Key.get(Iterable.class),command.getKey());
      command.acceptTargetVisitor(new FailingTargetVisitor<T>(){
        @Override public Void visit(        ProviderKeyBinding<? extends T> binding){
          assertEquals(new Key<TProvider<List>>(){
          }
,binding.getProviderKey());
          return null;
        }
      }
);
      return null;
    }
  }
);
}