Fixing a bug in the unique annotation in throwingproviderbinder
git-svn-id: https://google-guice.googlecode.com/svn/trunk@427 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java b/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
index 58c7985..94c14d8 100644
--- a/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
+++ b/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
@@ -16,24 +16,15 @@
package com.google.inject.throwingproviders;
-import com.google.inject.Binder;
-import com.google.inject.BindingAnnotation;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.Key;
-import com.google.inject.Provider;
-import com.google.inject.TypeLiteral;
+import com.google.inject.*;
import com.google.inject.binder.ScopedBindingBuilder;
import com.google.inject.internal.Objects;
+
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
+import java.lang.reflect.*;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* <p>Builds a binding for an {@link ThrowingProvider} using a fluent API:
@@ -250,14 +241,35 @@
* instances, for use in creating distinct {@link Key}s.
*/
private static Annotation uniqueAnnotation() {
- return new Annotation() {
+ final int value = nextUniqueValue.getAndIncrement();
+ return new Internal() {
+ public int value() {
+ return value;
+ }
+
public Class<? extends Annotation> annotationType() {
return Internal.class;
}
+
+ @Override public String toString() {
+ return "@" + Internal.class.getName() + "(value=" + value + ")";
+ }
+
+ @Override public boolean equals(Object o) {
+ return o instanceof Internal
+ && ((Internal) o).value() == value();
+ }
+
+ @Override public int hashCode() {
+ return 127 * "value".hashCode() ^ value;
+ }
};
}
@Retention(RUNTIME) @BindingAnnotation
- private @interface Internal { }
+ private @interface Internal {
+ int value();
+ }
+ private static final AtomicInteger nextUniqueValue = new AtomicInteger(1);
/**
* Represents the returned value from a call to {@link