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}