From 7820803a0de12aa6c2ff12bd5a22b1c6f85fb077 Mon Sep 17 00:00:00 2001 From: Colby Ranger Date: Tue, 6 Mar 2012 11:39:45 -0800 Subject: [PATCH] Updated to Guice 3.0. Use the new FactoryModuleBuilder everywhere, instead of FactoryProvider. Updated the OptionHandlers to be generic, instead of ignoring the type parameter. Removed the GuiceHelper and refactored the HttpLog implementation to depend on a request attribute for passing the current user. Change-Id: Ic7d94118c7ab6c46fa784b88acefd7434bb58a44 --- gerrit-gwtui/pom.xml | 1 - .../java/com/google/gerrit/pgm/Daemon.java | 2 + .../gerrit/pgm/http/jetty/GetUserFilter.java | 88 +++++++++++++++++++ .../google/gerrit/pgm/http/jetty/HttpLog.java | 18 +--- .../gerrit/pgm/http/jetty/JettyServer.java | 44 +++------- .../google/inject/servlet/GuiceHelper.java | 36 -------- gerrit-server/pom.xml | 6 +- .../gerrit/server/config/FactoryModule.java | 64 +------------- .../contact/HttpContactStoreConnection.java | 12 +-- .../gerrit/server/git/PushReplication.java | 10 +-- .../gerrit/server/project/RefControlTest.java | 15 ++-- .../com/google/gerrit/sshd/SshModule.java | 14 +-- .../sshd/args4j/AccountGroupIdHandler.java | 3 +- .../sshd/args4j/AccountGroupUUIDHandler.java | 3 +- .../gerrit/sshd/args4j/AccountIdHandler.java | 3 +- .../gerrit/sshd/args4j/PatchSetIdHandler.java | 4 +- .../sshd/args4j/ProjectControlHandler.java | 3 +- .../sshd/args4j/SocketAddressHandler.java | 4 +- .../gerrit/sshd/args4j/SubcommandHandler.java | 4 +- gerrit-util-cli/pom.xml | 4 +- .../gerrit/util/cli/OptionHandlerFactory.java | 5 +- .../gerrit/util/cli/OptionHandlerUtil.java | 24 ++++- pom.xml | 13 ++- 23 files changed, 171 insertions(+), 209 deletions(-) create mode 100644 gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/GetUserFilter.java delete mode 100644 gerrit-pgm/src/main/java/com/google/inject/servlet/GuiceHelper.java diff --git a/gerrit-gwtui/pom.xml b/gerrit-gwtui/pom.xml index b09b8e3db4..0a000e459e 100644 --- a/gerrit-gwtui/pom.xml +++ b/gerrit-gwtui/pom.xml @@ -37,7 +37,6 @@ limitations under the License. com.google.gwt gwt-user - ${gwtVersion} diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java index 7382096438..b8f1da66cb 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java @@ -25,6 +25,7 @@ import com.google.gerrit.httpd.WebModule; import com.google.gerrit.httpd.WebSshGlueModule; import com.google.gerrit.httpd.auth.openid.OpenIdModule; import com.google.gerrit.lifecycle.LifecycleManager; +import com.google.gerrit.pgm.http.jetty.GetUserFilter; import com.google.gerrit.pgm.http.jetty.JettyEnv; import com.google.gerrit.pgm.http.jetty.JettyModule; import com.google.gerrit.pgm.http.jetty.ProjectQoSFilter; @@ -274,6 +275,7 @@ public class Daemon extends SiteProgram { if (authConfig.getAuthType() == AuthType.OPENID) { modules.add(new OpenIdModule()); } + modules.add(sysInjector.getInstance(GetUserFilter.Module.class)); return sysInjector.createChildInjector(modules); } diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/GetUserFilter.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/GetUserFilter.java new file mode 100644 index 0000000000..b0ddc3ad4d --- /dev/null +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/GetUserFilter.java @@ -0,0 +1,88 @@ +// Copyright (C) 2012 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.pgm.http.jetty; + +import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.config.GerritServerConfig; +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Singleton; +import com.google.inject.servlet.ServletModule; + +import org.eclipse.jgit.lib.Config; + +import java.io.IOException; +import java.net.URI; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +/** + * Stores as a request attribute, so the {@link HttpLog} can include the the + * user for the request outside of the request scope. + * + * @author cranger@google.com (Colby Ranger) + */ +@Singleton +public class GetUserFilter implements Filter { + + static final String REQ_ATTR_KEY = CurrentUser.class.toString(); + + public static class Module extends ServletModule { + + private boolean loggingEnabled; + + @Inject + Module(@GerritServerConfig final Config cfg) { + URI[] urls = JettyServer.listenURLs(cfg); + boolean reverseProxy = JettyServer.isReverseProxied(urls); + this.loggingEnabled = cfg.getBoolean("httpd", "requestlog", !reverseProxy); + } + + @Override + protected void configureServlets() { + if (loggingEnabled) { + filter("/*").through(GetUserFilter.class); + } + } + } + + private final Provider userProvider; + + @Inject + GetUserFilter(final Provider userProvider) { + this.userProvider = userProvider; + } + + @Override + public void doFilter( + ServletRequest req, ServletResponse resp, FilterChain chain) + throws IOException, ServletException { + req.setAttribute(REQ_ATTR_KEY, userProvider.get()); + chain.doFilter(req, resp); + } + + @Override + public void destroy() { + } + + @Override + public void init(FilterConfig arg0) { + } +} diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java index a4e13d3a1d..65e73bd739 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java @@ -17,8 +17,6 @@ package com.google.gerrit.pgm.http.jetty; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.config.SitePaths; -import com.google.inject.Provider; -import com.google.inject.servlet.GuiceHelper; import org.apache.log4j.Appender; import org.apache.log4j.AsyncAppender; @@ -55,11 +53,8 @@ class HttpLog extends AbstractLifeCycle implements RequestLog { private static final String P_USER_AGENT = "User-Agent"; private final AsyncAppender async; - private final Provider userProvider; - - HttpLog(final SitePaths site, final Provider userProvider) { - this.userProvider = userProvider; + HttpLog(final SitePaths site) { final DailyRollingFileAppender dst = new DailyRollingFileAppender(); dst.setName(LOG_NAME); dst.setLayout(new MyLayout()); @@ -91,15 +86,11 @@ class HttpLog extends AbstractLifeCycle implements RequestLog { @Override public void log(final Request req, final Response rsp) { - GuiceHelper.runInContext(req, rsp, new Runnable() { - @Override - public void run() { - doLog(req, rsp); - } - }); + CurrentUser user = (CurrentUser) req.getAttribute(GetUserFilter.REQ_ATTR_KEY); + doLog(req, rsp, user); } - private void doLog(Request req, Response rsp) { + private void doLog(Request req, Response rsp, CurrentUser user) { final LoggingEvent event = new LoggingEvent( // Logger.class.getName(), // fqnOfCategoryClass null, // logger (optional) @@ -119,7 +110,6 @@ class HttpLog extends AbstractLifeCycle implements RequestLog { uri = uri + "?" + qs; } - CurrentUser user = userProvider.get(); if (user instanceof IdentifiedUser) { IdentifiedUser who = (IdentifiedUser) user; if (who.getUserName() != null && !who.getUserName().isEmpty()) { diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java index a309e4eadb..18ca0e7fc3 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java @@ -20,16 +20,13 @@ import static java.util.concurrent.TimeUnit.SECONDS; import com.google.gerrit.launcher.GerritLauncher; import com.google.gerrit.lifecycle.LifecycleListener; import com.google.gerrit.reviewdb.AuthType; -import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.config.ConfigUtil; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.SitePaths; import com.google.inject.Inject; import com.google.inject.Injector; -import com.google.inject.Provider; import com.google.inject.Singleton; import com.google.inject.servlet.GuiceFilter; -import com.google.inject.servlet.GuiceHelper; import com.google.inject.servlet.GuiceServletContextListener; import org.eclipse.jetty.io.EndPoint; @@ -68,10 +65,6 @@ import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - @Singleton public class JettyServer { static class Lifecycle implements LifecycleListener { @@ -112,7 +105,7 @@ public class JettyServer { @Inject JettyServer(@GerritServerConfig final Config cfg, final SitePaths site, - final JettyEnv env, final Provider userProvider) + final JettyEnv env) throws MalformedURLException, IOException { this.site = site; @@ -122,24 +115,8 @@ public class JettyServer { Handler app = makeContext(env, cfg); if (cfg.getBoolean("httpd", "requestlog", !reverseProxy)) { - RequestLogHandler handler = new RequestLogHandler() { - @Override - public void handle(String target, Request baseRequest, - final HttpServletRequest req, final HttpServletResponse rsp) - throws IOException, ServletException { - // Force the user to construct, so it's available to our HttpLog - // later on when the request gets logged out to the access file. - // - GuiceHelper.runInContext(req, rsp, new Runnable() { - @Override - public void run() { - userProvider.get(); - } - }); - super.handle(target, baseRequest, req, rsp); - } - }; - handler.setRequestLog(new HttpLog(site, userProvider)); + RequestLogHandler handler = new RequestLogHandler(); + handler.setRequestLog(new HttpLog(site)); handler.setHandler(app); app = handler; } @@ -164,7 +141,7 @@ public class JettyServer { final int acceptors = cfg.getInt("httpd", "acceptorThreads", 2); final AuthType authType = ConfigUtil.getEnum(cfg, "auth", null, "type", AuthType.OPENID); - reverseProxy = true; + reverseProxy = isReverseProxied(listenUrls); final Connector[] connectors = new Connector[listenUrls.length]; for (int idx = 0; idx < listenUrls.length; idx++) { final URI u = listenUrls[idx]; @@ -179,7 +156,6 @@ public class JettyServer { } if ("http".equals(u.getScheme())) { - reverseProxy = false; defaultPort = 80; c = new SelectChannelConnector(); } else if ("https".equals(u.getScheme())) { @@ -198,7 +174,6 @@ public class JettyServer { ssl.setNeedClientAuth(true); } - reverseProxy = false; defaultPort = 443; c = ssl; @@ -256,7 +231,16 @@ public class JettyServer { return connectors; } - private URI[] listenURLs(final Config cfg) { + static boolean isReverseProxied(final URI[] listenUrls) { + for (URI u : listenUrls) { + if ("http".equals(u.getScheme()) || "https".equals(u.getScheme())) { + return false; + } + } + return true; + } + + static URI[] listenURLs(final Config cfg) { String[] urls = cfg.getStringList("httpd", null, "listenurl"); if (urls.length == 0) { urls = new String[] {"http://*:8080/"}; diff --git a/gerrit-pgm/src/main/java/com/google/inject/servlet/GuiceHelper.java b/gerrit-pgm/src/main/java/com/google/inject/servlet/GuiceHelper.java deleted file mode 100644 index 5b6cc0906f..0000000000 --- a/gerrit-pgm/src/main/java/com/google/inject/servlet/GuiceHelper.java +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2010 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.inject.servlet; - -import com.google.inject.servlet.GuiceFilter.Context; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class GuiceHelper { - public static void runInContext(HttpServletRequest req, - HttpServletResponse rsp, Runnable thunk) { - Context previous = GuiceFilter.localContext.get(); - try { - GuiceFilter.localContext.set(new Context(req, rsp)); - thunk.run(); - } finally { - GuiceFilter.localContext.set(previous); - } - } - - private GuiceHelper() { - } -} diff --git a/gerrit-server/pom.xml b/gerrit-server/pom.xml index 20a728663a..b0c2125dd0 100644 --- a/gerrit-server/pom.xml +++ b/gerrit-server/pom.xml @@ -90,17 +90,17 @@ limitations under the License. - com.google.code.guice + com.google.inject guice - com.google.code.guice + com.google.inject.extensions guice-servlet - com.google.code.guice + com.google.inject.extensions guice-assistedinject diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/FactoryModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/FactoryModule.java index 331f4711cc..a0cf2aba2e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/config/FactoryModule.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/FactoryModule.java @@ -15,11 +15,7 @@ package com.google.gerrit.server.config; import com.google.inject.AbstractModule; -import com.google.inject.Key; -import com.google.inject.assistedinject.FactoryProvider; - -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; +import com.google.inject.assistedinject.FactoryModuleBuilder; public abstract class FactoryModule extends AbstractModule { /** @@ -42,63 +38,9 @@ public abstract class FactoryModule extends AbstractModule { * Just pass {@code Foo.Factory.class} to this method. The factory will be * generated to return its one return type as declared in the creation method. * - * @param * @param factory interface which specifies the bean factory method. */ - protected void factory(final Class factory) { - factory(Key.get(factory), factory); - } - - /** - * Register an assisted injection factory. - *

