Program: 60639
Project: 60639
Buggy source:
/** 
 * This test ensures that regardless of binding order, instances are injected before they are used.
 */
public void testCreationTimeInjectionOrdering(){
  Injector injector=Guice.createInjector(new AbstractModule(){
    protected void configure(){
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(0){
        @Inject void initialize(        @Named("String_Node_Str") Count bCount){
          value=bCount.value + 1;
        }
      }
);
      bind(Count.class).annotatedWith(named("String_Node_Str")).toProvider(new Provider<Count>(){
        Count count;
        @Inject void initialize(        @Named("String_Node_Str") Count cCount){
          count=new Count(cCount.value + 2);
        }
        public Count get(){
          return count;
        }
      }
);
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(0){
        @Inject @Named("String_Node_Str") Count dCount;
        @Inject void initialize(        @Named("String_Node_Str") Count eCount){
          value=dCount.value + eCount.value + 4;
        }
      }
);
      requestStaticInjection(StaticallyInjectable.class);
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(8));
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(16));
    }
  }
);
  assertEquals(28,injector.getInstance(Key.get(Count.class,named("String_Node_Str"))).value);
  assertEquals(30,injector.getInstance(Key.get(Count.class,named("String_Node_Str"))).value);
  assertEquals(31,injector.getInstance(Key.get(Count.class,named("String_Node_Str"))).value);
  assertEquals(28,StaticallyInjectable.cCountAtInjectionTime);
}

Fixed version (ground truth):
/** 
 * This test ensures that regardless of binding order, instances are injected before they are used. It injects mutable Count objects and records their value at the time that they're injected.
 */
public void testCreationTimeInjectionOrdering(){
  Injector injector=Guice.createInjector(new AbstractModule(){
    protected void configure(){
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(0){
        @Inject void initialize(        @Named("String_Node_Str") Count bCount){
          value=bCount.value + 1;
        }
      }
);
      bind(Count.class).annotatedWith(named("String_Node_Str")).toProvider(new Provider<Count>(){
        Count count;
        @Inject void initialize(        @Named("String_Node_Str") Count cCount){
          count=new Count(cCount.value + 2);
        }
        public Count get(){
          return count;
        }
      }
);
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(0){
        @Inject @Named("String_Node_Str") Count dCount;
        @Inject void initialize(        @Named("String_Node_Str") Count eCount){
          value=dCount.value + eCount.value + 4;
        }
      }
);
      requestStaticInjection(StaticallyInjectable.class);
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(8));
      bind(Count.class).annotatedWith(named("String_Node_Str")).toInstance(new Count(16));
    }
  }
);
  assertEquals(28,injector.getInstance(Key.get(Count.class,named("String_Node_Str"))).value);
  assertEquals(30,injector.getInstance(Key.get(Count.class,named("String_Node_Str"))).value);
  assertEquals(31,injector.getInstance(Key.get(Count.class,named("String_Node_Str"))).value);
  assertEquals(28,StaticallyInjectable.cCountAtInjectionTime);
}