Program: 60425
Project: 60425
Buggy source:
/** 
 * Creates a binding for a type annotated with @ProvidedBy. 
 */
<T>BindingImpl<T> createProvidedByBinding(Key<T> key,Scoping scoping,ProvidedBy providedBy,Errors errors) throws ErrorsException {
  final Class<?> rawType=key.getTypeLiteral().getRawType();
  final Class<? extends Provider<?>> providerType=providedBy.value();
  if (providerType == rawType) {
    throw errors.recursiveProviderType().toException();
  }
  @SuppressWarnings("String_Node_Str") final Key<? extends Provider<T>> providerKey=(Key<? extends Provider<T>>)Key.get(providerType);
  final BindingImpl<? extends Provider<?>> providerBinding=getBindingOrThrow(providerKey,errors,JitLimitation.NEW_OR_EXISTING_JIT);
  InternalFactory<T> internalFactory=new InternalFactory<T>(){
    public T get(    Errors errors,    InternalContext context,    Dependency dependency,    boolean linked) throws ErrorsException {
      errors=errors.withSource(providerKey);
      Provider<?> provider=providerBinding.getInternalFactory().get(errors,context,dependency,true);
      try {
        Object o=provider.get();
        if (o != null && !rawType.isInstance(o)) {
          throw errors.subtypeNotProvided(providerType,rawType).toException();
        }
        @SuppressWarnings("String_Node_Str") T t=(T)o;
        return t;
      }
 catch (      RuntimeException e) {
        throw errors.errorInProvider(e).toException();
      }
    }
  }
;
  Object source=rawType;
  return new LinkedProviderBindingImpl<T>(this,key,source,Scoping.<T>scope(key,this,internalFactory,source,scoping),scoping,providerKey);
}

Fixed version (ground truth):
/** 
 * Creates a binding for a type annotated with @ProvidedBy. 
 */
<T>BindingImpl<T> createProvidedByBinding(Key<T> key,Scoping scoping,ProvidedBy providedBy,Errors errors) throws ErrorsException {
  final Class<?> rawType=key.getTypeLiteral().getRawType();
  final Class<? extends Provider<?>> providerType=providedBy.value();
  if (providerType == rawType) {
    throw errors.recursiveProviderType().toException();
  }
  @SuppressWarnings("String_Node_Str") final Key<? extends Provider<T>> providerKey=(Key<? extends Provider<T>>)Key.get(providerType);
  final BindingImpl<? extends Provider<?>> providerBinding=getBindingOrThrow(providerKey,errors,JitLimitation.NEW_OR_EXISTING_JIT);
  InternalFactory<T> internalFactory=new ProviderInternalFactory<T>(providerKey,!options.disableCircularProxies){
    public T get(    Errors errors,    InternalContext context,    Dependency dependency,    boolean linked) throws ErrorsException {
      errors=errors.withSource(providerKey);
      Provider provider=providerBinding.getInternalFactory().get(errors,context,dependency,true);
      try {
        @SuppressWarnings("String_Node_Str") Object o=circularGet(provider,errors,context,dependency,linked);
        if (o != null && !rawType.isInstance(o)) {
          throw errors.subtypeNotProvided(providerType,rawType).toException();
        }
        @SuppressWarnings("String_Node_Str") T t=(T)o;
        return t;
      }
 catch (      RuntimeException e) {
        throw errors.errorInProvider(e).toException();
      }
    }
  }
;
  Object source=rawType;
  return new LinkedProviderBindingImpl<T>(this,key,source,Scoping.<T>scope(key,this,internalFactory,source,scoping),scoping,providerKey);
}