Dynamic{Set,Map} should only include explicitly bound items.
Currently, the Dynamic{Set,Map}Provider includes any binding that
matches the type of the Set or Map, whether it was bound via the
Dynamic{Set,Map} or not. The Dynamic{Set,Map}Provider was updated
to include only bindings with an Annotation.
Change-Id: I124101c982bd52bc3bf27c7bcd70138fd203226a
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicMapProvider.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicMapProvider.java
index 816cf01..c6e4701 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicMapProvider.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicMapProvider.java
@@ -38,7 +38,9 @@
List<Binding<T>> bindings = injector.findBindingsByType(type);
if (bindings != null) {
for (Binding<T> b : bindings) {
- m.put("gerrit", b.getKey(), b.getProvider());
+ if (b.getKey().getAnnotation() != null) {
+ m.put("gerrit", b.getKey(), b.getProvider());
+ }
}
}
return m;
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java
index 64b45e8..6c21553 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java
@@ -19,6 +19,7 @@
import com.google.inject.Injector;
import com.google.inject.Provider;
import com.google.inject.TypeLiteral;
+import com.google.inject.internal.UniqueAnnotations;
import java.util.ArrayList;
import java.util.Collections;
@@ -26,6 +27,8 @@
import java.util.concurrent.atomic.AtomicReference;
class DynamicSetProvider<T> implements Provider<DynamicSet<T>> {
+ private static final Class<?> UNIQUE_ANNOTATION =
+ UniqueAnnotations.create().getClass();
private final TypeLiteral<T> type;
@Inject
@@ -49,7 +52,9 @@
}
List<AtomicReference<Provider<T>>> r = newList(cnt);
for (Binding<T> b : bindings) {
- r.add(new AtomicReference<Provider<T>>(b.getProvider()));
+ if (b.getKey().getAnnotation() != null) {
+ r.add(new AtomicReference<Provider<T>>(b.getProvider()));
+ }
}
return r;
}