diff options
author | Edwin Kempin <ekempin@google.com> | 2018-09-27 14:13:59 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-09-27 14:13:59 +0000 |
commit | 446969b8b8db7c9e7bb05264554c4ba5d247dc99 (patch) | |
tree | 12bedb71f7be88e8618e5b4bf5af33ac56888673 | |
parent | a385f3f2b66ae23664a6c9e0f2d5da11fc0267c8 (diff) | |
parent | abf6404f3b3f87e0f35de4ab2926b5df47c1dbfe (diff) |
Merge "Have common class for entries in DynamicMap/DynamicSet/DynamicItem"
23 files changed, 160 insertions, 157 deletions
diff --git a/java/com/google/gerrit/extensions/registration/DynamicItem.java b/java/com/google/gerrit/extensions/registration/DynamicItem.java index 4f36ab4817..67982d9040 100644 --- a/java/com/google/gerrit/extensions/registration/DynamicItem.java +++ b/java/com/google/gerrit/extensions/registration/DynamicItem.java @@ -111,17 +111,22 @@ public class DynamicItem<T> { } private final Key<DynamicItem<T>> key; - private final AtomicReference<NamedProvider<T>> ref; + private final AtomicReference<Extension<T>> ref; DynamicItem(Key<DynamicItem<T>> key, Provider<T> provider, String pluginName) { - NamedProvider<T> in = null; + Extension<T> in = null; if (provider != null) { - in = new NamedProvider<>(provider, pluginName); + in = new Extension<>(pluginName, provider); } this.key = key; this.ref = new AtomicReference<>(in); } + @Nullable + public Extension<T> getEntry() { + return ref.get(); + } + /** * Get the configured item, or null. * @@ -130,8 +135,8 @@ public class DynamicItem<T> { */ @Nullable public T get() { - NamedProvider<T> item = ref.get(); - return item != null ? item.impl.get() : null; + Extension<T> item = ref.get(); + return item != null ? item.get() : null; } /** @@ -143,8 +148,8 @@ public class DynamicItem<T> { */ @Nullable public String getPluginName() { - NamedProvider<T> item = ref.get(); - return item != null ? item.pluginName : null; + Extension<T> item = ref.get(); + return item != null ? item.getPluginName() : null; } /** @@ -166,19 +171,19 @@ public class DynamicItem<T> { * @return handle to remove the item at a later point in time. */ public RegistrationHandle set(Provider<T> impl, String pluginName) { - final NamedProvider<T> item = new NamedProvider<>(impl, pluginName); - NamedProvider<T> old = null; + final Extension<T> item = new Extension<>(pluginName, impl); + Extension<T> old = null; while (!ref.compareAndSet(old, item)) { old = ref.get(); - if (old != null && !PluginName.GERRIT.equals(old.pluginName)) { + if (old != null && !PluginName.GERRIT.equals(old.getPluginName())) { throw new ProvisionException( String.format( "%s already provided by %s, ignoring plugin %s", - key.getTypeLiteral(), old.pluginName, pluginName)); + key.getTypeLiteral(), old.getPluginName(), pluginName)); } } - final NamedProvider<T> defaultItem = old; + final Extension<T> defaultItem = old; return new RegistrationHandle() { @Override public void remove() { @@ -198,13 +203,13 @@ public class DynamicItem<T> { * @return a handle that can remove this item later, or hot-swap the item. */ public ReloadableRegistrationHandle<T> set(Key<T> key, Provider<T> impl, String pluginName) { - final NamedProvider<T> item = new NamedProvider<>(impl, pluginName); - NamedProvider<T> old = null; + final Extension<T> item = new Extension<>(pluginName, impl); + Extension<T> old = null; while (!ref.compareAndSet(old, item)) { old = ref.get(); if (old != null - && !PluginName.GERRIT.equals(old.pluginName) - && !pluginName.equals(old.pluginName)) { + && !PluginName.GERRIT.equals(old.getPluginName()) + && !pluginName.equals(old.getPluginName())) { // We allow to replace: // 1. Gerrit core items, e.g. websession cache // can be replaced by plugin implementation @@ -212,7 +217,7 @@ public class DynamicItem<T> { throw new ProvisionException( String.format( "%s already provided by %s, ignoring plugin %s", - this.key.getTypeLiteral(), old.pluginName, pluginName)); + this.key.getTypeLiteral(), old.getPluginName(), pluginName)); } } return new ReloadableHandle(key, item, old); @@ -220,10 +225,10 @@ public class DynamicItem<T> { private class ReloadableHandle implements ReloadableRegistrationHandle<T> { private final Key<T> handleKey; - private final NamedProvider<T> item; - private final NamedProvider<T> defaultItem; + private final Extension<T> item; + private final Extension<T> defaultItem; - ReloadableHandle(Key<T> handleKey, NamedProvider<T> item, NamedProvider<T> defaultItem) { + ReloadableHandle(Key<T> handleKey, Extension<T> item, Extension<T> defaultItem) { this.handleKey = handleKey; this.item = item; this.defaultItem = defaultItem; @@ -242,7 +247,7 @@ public class DynamicItem<T> { @Override @Nullable public ReloadableHandle replace(Key<T> newKey, Provider<T> newItem) { - NamedProvider<T> n = new NamedProvider<>(newItem, item.pluginName); + Extension<T> n = new Extension<>(item.getPluginName(), newItem); if (ref.compareAndSet(item, n)) { return new ReloadableHandle(newKey, n, defaultItem); } diff --git a/java/com/google/gerrit/extensions/registration/DynamicMap.java b/java/com/google/gerrit/extensions/registration/DynamicMap.java index 96d19b2090..48b1279489 100644 --- a/java/com/google/gerrit/extensions/registration/DynamicMap.java +++ b/java/com/google/gerrit/extensions/registration/DynamicMap.java @@ -40,29 +40,7 @@ import java.util.concurrent.ConcurrentMap; * resolve the provider to an instance on demand. This enables registrations to decide between * singleton and non-singleton members. */ -public abstract class DynamicMap<T> implements Iterable<DynamicMap.Entry<T>> { - public static class Entry<T> { - private final NamePair namePair; - private final Provider<T> provider; - - private Entry(NamePair namePair, Provider<T> provider) { - this.namePair = namePair; - this.provider = provider; - } - - public String getPluginName() { - return namePair.pluginName; - } - - public String getExportName() { - return namePair.exportName; - } - - public Provider<T> getProvider() { - return provider; - } - } - +public abstract class DynamicMap<T> implements Iterable<Extension<T>> { /** * Declare a singleton {@code DynamicMap<T>} with a binder. * @@ -166,18 +144,18 @@ public abstract class DynamicMap<T> implements Iterable<DynamicMap.Entry<T>> { /** Iterate through all entries in an undefined order. */ @Override - public Iterator<Entry<T>> iterator() { + public Iterator<Extension<T>> iterator() { final Iterator<Map.Entry<NamePair, Provider<T>>> i = items.entrySet().iterator(); - return new Iterator<Entry<T>>() { + return new Iterator<Extension<T>>() { @Override public boolean hasNext() { return i.hasNext(); } @Override - public Entry<T> next() { + public Extension<T> next() { Map.Entry<NamePair, Provider<T>> e = i.next(); - return new Entry<>(e.getKey(), e.getValue()); + return new Extension<>(e.getKey().pluginName, e.getKey().exportName, e.getValue()); } @Override diff --git a/java/com/google/gerrit/extensions/registration/DynamicSet.java b/java/com/google/gerrit/extensions/registration/DynamicSet.java index 6b3a49bffe..dcd0d8f1b0 100644 --- a/java/com/google/gerrit/extensions/registration/DynamicSet.java +++ b/java/com/google/gerrit/extensions/registration/DynamicSet.java @@ -45,24 +45,6 @@ import java.util.concurrent.atomic.AtomicReference; * singleton and non-singleton members. */ public class DynamicSet<T> implements Iterable<T> { - public static class Entry<T> { - private final String pluginName; - private final Provider<T> provider; - - private Entry(String pluginName, Provider<T> provider) { - this.pluginName = pluginName; - this.provider = provider; - } - - public String getPluginName() { - return pluginName; - } - - public Provider<T> getProvider() { - return provider; - } - } - /** * Declare a singleton {@code DynamicSet<T>} with a binder. * @@ -153,12 +135,12 @@ public class DynamicSet<T> implements Iterable<T> { } public static <T> DynamicSet<T> emptySet() { - return new DynamicSet<>(Collections.<AtomicReference<NamedProvider<T>>>emptySet()); + return new DynamicSet<>(Collections.<AtomicReference<Extension<T>>>emptySet()); } - private final CopyOnWriteArrayList<AtomicReference<NamedProvider<T>>> items; + private final CopyOnWriteArrayList<AtomicReference<Extension<T>>> items; - DynamicSet(Collection<AtomicReference<NamedProvider<T>>> base) { + DynamicSet(Collection<AtomicReference<Extension<T>>> base) { items = new CopyOnWriteArrayList<>(base); } @@ -168,7 +150,7 @@ public class DynamicSet<T> implements Iterable<T> { @Override public Iterator<T> iterator() { - Iterator<Entry<T>> entryIterator = entries().iterator(); + Iterator<Extension<T>> entryIterator = entries().iterator(); return new Iterator<T>() { @Override public boolean hasNext() { @@ -177,39 +159,35 @@ public class DynamicSet<T> implements Iterable<T> { @Override public T next() { - Entry<T> next = entryIterator.next(); + Extension<T> next = entryIterator.next(); return next != null ? next.getProvider().get() : null; } }; } - public Iterable<Entry<T>> entries() { - final Iterator<AtomicReference<NamedProvider<T>>> itr = items.iterator(); - return new Iterable<Entry<T>>() { + public Iterable<Extension<T>> entries() { + final Iterator<AtomicReference<Extension<T>>> itr = items.iterator(); + return new Iterable<Extension<T>>() { @Override - public Iterator<Entry<T>> iterator() { - return new Iterator<Entry<T>>() { - private Entry<T> next; + public Iterator<Extension<T>> iterator() { + return new Iterator<Extension<T>>() { + private Extension<T> next; @Override public boolean hasNext() { while (next == null && itr.hasNext()) { - NamedProvider<T> p = itr.next().get(); + Extension<T> p = itr.next().get(); if (p != null) { - try { - next = new Entry<>(p.pluginName, p.impl); - } catch (RuntimeException e) { - // TODO Log failed member of DynamicSet. - } + next = p; } } return next != null; } @Override - public Entry<T> next() { + public Extension<T> next() { if (hasNext()) { - Entry<T> result = next; + Extension<T> result = next; next = null; return result; } @@ -250,7 +228,7 @@ public class DynamicSet<T> implements Iterable<T> { public ImmutableSortedSet<String> plugins() { return items .stream() - .map(i -> i.get().pluginName) + .map(i -> i.get().getPluginName()) .collect(toImmutableSortedSet(naturalOrder())); } @@ -263,8 +241,8 @@ public class DynamicSet<T> implements Iterable<T> { public ImmutableSet<Provider<T>> byPlugin(String pluginName) { return items .stream() - .filter(i -> i.get().pluginName.equals(pluginName)) - .map(i -> i.get().impl) + .filter(i -> i.get().getPluginName().equals(pluginName)) + .map(i -> i.get().getProvider()) .collect(toImmutableSet()); } @@ -285,8 +263,8 @@ public class DynamicSet<T> implements Iterable<T> { * @return handle to remove the item at a later point in time. */ public RegistrationHandle add(String pluginName, Provider<T> item) { - final AtomicReference<NamedProvider<T>> ref = - new AtomicReference<>(new NamedProvider<>(item, pluginName)); + final AtomicReference<Extension<T>> ref = + new AtomicReference<>(new Extension<>(pluginName, item)); items.add(ref); return new RegistrationHandle() { @Override @@ -310,18 +288,17 @@ public class DynamicSet<T> implements Iterable<T> { * the collection. */ public ReloadableRegistrationHandle<T> add(String pluginName, Key<T> key, Provider<T> item) { - AtomicReference<NamedProvider<T>> ref = - new AtomicReference<>(new NamedProvider<>(item, pluginName)); + AtomicReference<Extension<T>> ref = new AtomicReference<>(new Extension<>(pluginName, item)); items.add(ref); return new ReloadableHandle(ref, key, ref.get()); } private class ReloadableHandle implements ReloadableRegistrationHandle<T> { - private final AtomicReference<NamedProvider<T>> ref; + private final AtomicReference<Extension<T>> ref; private final Key<T> key; - private final NamedProvider<T> item; + private final Extension<T> item; - ReloadableHandle(AtomicReference<NamedProvider<T>> ref, Key<T> key, NamedProvider<T> item) { + ReloadableHandle(AtomicReference<Extension<T>> ref, Key<T> key, Extension<T> item) { this.ref = ref; this.key = key; this.item = item; @@ -341,7 +318,7 @@ public class DynamicSet<T> implements Iterable<T> { @Override public ReloadableHandle replace(Key<T> newKey, Provider<T> newItem) { - NamedProvider<T> n = new NamedProvider<>(newItem, item.pluginName); + Extension<T> n = new Extension<>(item.getPluginName(), newItem); if (ref.compareAndSet(item, n)) { return new ReloadableHandle(ref, newKey, n); } diff --git a/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java b/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java index 6d36f54bb3..832933b31c 100644 --- a/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java +++ b/java/com/google/gerrit/extensions/registration/DynamicSetProvider.java @@ -38,17 +38,16 @@ class DynamicSetProvider<T> implements Provider<DynamicSet<T>> { return new DynamicSet<>(find(injector, type)); } - private static <T> List<AtomicReference<NamedProvider<T>>> find( - Injector src, TypeLiteral<T> type) { + private static <T> List<AtomicReference<Extension<T>>> find(Injector src, TypeLiteral<T> type) { List<Binding<T>> bindings = src.findBindingsByType(type); int cnt = bindings != null ? bindings.size() : 0; if (cnt == 0) { return Collections.emptyList(); } - List<AtomicReference<NamedProvider<T>>> r = new ArrayList<>(cnt); + List<AtomicReference<Extension<T>>> r = new ArrayList<>(cnt); for (Binding<T> b : bindings) { if (b.getKey().getAnnotation() != null) { - r.add(new AtomicReference<>(new NamedProvider<>(b.getProvider(), PluginName.GERRIT))); + r.add(new AtomicReference<>(new Extension<>(PluginName.GERRIT, b.getProvider()))); } } return r; diff --git a/java/com/google/gerrit/extensions/registration/Extension.java b/java/com/google/gerrit/extensions/registration/Extension.java new file mode 100644 index 0000000000..aaec201bd7 --- /dev/null +++ b/java/com/google/gerrit/extensions/registration/Extension.java @@ -0,0 +1,61 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.extensions.registration; + +import com.google.gerrit.common.Nullable; +import com.google.inject.Provider; + +/** + * An extension that is provided by a plugin. + * + * <p>Contains the name of the plugin that provides the extension, the extension point + * implementation and optionally the export name under which the extension was exported. + * + * <p>An export name is only available if this extension is an entry in a {@link DynamicMap}. + * + * @param <T> Type of extension point that this extension implements + */ +public class Extension<T> { + private final String pluginName; + private final @Nullable String exportName; + private final Provider<T> provider; + + protected Extension(String pluginName, Provider<T> provider) { + this(pluginName, null, provider); + } + + protected Extension(String pluginName, @Nullable String exportName, Provider<T> provider) { + this.pluginName = pluginName; + this.exportName = exportName; + this.provider = provider; + } + + public String getPluginName() { + return pluginName; + } + + @Nullable + public String getExportName() { + return exportName; + } + + public Provider<T> getProvider() { + return provider; + } + + public T get() { + return provider.get(); + } +} diff --git a/java/com/google/gerrit/extensions/registration/NamedProvider.java b/java/com/google/gerrit/extensions/registration/NamedProvider.java deleted file mode 100644 index aca651b5f8..0000000000 --- a/java/com/google/gerrit/extensions/registration/NamedProvider.java +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.gerrit.extensions.registration; - -import com.google.inject.Provider; - -/** Pair of provider implementation and plugin providing it. */ -class NamedProvider<T> { - final Provider<T> impl; - final String pluginName; - - NamedProvider(Provider<T> provider, String pluginName) { - this.impl = provider; - this.pluginName = pluginName; - } -} diff --git a/java/com/google/gerrit/httpd/ProjectOAuthFilter.java b/java/com/google/gerrit/httpd/ProjectOAuthFilter.java index 5e234d2e38..30ebe6e7cb 100644 --- a/java/com/google/gerrit/httpd/ProjectOAuthFilter.java +++ b/java/com/google/gerrit/httpd/ProjectOAuthFilter.java @@ -25,7 +25,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.auth.oauth.OAuthLoginProvider; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicMap; -import com.google.gerrit.extensions.registration.DynamicMap.Entry; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.AccessPath; import com.google.gerrit.server.account.AccountCache; @@ -191,7 +191,7 @@ class ProjectOAuthFilter implements Filter { */ private void pickOnlyProvider() throws ServletException { try { - Entry<OAuthLoginProvider> loginProvider = Iterables.getOnlyElement(loginProviders); + Extension<OAuthLoginProvider> loginProvider = Iterables.getOnlyElement(loginProviders); defaultAuthPlugin = loginProvider.getPluginName(); defaultAuthProvider = loginProvider.getExportName(); } catch (NoSuchElementException e) { diff --git a/java/com/google/gerrit/server/cache/CacheMetrics.java b/java/com/google/gerrit/server/cache/CacheMetrics.java index 343565266f..c652d50d73 100644 --- a/java/com/google/gerrit/server/cache/CacheMetrics.java +++ b/java/com/google/gerrit/server/cache/CacheMetrics.java @@ -18,6 +18,7 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheStats; import com.google.common.collect.ImmutableSet; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.registration.PluginName; import com.google.gerrit.metrics.CallbackMetric; import com.google.gerrit.metrics.CallbackMetric1; @@ -71,7 +72,7 @@ public class CacheMetrics { metrics.newTrigger( cacheMetrics, () -> { - for (DynamicMap.Entry<Cache<?, ?>> e : cacheMap) { + for (Extension<Cache<?, ?>> e : cacheMap) { Cache<?, ?> c = e.getProvider().get(); String name = metricNameOf(e); CacheStats cstats = c.stats(); @@ -95,7 +96,7 @@ public class CacheMetrics { return ((double) d.hitCount() / d.requestCount() * 100); } - private static String metricNameOf(DynamicMap.Entry<Cache<?, ?>> e) { + private static String metricNameOf(Extension<Cache<?, ?>> e) { if (PluginName.GERRIT.equals(e.getPluginName())) { return e.getExportName(); } diff --git a/java/com/google/gerrit/server/change/ChangeJson.java b/java/com/google/gerrit/server/change/ChangeJson.java index 43f7b2f742..e1a0aa7917 100644 --- a/java/com/google/gerrit/server/change/ChangeJson.java +++ b/java/com/google/gerrit/server/change/ChangeJson.java @@ -88,6 +88,7 @@ import com.google.gerrit.extensions.common.WebLinkInfo; import com.google.gerrit.extensions.config.DownloadCommand; import com.google.gerrit.extensions.config.DownloadScheme; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.Url; import com.google.gerrit.index.query.QueryResult; @@ -1471,7 +1472,7 @@ public class ChangeJson { private Map<String, FetchInfo> makeFetchMap(ChangeData cd, PatchSet in) throws PermissionBackendException, OrmException, IOException { Map<String, FetchInfo> r = new LinkedHashMap<>(); - for (DynamicMap.Entry<DownloadScheme> e : downloadSchemes) { + for (Extension<DownloadScheme> e : downloadSchemes) { String schemeName = e.getExportName(); DownloadScheme scheme = e.getProvider().get(); if (!scheme.isEnabled() @@ -1502,7 +1503,7 @@ public class ChangeJson { String projectName, String refName, FetchInfo fetchInfo) { - for (DynamicMap.Entry<DownloadCommand> e2 : commands) { + for (Extension<DownloadCommand> e2 : commands) { String commandName = e2.getExportName(); DownloadCommand command = e2.getProvider().get(); String c = command.getCommand(scheme, projectName, refName); diff --git a/java/com/google/gerrit/server/config/ProjectConfigEntry.java b/java/com/google/gerrit/server/config/ProjectConfigEntry.java index d30e080aef..5515f0ebc3 100644 --- a/java/com/google/gerrit/server/config/ProjectConfigEntry.java +++ b/java/com/google/gerrit/server/config/ProjectConfigEntry.java @@ -22,7 +22,7 @@ import com.google.gerrit.extensions.api.projects.ConfigValue; import com.google.gerrit.extensions.api.projects.ProjectConfigEntryType; import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; import com.google.gerrit.extensions.registration.DynamicMap; -import com.google.gerrit.extensions.registration.DynamicMap.Entry; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.git.GitRepositoryManager; @@ -321,7 +321,7 @@ public class ProjectConfigEntry { ProjectConfig oldCfg = parseConfig(p, event.getOldObjectId()); ProjectConfig newCfg = parseConfig(p, event.getNewObjectId()); if (oldCfg != null && newCfg != null) { - for (Entry<ProjectConfigEntry> e : pluginConfigEntries) { + for (Extension<ProjectConfigEntry> e : pluginConfigEntries) { ProjectConfigEntry configEntry = e.getProvider().get(); String newValue = getValue(newCfg, e); String oldValue = getValue(oldCfg, e); @@ -367,7 +367,7 @@ public class ProjectConfigEntry { } } - private static String getValue(ProjectConfig cfg, Entry<ProjectConfigEntry> e) { + private static String getValue(ProjectConfig cfg, Extension<ProjectConfigEntry> e) { String value = cfg.getPluginConfig(e.getPluginName()).getString(e.getExportName()); if (value == null) { value = e.getProvider().get().getDefaultValue(); diff --git a/java/com/google/gerrit/server/edit/ChangeEditJson.java b/java/com/google/gerrit/server/edit/ChangeEditJson.java index 78baef7195..bd9c3a616b 100644 --- a/java/com/google/gerrit/server/edit/ChangeEditJson.java +++ b/java/com/google/gerrit/server/edit/ChangeEditJson.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.common.FetchInfo; import com.google.gerrit.extensions.config.DownloadCommand; import com.google.gerrit.extensions.config.DownloadScheme; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.server.CommonConverters; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.change.ChangeJson; @@ -78,7 +79,7 @@ public class ChangeEditJson { private Map<String, FetchInfo> fillFetchMap(ChangeEdit edit) { Map<String, FetchInfo> r = new LinkedHashMap<>(); - for (DynamicMap.Entry<DownloadScheme> e : downloadSchemes) { + for (Extension<DownloadScheme> e : downloadSchemes) { String schemeName = e.getExportName(); DownloadScheme scheme = e.getProvider().get(); if (!scheme.isEnabled() diff --git a/java/com/google/gerrit/server/extensions/webui/UiActions.java b/java/com/google/gerrit/server/extensions/webui/UiActions.java index af28bed3fe..3ca2bdb93d 100644 --- a/java/com/google/gerrit/server/extensions/webui/UiActions.java +++ b/java/com/google/gerrit/server/extensions/webui/UiActions.java @@ -26,6 +26,7 @@ import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission; import com.google.gerrit.extensions.conditions.BooleanCondition; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.registration.PluginName; import com.google.gerrit.extensions.restapi.RestCollection; import com.google.gerrit.extensions.restapi.RestResource; @@ -121,7 +122,7 @@ public class UiActions { @Nullable private <R extends RestResource> UiAction.Description describe( - DynamicMap.Entry<RestView<R>> e, R resource) { + Extension<RestView<R>> e, R resource) { int d = e.getExportName().indexOf('.'); if (d < 0) { return null; diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java index 7566b5593c..ef699b32a4 100644 --- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java +++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java @@ -70,8 +70,8 @@ import com.google.gerrit.extensions.api.projects.ProjectConfigEntryType; import com.google.gerrit.extensions.client.GeneralPreferencesInfo; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicMap; -import com.google.gerrit.extensions.registration.DynamicMap.Entry; import com.google.gerrit.extensions.registration.DynamicSet; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; @@ -1131,7 +1131,7 @@ class ReceiveCommits { * fails. */ private void validatePluginConfig(ReceiveCommand cmd, ProjectConfig cfg) { - for (Entry<ProjectConfigEntry> e : pluginConfigEntries) { + for (Extension<ProjectConfigEntry> e : pluginConfigEntries) { PluginConfig pluginCfg = cfg.getPluginConfig(e.getPluginName()); ProjectConfigEntry configEntry = e.getProvider().get(); String value = pluginCfg.getString(e.getExportName()); diff --git a/java/com/google/gerrit/server/git/validators/MergeValidators.java b/java/com/google/gerrit/server/git/validators/MergeValidators.java index c4df4dd11c..f755aab162 100644 --- a/java/com/google/gerrit/server/git/validators/MergeValidators.java +++ b/java/com/google/gerrit/server/git/validators/MergeValidators.java @@ -19,8 +19,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.ProjectConfigEntryType; import com.google.gerrit.extensions.registration.DynamicMap; -import com.google.gerrit.extensions.registration.DynamicMap.Entry; import com.google.gerrit.extensions.registration.DynamicSet; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Branch; @@ -207,7 +207,7 @@ public class MergeValidators { } } - for (Entry<ProjectConfigEntry> e : pluginConfigEntries) { + for (Extension<ProjectConfigEntry> e : pluginConfigEntries) { PluginConfig pluginCfg = cfg.getPluginConfig(e.getPluginName()); ProjectConfigEntry configEntry = e.getProvider().get(); diff --git a/java/com/google/gerrit/server/mail/receive/MailProcessor.java b/java/com/google/gerrit/server/mail/receive/MailProcessor.java index af549f701d..262e82bc5c 100644 --- a/java/com/google/gerrit/server/mail/receive/MailProcessor.java +++ b/java/com/google/gerrit/server/mail/receive/MailProcessor.java @@ -23,6 +23,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.client.Side; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.mail.HtmlParser; @@ -148,7 +149,7 @@ public class MailProcessor { private void processImpl(BatchUpdate.Factory buf, MailMessage message) throws OrmException, UpdateException, RestApiException, IOException { - for (DynamicMap.Entry<MailFilter> filter : mailFilters) { + for (Extension<MailFilter> filter : mailFilters) { if (!filter.getProvider().get().shouldProcessMessage(message)) { logger.atWarning().log( "Message %s filtered by plugin %s %s. Will delete message.", diff --git a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java index 3db72ef43a..2ec2e7ccb3 100644 --- a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java +++ b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java @@ -31,6 +31,7 @@ import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.common.data.SubmitRecord; import com.google.gerrit.common.errors.NotSignedInException; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.index.IndexConfig; import com.google.gerrit.index.Schema; import com.google.gerrit.index.SchemaUtil; @@ -427,7 +428,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> { } private void setupDynamicOperators() { - for (DynamicMap.Entry<ChangeOperatorFactory> e : args.opFactories) { + for (Extension<ChangeOperatorFactory> e : args.opFactories) { String name = e.getExportName() + "_" + e.getPluginName(); opFactories.put(name, e.getProvider().get()); } diff --git a/java/com/google/gerrit/server/restapi/account/SetPreferences.java b/java/com/google/gerrit/server/restapi/account/SetPreferences.java index fccdabe984..2471689644 100644 --- a/java/com/google/gerrit/server/restapi/account/SetPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/SetPreferences.java @@ -18,6 +18,7 @@ import com.google.common.base.Strings; import com.google.gerrit.extensions.client.GeneralPreferencesInfo; import com.google.gerrit.extensions.config.DownloadScheme; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -83,7 +84,7 @@ public class SetPreferences implements RestModifyView<AccountResource, GeneralPr return; } - for (DynamicMap.Entry<DownloadScheme> e : downloadSchemes) { + for (Extension<DownloadScheme> e : downloadSchemes) { if (e.getExportName().equals(downloadScheme) && e.getProvider().get().isEnabled()) { return; } diff --git a/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java b/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java index 6b7a708c1f..ae6e5d1c6d 100644 --- a/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java +++ b/java/com/google/gerrit/server/restapi/change/ReviewerRecommender.java @@ -24,6 +24,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.index.query.Predicate; import com.google.gerrit.index.query.QueryParseException; import com.google.gerrit.reviewdb.client.Account; @@ -130,7 +131,7 @@ public class ReviewerRecommender { new ArrayList<>(reviewerSuggestionPluginMap.plugins().size()); List<Double> weights = new ArrayList<>(reviewerSuggestionPluginMap.plugins().size()); - for (DynamicMap.Entry<ReviewerSuggestion> plugin : reviewerSuggestionPluginMap) { + for (Extension<ReviewerSuggestion> plugin : reviewerSuggestionPluginMap) { tasks.add( () -> plugin diff --git a/java/com/google/gerrit/server/restapi/config/GetServerInfo.java b/java/com/google/gerrit/server/restapi/config/GetServerInfo.java index d6071d5e93..e1144d5bdd 100644 --- a/java/com/google/gerrit/server/restapi/config/GetServerInfo.java +++ b/java/com/google/gerrit/server/restapi/config/GetServerInfo.java @@ -39,6 +39,7 @@ import com.google.gerrit.extensions.config.DownloadScheme; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.registration.DynamicSet; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.webui.WebUiPlugin; import com.google.gerrit.server.EnableSignedPush; @@ -252,7 +253,7 @@ public class GetServerInfo implements RestReadView<ConfigResource> { private DownloadInfo getDownloadInfo() { DownloadInfo info = new DownloadInfo(); info.schemes = new HashMap<>(); - for (DynamicMap.Entry<DownloadScheme> e : downloadSchemes) { + for (Extension<DownloadScheme> e : downloadSchemes) { DownloadScheme scheme = e.getProvider().get(); if (scheme.isEnabled() && scheme.getUrl("${project}") != null) { info.schemes.put(e.getExportName(), getDownloadSchemeInfo(scheme)); @@ -270,7 +271,7 @@ public class GetServerInfo implements RestReadView<ConfigResource> { info.isAuthSupported = toBoolean(scheme.isAuthSupported()); info.commands = new HashMap<>(); - for (DynamicMap.Entry<DownloadCommand> e : downloadCommands) { + for (Extension<DownloadCommand> e : downloadCommands) { String commandName = e.getExportName(); DownloadCommand command = e.getProvider().get(); String c = command.getCommand(scheme, "${project}", "${ref}"); @@ -280,7 +281,7 @@ public class GetServerInfo implements RestReadView<ConfigResource> { } info.cloneCommands = new HashMap<>(); - for (DynamicMap.Entry<CloneCommand> e : cloneCommands) { + for (Extension<CloneCommand> e : cloneCommands) { String commandName = e.getExportName(); CloneCommand command = e.getProvider().get(); String c = command.getCommand(scheme, "${project-path}/${project-base-name}"); diff --git a/java/com/google/gerrit/server/restapi/config/ListCaches.java b/java/com/google/gerrit/server/restapi/config/ListCaches.java index 38664fbc61..f310ed7e71 100644 --- a/java/com/google/gerrit/server/restapi/config/ListCaches.java +++ b/java/com/google/gerrit/server/restapi/config/ListCaches.java @@ -26,6 +26,7 @@ import com.google.common.cache.CacheStats; import com.google.common.collect.Streams; import com.google.gerrit.extensions.annotations.RequiresAnyCapability; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.cache.PersistentCache; @@ -60,7 +61,7 @@ public class ListCaches implements RestReadView<ConfigResource> { public Map<String, CacheInfo> getCacheInfos() { Map<String, CacheInfo> cacheInfos = new TreeMap<>(); - for (DynamicMap.Entry<Cache<?, ?>> e : cacheMap) { + for (Extension<Cache<?, ?>> e : cacheMap) { cacheInfos.put( cacheNameOf(e.getPluginName(), e.getExportName()), new CacheInfo(e.getProvider().get())); } diff --git a/java/com/google/gerrit/server/restapi/config/PostCaches.java b/java/com/google/gerrit/server/restapi/config/PostCaches.java index 57ba097f9f..c633af0ce5 100644 --- a/java/com/google/gerrit/server/restapi/config/PostCaches.java +++ b/java/com/google/gerrit/server/restapi/config/PostCaches.java @@ -20,6 +20,7 @@ import static com.google.gerrit.common.data.GlobalCapability.MAINTAIN_SERVER; import com.google.common.cache.Cache; import com.google.gerrit.extensions.annotations.RequiresAnyCapability; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.registration.PluginName; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; @@ -96,7 +97,7 @@ public class PostCaches implements RestCollectionModifyView<ConfigResource, Cach } private void flushAll() throws AuthException, PermissionBackendException { - for (DynamicMap.Entry<Cache<?, ?>> e : cacheMap) { + for (Extension<Cache<?, ?>> e : cacheMap) { CacheResource cacheResource = new CacheResource(e.getPluginName(), e.getExportName(), e.getProvider()); if (FlushCache.WEB_SESSIONS.equals(cacheResource.getName())) { diff --git a/java/com/google/gerrit/server/restapi/project/ConfigInfoImpl.java b/java/com/google/gerrit/server/restapi/project/ConfigInfoImpl.java index 60b5dee4ea..e1798962fb 100644 --- a/java/com/google/gerrit/server/restapi/project/ConfigInfoImpl.java +++ b/java/com/google/gerrit/server/restapi/project/ConfigInfoImpl.java @@ -22,7 +22,7 @@ import com.google.gerrit.extensions.api.projects.ConfigInfo; import com.google.gerrit.extensions.api.projects.ProjectConfigEntryType; import com.google.gerrit.extensions.common.ActionInfo; import com.google.gerrit.extensions.registration.DynamicMap; -import com.google.gerrit.extensions.registration.DynamicMap.Entry; +import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.BooleanProjectConfig; @@ -122,7 +122,7 @@ public class ConfigInfoImpl extends ConfigInfo { PluginConfigFactory cfgFactory, AllProjectsName allProjects) { TreeMap<String, Map<String, ConfigParameterInfo>> pluginConfig = new TreeMap<>(); - for (Entry<ProjectConfigEntry> e : pluginConfigEntries) { + for (Extension<ProjectConfigEntry> e : pluginConfigEntries) { ProjectConfigEntry configEntry = e.getProvider().get(); PluginConfig cfg = cfgFactory.getFromProjectConfig(project, e.getPluginName()); String configuredValue = cfg.getString(e.getExportName()); @@ -165,7 +165,7 @@ public class ConfigInfoImpl extends ConfigInfo { } private String getInheritedValue( - ProjectState project, PluginConfigFactory cfgFactory, Entry<ProjectConfigEntry> e) { + ProjectState project, PluginConfigFactory cfgFactory, Extension<ProjectConfigEntry> e) { ProjectConfigEntry configEntry = e.getProvider().get(); ProjectState parent = Iterables.getFirst(project.parents(), null); String inheritedValue = configEntry.getDefaultValue(); diff --git a/javatests/com/google/gerrit/extensions/registration/DynamicSetTest.java b/javatests/com/google/gerrit/extensions/registration/DynamicSetTest.java index c86160f9bb..0542c35d1c 100644 --- a/javatests/com/google/gerrit/extensions/registration/DynamicSetTest.java +++ b/javatests/com/google/gerrit/extensions/registration/DynamicSetTest.java @@ -123,8 +123,8 @@ public class DynamicSetTest { ds.add("bar", 2); ds.add("bar", 3); - Iterator<DynamicSet.Entry<Integer>> entryIterator = ds.entries().iterator(); - DynamicSet.Entry<Integer> next = entryIterator.next(); + Iterator<Extension<Integer>> entryIterator = ds.entries().iterator(); + Extension<Integer> next = entryIterator.next(); assertThat(next.getPluginName()).isEqualTo("foo"); assertThat(next.getProvider().get()).isEqualTo(1); |