- * This function provides an automatic way to define a factory that creates a - * concrete type through assited injection. For example to configure the - * following assisted injection case: - * - *

-   * public class Foo {
-   *   public interface Factory {
-   *     Foo create(int a);
-   *   }
-   *   @Inject
-   *   Foo(Logger log, @Assisted int a) {...}
-   * }
-   * 
- * - * Just pass {@code Foo.Factory.class} to this method. The factory will be - * generated to return its one return type as declared in the creation method. - * - * @param - * @param key key to bind with in Guice bindings. - * @param factory interface which specifies the bean factory method. - */ - protected void factory(final Key key, final Class factory) { - final Method[] methods = factory.getDeclaredMethods(); - switch (methods.length) { - case 1: { - final Class result = methods[0].getReturnType(); - if (isAbstract(result)) { - addError("Factory " + factory.getName() + " returns abstract result."); - } else { - bind(key).toProvider(FactoryProvider.newFactory(factory, result)); - } - break; - } - - case 0: - addError("Factory " + factory.getName() + " has no create method."); - break; - - default: - addError("Factory " + factory.getName() - + " has more than one create method."); - break; - } - } - - private static boolean isAbstract(final Class result) { - return result.isInterface() - || (result.getModifiers() & Modifier.ABSTRACT) == Modifier.ABSTRACT; + protected void factory(final Class factory) { + install(new FactoryModuleBuilder().build(factory)); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/contact/HttpContactStoreConnection.java b/gerrit-server/src/main/java/com/google/gerrit/server/contact/HttpContactStoreConnection.java index 781f401f26..6c007ae3a9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/contact/HttpContactStoreConnection.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/contact/HttpContactStoreConnection.java @@ -2,15 +2,13 @@ package com.google.gerrit.server.contact; -import static com.google.inject.Scopes.SINGLETON; - import com.google.gerrit.server.contact.ContactStoreConnection; import com.google.gerrit.server.contact.HttpContactStoreConnection; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Module; import com.google.inject.assistedinject.Assisted; -import com.google.inject.assistedinject.FactoryProvider; +import com.google.inject.assistedinject.FactoryModuleBuilder; import org.eclipse.jgit.util.IO; @@ -27,11 +25,9 @@ public class HttpContactStoreConnection implements ContactStoreConnection { return new AbstractModule() { @Override protected void configure() { - bind(ContactStoreConnection.Factory.class) - .toProvider(FactoryProvider.newFactory( - ContactStoreConnection.Factory.class, - HttpContactStoreConnection.class)) - .in(SINGLETON); + install(new FactoryModuleBuilder() + .implement(ContactStoreConnection.class, HttpContactStoreConnection.class) + .build(ContactStoreConnection.Factory.class)); } }; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java index 154c60949b..49d24368dd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/PushReplication.java @@ -20,6 +20,7 @@ import com.google.gerrit.reviewdb.ReviewDb; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.ReplicationUser; import com.google.gerrit.server.config.ConfigUtil; +import com.google.gerrit.server.config.FactoryModule; import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.PerRequestProjectControlCache; @@ -29,7 +30,6 @@ import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; -import com.google.inject.assistedinject.FactoryProvider; import com.google.inject.servlet.RequestScoped; import com.jcraft.jsch.Session; @@ -430,14 +430,12 @@ public class PushReplication implements ReplicationQueue { } }).getInstance(ProjectControl.Factory.class); - opFactory = injector.createChildInjector(new AbstractModule() { + opFactory = injector.createChildInjector(new FactoryModule() { @Override protected void configure() { - bind(PushReplication.ReplicationConfig.class).toInstance( - ReplicationConfig.this); + bind(PushReplication.ReplicationConfig.class).toInstance(ReplicationConfig.this); bind(RemoteConfig.class).toInstance(remote); - bind(PushOp.Factory.class).toProvider( - FactoryProvider.newFactory(PushOp.Factory.class, PushOp.class)); + factory(PushOp.Factory.class); } }).getInstance(PushOp.Factory.class); } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java index 29b27628c9..a77a95ca06 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java @@ -37,14 +37,13 @@ import com.google.gerrit.server.account.CapabilityControl; import com.google.gerrit.server.account.GroupCache; import com.google.gerrit.server.cache.ConcurrentHashMapCache; import com.google.gerrit.server.config.AllProjectsName; +import com.google.gerrit.server.config.FactoryModule; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.ProjectConfig; import com.google.gwtorm.client.SchemaFactory; -import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; -import com.google.inject.assistedinject.FactoryProvider; import junit.framework.TestCase; @@ -294,18 +293,14 @@ public class RefControlTest extends TestCase { } }; - Injector injector = Guice.createInjector(new AbstractModule() { + Injector injector = Guice.createInjector(new FactoryModule() { @Override protected void configure() { - bind(Config.class) // - .annotatedWith(GerritServerConfig.class) // + bind(Config.class) + .annotatedWith(GerritServerConfig.class) .toInstance(new Config()); - bind(CapabilityControl.Factory.class) - .toProvider(FactoryProvider.newFactory( - CapabilityControl.Factory.class, - CapabilityControl.class)); - + factory(CapabilityControl.Factory.class); bind(ProjectCache.class).toInstance(projectCache); } }); diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshModule.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshModule.java index 816955dfde..d4bd31b895 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshModule.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshModule.java @@ -42,11 +42,7 @@ import com.google.gerrit.sshd.commands.DefaultCommandModule; import com.google.gerrit.sshd.commands.ProjectNode; import com.google.gerrit.sshd.commands.QueryShell; import com.google.gerrit.util.cli.CmdLineParser; -import com.google.gerrit.util.cli.OptionHandlerFactory; import com.google.gerrit.util.cli.OptionHandlerUtil; -import com.google.inject.Key; -import com.google.inject.TypeLiteral; -import com.google.inject.assistedinject.FactoryProvider; import com.google.inject.servlet.RequestScoped; import org.apache.sshd.common.KeyPairProvider; @@ -129,14 +125,6 @@ public class SshModule extends FactoryModule { private void registerOptionHandler(Class type, Class> impl) { - final Key> key = OptionHandlerUtil.keyFor(type); - - final TypeLiteral> factoryType = - new TypeLiteral>() {}; - - final TypeLiteral> implType = - TypeLiteral.get(impl); - - bind(key).toProvider(FactoryProvider.newFactory(factoryType, implType)); + install(OptionHandlerUtil.moduleFor(type, impl)); } } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupIdHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupIdHandler.java index f269541a60..0cb8011750 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupIdHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupIdHandler.java @@ -29,11 +29,10 @@ import org.kohsuke.args4j.spi.Setter; public class AccountGroupIdHandler extends OptionHandler { private final GroupCache groupCache; - @SuppressWarnings({"unchecked", "rawtypes"}) @Inject public AccountGroupIdHandler(final GroupCache groupCache, @Assisted final CmdLineParser parser, @Assisted final OptionDef option, - @Assisted final Setter setter) { + @Assisted final Setter setter) { super(parser, option, setter); this.groupCache = groupCache; } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupUUIDHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupUUIDHandler.java index 90b49875c1..74e72e4128 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupUUIDHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountGroupUUIDHandler.java @@ -29,11 +29,10 @@ import org.kohsuke.args4j.spi.Setter; public class AccountGroupUUIDHandler extends OptionHandler { private final GroupCache groupCache; - @SuppressWarnings({"unchecked", "rawtypes"}) @Inject public AccountGroupUUIDHandler(final GroupCache groupCache, @Assisted final CmdLineParser parser, @Assisted final OptionDef option, - @Assisted final Setter setter) { + @Assisted final Setter setter) { super(parser, option, setter); this.groupCache = groupCache; } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountIdHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountIdHandler.java index 1f6454be9a..7f1fc87101 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountIdHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/AccountIdHandler.java @@ -37,13 +37,12 @@ public class AccountIdHandler extends OptionHandler { private final AccountManager accountManager; private final AuthType authType; - @SuppressWarnings({"unchecked", "rawtypes"}) @Inject public AccountIdHandler(final AccountResolver accountResolver, final AccountManager accountManager, final AuthConfig authConfig, @Assisted final CmdLineParser parser, @Assisted final OptionDef option, - @Assisted final Setter setter) { + @Assisted final Setter setter) { super(parser, option, setter); this.accountResolver = accountResolver; this.accountManager = accountManager; diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/PatchSetIdHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/PatchSetIdHandler.java index 847184db32..aa5b5ffa9e 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/PatchSetIdHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/PatchSetIdHandler.java @@ -26,10 +26,10 @@ import org.kohsuke.args4j.spi.Parameters; import org.kohsuke.args4j.spi.Setter; public class PatchSetIdHandler extends OptionHandler { - @SuppressWarnings({"unchecked", "rawtypes"}) + @Inject public PatchSetIdHandler(@Assisted final CmdLineParser parser, - @Assisted final OptionDef option, @Assisted final Setter setter) { + @Assisted final OptionDef option, @Assisted final Setter setter) { super(parser, option, setter); } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/ProjectControlHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/ProjectControlHandler.java index 1e0c3a6aae..411a09c6d5 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/ProjectControlHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/ProjectControlHandler.java @@ -30,12 +30,11 @@ import org.kohsuke.args4j.spi.Setter; public class ProjectControlHandler extends OptionHandler { private final ProjectControl.Factory projectControlFactory; - @SuppressWarnings({"unchecked", "rawtypes"}) @Inject public ProjectControlHandler( final ProjectControl.Factory projectControlFactory, @Assisted final CmdLineParser parser, @Assisted final OptionDef option, - @Assisted final Setter setter) { + @Assisted final Setter setter) { super(parser, option, setter); this.projectControlFactory = projectControlFactory; } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SocketAddressHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SocketAddressHandler.java index 50e41ae522..454a084635 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SocketAddressHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SocketAddressHandler.java @@ -28,10 +28,10 @@ import org.kohsuke.args4j.spi.Setter; import java.net.SocketAddress; public class SocketAddressHandler extends OptionHandler { - @SuppressWarnings({"unchecked", "rawtypes"}) + @Inject public SocketAddressHandler(@Assisted final CmdLineParser parser, - @Assisted final OptionDef option, @Assisted final Setter setter) { + @Assisted final OptionDef option, @Assisted final Setter setter) { super(parser, option, setter); } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SubcommandHandler.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SubcommandHandler.java index 434230f367..3df73a8f95 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SubcommandHandler.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/args4j/SubcommandHandler.java @@ -25,10 +25,10 @@ import org.kohsuke.args4j.spi.Parameters; import org.kohsuke.args4j.spi.Setter; public class SubcommandHandler extends OptionHandler { - @SuppressWarnings({"unchecked", "rawtypes"}) + @Inject public SubcommandHandler(@Assisted final CmdLineParser parser, - @Assisted final OptionDef option, @Assisted final Setter setter) { + @Assisted final OptionDef option, @Assisted final Setter setter) { super(parser, option, setter); } diff --git a/gerrit-util-cli/pom.xml b/gerrit-util-cli/pom.xml index 401a2ba13e..c995cd7639 100644 --- a/gerrit-util-cli/pom.xml +++ b/gerrit-util-cli/pom.xml @@ -39,12 +39,12 @@ limitations under the License. - com.google.code.guice + com.google.inject guice - com.google.code.guice + com.google.inject.extensions guice-assistedinject diff --git a/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerFactory.java b/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerFactory.java index 0009d057f5..8e997786d9 100644 --- a/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerFactory.java +++ b/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerFactory.java @@ -20,7 +20,6 @@ import org.kohsuke.args4j.spi.Setter; /** Creates an args4j OptionHandler through a Guice Injector. */ public interface OptionHandlerFactory { - @SuppressWarnings("rawtypes") - OptionHandler create(org.kohsuke.args4j.CmdLineParser cmdLineParser, - OptionDef optionDef, Setter setter); + OptionHandler create(org.kohsuke.args4j.CmdLineParser cmdLineParser, + OptionDef optionDef, Setter setter); } diff --git a/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerUtil.java b/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerUtil.java index ab6739709b..3d67fff6ff 100644 --- a/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerUtil.java +++ b/gerrit-util-cli/src/main/java/com/google/gerrit/util/cli/OptionHandlerUtil.java @@ -15,8 +15,13 @@ package com.google.gerrit.util.cli; import com.google.inject.Key; +import com.google.inject.Module; import com.google.inject.TypeLiteral; -import com.google.inject.internal.MoreTypes.ParameterizedTypeImpl; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import com.google.inject.util.Types; + +import org.kohsuke.args4j.spi.OptionHandler; +import org.kohsuke.args4j.spi.Setter; import java.lang.reflect.Type; @@ -25,10 +30,21 @@ public class OptionHandlerUtil { /** Generate a key for an {@link OptionHandlerFactory} in Guice. */ @SuppressWarnings("unchecked") public static Key> keyFor(final Class valueType) { - final Type factoryType = - new ParameterizedTypeImpl(null, OptionHandlerFactory.class, valueType); + final Type factoryType = Types.newParameterizedType(OptionHandlerFactory.class, valueType); + return (Key>) Key.get(factoryType); + } - return (Key>) Key.get(TypeLiteral.get(factoryType)); + @SuppressWarnings("unchecked") + private static Key> handlerOf(Class type) { + final Type handlerType = Types.newParameterizedTypeWithOwner(null, OptionHandler.class, type); + return (Key>) Key.get(handlerType); + } + + @SuppressWarnings("unchecked") + public static Module moduleFor(final Class type, Class> impl) { + return new FactoryModuleBuilder() + .implement(handlerOf(type), impl) + .build(keyFor(type)); } private OptionHandlerUtil() { diff --git a/pom.xml b/pom.xml index f3f7c648cb..7bded1684b 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ limitations under the License. 1.2.5 2.3.0 1.6.1 - 2.0 + 3.0 7.2.1.v20101111 false @@ -485,6 +485,11 @@ limitations under the License. 0.9.6 pom + + + com.google.code.guice + guice + jug @@ -557,19 +562,19 @@ limitations under the License. - com.google.code.guice + com.google.inject guice ${guiceVersion} - com.google.code.guice + com.google.inject.extensions guice-servlet ${guiceVersion} - com.google.code.guice + com.google.inject.extensions guice-assistedinject ${guiceVersion}