You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2015/09/03 00:43:16 UTC

[2/3] jclouds git commit: JCLOUDS-962: Make all @Provider methods final

JCLOUDS-962: Make all @Provider methods final


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/edde7219
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/edde7219
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/edde7219

Branch: refs/heads/master
Commit: edde721937115beeee01ea4076d60b4ecf381807
Parents: 6cd716f
Author: Oliver Gondža <og...@gmail.com>
Authored: Fri Jul 17 07:05:19 2015 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Sep 2 23:54:44 2015 +0200

----------------------------------------------------------------------
 .../config/AtmosBlobStoreContextModule.java     |  2 +-
 .../atmos/config/AtmosHttpApiModule.java        |  9 ++++-
 .../jclouds/atmos/config/AtmosObjectModule.java |  2 +-
 .../byon/config/YamlNodeStoreModule.java        |  4 +-
 .../chef/config/BaseChefHttpApiModule.java      | 18 +++++----
 .../chef/config/ChefBootstrapModule.java        |  6 +--
 .../jclouds/chef/config/ChefParserModule.java   |  2 +-
 .../org/jclouds/ohai/config/JMXOhaiModule.java  |  5 +++
 .../org/jclouds/ohai/config/OhaiModule.java     | 14 ++++++-
 .../CloudStackComputeServiceContextModule.java  | 23 ++++++-----
 .../config/CloudStackHttpApiModule.java         |  6 +--
 .../config/EC2ComputeServiceContextModule.java  | 19 +++++++---
 .../EC2ComputeServiceDependenciesModule.java    | 16 ++++----
 ...ElasticStackComputeServiceContextModule.java |  8 ++--
 .../cinder/v1/config/CinderHttpApiModule.java   |  2 +-
 .../cinder/v1/config/CinderParserModule.java    |  2 +-
 .../config/KeystoneAuthenticationModule.java    | 40 ++++++++++++++------
 .../v2_0/config/KeystoneHttpApiModule.java      |  4 +-
 .../v2_0/config/ProviderModuleExpectTest.java   |  2 +-
 .../config/NovaComputeServiceContextModule.java | 14 +++----
 .../nova/v2_0/config/NovaHttpApiModule.java     |  2 +-
 .../nova/v2_0/config/NovaParserModule.java      |  2 +-
 .../config/SwiftBlobStoreContextModule.java     |  2 +-
 .../trove/v1/config/TroveHttpApiModule.java     |  4 +-
 .../CloudIdentityAuthenticationApiModule.java   |  2 +-
 .../route53/config/Route53HttpApiModule.java    |  8 +++-
 .../config/S3BlobStoreContextModule.java        |  2 +-
 .../org/jclouds/s3/config/S3HttpApiModule.java  | 22 +++++++++--
 .../org/jclouds/s3/config/S3ObjectModule.java   |  2 +-
 .../jclouds/aws/config/AWSHttpApiModule.java    |  4 +-
 .../aws/config/FormSigningHttpApiModule.java    |  6 ++-
 .../config/TemporaryUrlExtensionModule.java     |  5 +++
 .../swift/config/SwiftHttpApiModule.java        |  4 +-
 .../swift/config/SwiftObjectModule.java         |  2 +-
 .../blobstore/config/BlobStoreObjectModule.java |  2 +-
 .../config/OpenStackAuthenticationModule.java   | 21 +++++++---
 .../config/AuthenticationServiceModule.java     |  6 +--
 .../config/BaseComputeServiceContextModule.java | 28 +++++++++-----
 .../ComputeServiceAdapterContextModule.java     | 22 +++++------
 .../config/ComputeServiceTimeoutsModule.java    | 23 ++++++++++-
 .../StubComputeServiceDependenciesModule.java   | 18 ++++-----
 .../config/ExecutorServiceModule.java           |  6 +--
 .../config/ScheduledExecutorServiceModule.java  |  4 +-
 .../jclouds/events/config/EventBusModule.java   |  4 +-
 .../http/functions/config/SaxParserModule.java  |  2 +-
 .../org/jclouds/json/config/GsonModule.java     |  4 +-
 .../jclouds/location/config/LocationModule.java | 20 +++++-----
 .../jclouds/logging/config/LoggingModule.java   |  2 +-
 .../rest/config/CredentialStoreModule.java      |  2 +-
 ...pacheHCHttpCommandExecutorServiceModule.java | 10 ++---
 .../CurrentRequestExecutorServiceModule.java    |  2 +-
 .../GoogleAppEngineConfigurationModule.java     |  2 +-
 .../AWSEC2ComputeServiceContextModule.java      |  7 +++-
 .../AWSEC2ComputeServiceDependenciesModule.java | 10 ++---
 .../aws/ec2/config/AWSEC2HttpApiModule.java     |  8 ++--
 .../aws/s3/config/AWSS3HttpApiModule.java       |  2 +-
 .../config/AzureBlobStoreContextModule.java     |  2 +-
 .../config/AzureBlobHttpApiModule.java          |  9 ++++-
 .../azureblob/config/AzureBlobModule.java       |  2 +-
 .../dynect/v3/config/DynECTParserModule.java    |  2 +-
 .../glesys/config/GleSYSParserModule.java       |  2 +-
 .../GoGridComputeServiceContextModule.java      |  6 +--
 .../gogrid/config/GoGridHttpApiModule.java      |  7 +++-
 .../gogrid/config/GoGridParserModule.java       |  2 +-
 .../config/GoogleComputeEngineParserModule.java |  3 +-
 ...loudObjectStorageBlobStoreContextModule.java |  2 +-
 .../HPCloudObjectStorageHttpApiModule.java      |  4 +-
 .../SoftLayerComputeServiceContextModule.java   |  2 +-
 68 files changed, 321 insertions(+), 192 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/config/AtmosBlobStoreContextModule.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/config/AtmosBlobStoreContextModule.java b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/config/AtmosBlobStoreContextModule.java
index c83dbf3..a68f26a 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/config/AtmosBlobStoreContextModule.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/config/AtmosBlobStoreContextModule.java
@@ -45,7 +45,7 @@ public class AtmosBlobStoreContextModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected LoadingCache<String, Boolean> isPublic(final AtmosClient client) {
+   protected final LoadingCache<String, Boolean> isPublic(final AtmosClient client) {
       return CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build(new CacheLoader<String, Boolean>() {
 
          @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosHttpApiModule.java b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosHttpApiModule.java
index af21f9b..2d00acd 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosHttpApiModule.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosHttpApiModule.java
@@ -56,6 +56,10 @@ public class AtmosHttpApiModule extends HttpApiModule<AtmosClient> {
 
    @Provides
    @TimeStamp
+   protected final String guiceProvideTimeStamp(@TimeStamp Supplier<String> cache) {
+      return provideTimeStamp(cache);
+   }
+
    protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
       return cache.get();
    }
@@ -65,9 +69,10 @@ public class AtmosHttpApiModule extends HttpApiModule<AtmosClient> {
     */
    @Provides
    @TimeStamp
-   Supplier<String> provideTimeStampCache(@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
+   final Supplier<String> provideTimeStampCache(@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
             final DateService dateService) {
       return Suppliers.memoizeWithExpiration(new Supplier<String>() {
+         @Override
          public String get() {
             return dateService.rfc822DateFormat();
          }
@@ -76,7 +81,7 @@ public class AtmosHttpApiModule extends HttpApiModule<AtmosClient> {
 
    @Provides
    @TimeStamp
-   protected Long provideShareableUrlTimeout() {
+   protected final Long provideShareableUrlTimeout() {
       return new Date().getTime() + TimeUnit.HOURS.toMillis(1);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosObjectModule.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosObjectModule.java b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosObjectModule.java
index e1ae7a2..7ec9036 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosObjectModule.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosObjectModule.java
@@ -39,7 +39,7 @@ public class AtmosObjectModule extends AbstractModule {
    }
 
    @Provides
-   AtmosObject provideAtmosObject(AtmosObject.Factory factory) {
+   final AtmosObject provideAtmosObject(AtmosObject.Factory factory) {
       return factory.create((MutableContentMetadata) null);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/byon/src/main/java/org/jclouds/byon/config/YamlNodeStoreModule.java
----------------------------------------------------------------------
diff --git a/apis/byon/src/main/java/org/jclouds/byon/config/YamlNodeStoreModule.java b/apis/byon/src/main/java/org/jclouds/byon/config/YamlNodeStoreModule.java
index f74b786..1e523df 100644
--- a/apis/byon/src/main/java/org/jclouds/byon/config/YamlNodeStoreModule.java
+++ b/apis/byon/src/main/java/org/jclouds/byon/config/YamlNodeStoreModule.java
@@ -81,14 +81,14 @@ public class YamlNodeStoreModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected LoadingCache<String, Node> provideNodeStore(Map<String, YamlNode> backing, Function<Node, YamlNode> yamlSerializer,
+   protected final LoadingCache<String, Node> provideNodeStore(Map<String, YamlNode> backing, Function<Node, YamlNode> yamlSerializer,
          Function<YamlNode, Node> yamlDeserializer) {
       return CacheBuilder.newBuilder().build(CacheLoader.from(Functions.forMap(new TransformingMap<String, YamlNode, Node>(backing, yamlDeserializer, yamlSerializer))));
    }
 
    @Provides
    @Singleton
-   protected Map<String, YamlNode> provideYamlStore(@Named("yaml") Map<String, ByteSource> backing,
+   protected final Map<String, YamlNode> provideYamlStore(@Named("yaml") Map<String, ByteSource> backing,
          Function<YamlNode, ByteSource> yamlSerializer, Function<ByteSource, YamlNode> yamlDeserializer) {
       return new TransformingMap<String, ByteSource, YamlNode>(backing, yamlDeserializer, yamlSerializer);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
index c8b2faa..c60be06 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
@@ -75,6 +75,10 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
 
    @Provides
    @TimeStamp
+   protected final String guiceProvideTimeStamp(@TimeStamp Supplier<String> cache) {
+      return provideTimeStamp(cache);
+   }
+
    protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
       return cache.get();
    }
@@ -84,7 +88,7 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
     */
    @Provides
    @TimeStamp
-   Supplier<String> provideTimeStampCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds, final DateService dateService) {
+   final Supplier<String> provideTimeStampCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds, final DateService dateService) {
       return memoizeWithExpiration(new Supplier<String>() {
          @Override
          public String get() {
@@ -96,7 +100,7 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
    // TODO: potentially change this
    @Provides
    @Singleton
-   public Supplier<PrivateKey> supplyKey(final LoadingCache<Credentials, PrivateKey> keyCache,
+   public final Supplier<PrivateKey> supplyKey(final LoadingCache<Credentials, PrivateKey> keyCache,
          @org.jclouds.location.Provider final Supplier<Credentials> creds) {
       return compose(new Function<Credentials, PrivateKey>() {
          @Override
@@ -108,7 +112,7 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
 
    @Provides
    @Singleton
-   LoadingCache<Credentials, PrivateKey> privateKeyCache(PrivateKeyForCredentials loader) {
+   final LoadingCache<Credentials, PrivateKey> privateKeyCache(PrivateKeyForCredentials loader) {
       // throw out the private key related to old credentials
       return CacheBuilder.newBuilder().maximumSize(2).build(loader);
    }
@@ -144,7 +148,7 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
    @Provides
    @Singleton
    @Validator
-   public Optional<String> provideValidatorName(Injector injector) {
+   public final Optional<String> provideValidatorName(Injector injector) {
       // Named properties can not be injected as optional here, so let's use the
       // injector to bypass it
       Key<String> key = Key.get(String.class, Names.named(CHEF_VALIDATOR_NAME));
@@ -158,7 +162,7 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
    @Provides
    @Singleton
    @Validator
-   public Optional<PrivateKey> provideValidatorCredential(Crypto crypto, Injector injector)
+   public final Optional<PrivateKey> provideValidatorCredential(Crypto crypto, Injector injector)
          throws InvalidKeySpecException, IOException {
       // Named properties can not be injected as optional here, so let's use the
       // injector to bypass it
@@ -175,13 +179,13 @@ public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
 
    @Provides
    @Singleton
-   CacheLoader<String, BootstrapConfig> bootstrapConfigForGroup(BootstrapConfigForGroup bootstrapConfigForGroup) {
+   final CacheLoader<String, BootstrapConfig> bootstrapConfigForGroup(BootstrapConfigForGroup bootstrapConfigForGroup) {
       return CacheLoader.from(bootstrapConfigForGroup);
    }
 
    @Provides
    @Singleton
-   CacheLoader<String, Client> groupToClient(ClientForGroup clientForGroup) {
+   final CacheLoader<String, Client> groupToClient(ClientForGroup clientForGroup) {
       return CacheLoader.from(clientForGroup);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
index 4c7bfce..93e219b 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
@@ -45,7 +45,7 @@ public class ChefBootstrapModule extends AbstractModule {
    @Provides
    @Named("installChefGems")
    @Singleton
-   Statement installChefGems(BootstrapProperties bootstrapProperties) {
+   final Statement installChefGems(BootstrapProperties bootstrapProperties) {
       InstallRubyGems installRubyGems = InstallRubyGems.builder()
             .version(bootstrapProperties.gemSystemVersion().orNull())
             .updateSystem(bootstrapProperties.updateGemSystem(), bootstrapProperties.gemSystemVersion().orNull())
@@ -60,7 +60,7 @@ public class ChefBootstrapModule extends AbstractModule {
    @Provides
    @Named("installChefOmnibus")
    @Singleton
-   Statement installChefUsingOmnibus(BootstrapProperties bootstrapProperties) {
+   final Statement installChefUsingOmnibus(BootstrapProperties bootstrapProperties) {
       return bootstrapProperties.chefVersion().isPresent() ?
             new InstallChefUsingOmnibus(bootstrapProperties.chefVersion().get())
             : new InstallChefUsingOmnibus();
@@ -69,7 +69,7 @@ public class ChefBootstrapModule extends AbstractModule {
    @Provides
    @InstallChef
    @Singleton
-   Statement installChef(BootstrapProperties bootstrapProperties, @Named("installChefGems") Statement installChefGems,
+   final Statement installChef(BootstrapProperties bootstrapProperties, @Named("installChefGems") Statement installChefGems,
          @Named("installChefOmnibus") Statement installChefOmnibus) {
       return bootstrapProperties.useOmnibus() ? installChefOmnibus : installChefGems;
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
index faa9304..3ebe2ea 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
@@ -283,7 +283,7 @@ public class ChefParserModule extends AbstractModule {
    
    @Provides
    @Singleton
-   public Map<Type, Object> provideCustomAdapterBindings(DataBagItemAdapter adapter, PrivateKeyAdapter privateAdapter,
+   public final Map<Type, Object> provideCustomAdapterBindings(DataBagItemAdapter adapter, PrivateKeyAdapter privateAdapter,
          PublicKeyAdapter publicAdapter, X509CertificateAdapter certAdapter) {
       return ImmutableMap.<Type, Object> of(DatabagItem.class, adapter, PrivateKey.class, privateAdapter,
             PublicKey.class, publicAdapter, X509Certificate.class, certAdapter);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/chef/src/main/java/org/jclouds/ohai/config/JMXOhaiModule.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/ohai/config/JMXOhaiModule.java b/apis/chef/src/main/java/org/jclouds/ohai/config/JMXOhaiModule.java
index a8d01f7..8316f2d 100644
--- a/apis/chef/src/main/java/org/jclouds/ohai/config/JMXOhaiModule.java
+++ b/apis/chef/src/main/java/org/jclouds/ohai/config/JMXOhaiModule.java
@@ -36,10 +36,15 @@ public class JMXOhaiModule extends OhaiModule {
 
    @Provides
    @Singleton
+   protected final RuntimeMXBean guiceProvideRuntimeMXBean() {
+      return provideRuntimeMXBean();
+   }
+
    protected RuntimeMXBean provideRuntimeMXBean() {
       return ManagementFactory.getRuntimeMXBean();
    }
 
+   @Override
    public MapBinder<String, Supplier<JsonBall>> bindOhai() {
       MapBinder<String, Supplier<JsonBall>> mapBinder = super.bindOhai();
       mapBinder.addBinding("uptime_seconds").to(UptimeSecondsSupplier.class);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/chef/src/main/java/org/jclouds/ohai/config/OhaiModule.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/ohai/config/OhaiModule.java b/apis/chef/src/main/java/org/jclouds/ohai/config/OhaiModule.java
index 650fe9e..e1f83bc 100644
--- a/apis/chef/src/main/java/org/jclouds/ohai/config/OhaiModule.java
+++ b/apis/chef/src/main/java/org/jclouds/ohai/config/OhaiModule.java
@@ -59,13 +59,17 @@ public class OhaiModule extends AbstractModule {
 
    @Provides
    @Automatic
+   protected final Supplier<Map<String, JsonBall>> guiceProvideAutomatic(AutomaticSupplier in) {
+      return provideAutomatic(in);
+   }
+
    protected Supplier<Map<String, JsonBall>> provideAutomatic(AutomaticSupplier in) {
       return in;
    }
 
    @Provides
    @Automatic
-   Multimap<String, Supplier<JsonBall>> provideAutomatic(MapSetToMultimap<String, Supplier<JsonBall>> converter,
+   final Multimap<String, Supplier<JsonBall>> provideAutomatic(MapSetToMultimap<String, Supplier<JsonBall>> converter,
          @Automatic Map<String, Set<Supplier<JsonBall>>> input) {
       return converter.apply(input);
 
@@ -73,6 +77,10 @@ public class OhaiModule extends AbstractModule {
 
    @Named("systemProperties")
    @Provides
+   protected final Properties provideSystemProperties() {
+      return systemProperties();
+   }
+
    protected Properties systemProperties() {
       return System.getProperties();
    }
@@ -104,6 +112,10 @@ public class OhaiModule extends AbstractModule {
    }
 
    @Provides
+   protected final Long provideMillis() {
+      return millis();
+   }
+
    protected Long millis() {
       return System.currentTimeMillis();
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/config/CloudStackComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/config/CloudStackComputeServiceContextModule.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/config/CloudStackComputeServiceContextModule.java
index 572e7ec..7ef7805 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/config/CloudStackComputeServiceContextModule.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/config/CloudStackComputeServiceContextModule.java
@@ -156,7 +156,6 @@ public class CloudStackComputeServiceContextModule extends
       install(new LocationsFromComputeServiceAdapterModule<VirtualMachine, ServiceOffering, Template, Zone>() {
       });
    }
-   
 
    @Override
    protected TemplateOptions provideTemplateOptions(Injector injector, TemplateOptions options) {
@@ -168,7 +167,7 @@ public class CloudStackComputeServiceContextModule extends
    @Provides
    @Singleton
    @Memoized
-   public Supplier<Map<String, String>> listOSCategories(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   public final Supplier<Map<String, String>> listOSCategories(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
          final CloudStackApi client) {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException,
             new Supplier<Map<String, String>>() {
@@ -187,7 +186,7 @@ public class CloudStackComputeServiceContextModule extends
    @Provides
    @Singleton
    @Memoized
-   public Supplier<Map<String, OSType>> listOSTypes(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   public final Supplier<Map<String, OSType>> listOSTypes(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
          final CloudStackApi client) {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException,
             new Supplier<Map<String, OSType>>() {
@@ -212,7 +211,7 @@ public class CloudStackComputeServiceContextModule extends
    @Provides
    @Singleton
    @Memoized
-   public Supplier<Map<String, Network>> listNetworks(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   public final Supplier<Map<String, Network>> listNetworks(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
          final NetworksForCurrentUser networksForCurrentUser) {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, networksForCurrentUser,
                seconds, TimeUnit.SECONDS);
@@ -221,7 +220,7 @@ public class CloudStackComputeServiceContextModule extends
    @Provides
    @Singleton
    @Memoized
-   public Supplier<Map<String, Project>> listProjects(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   public final Supplier<Map<String, Project>> listProjects(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
                                                       final ProjectsForCurrentUser projectsForCurrentUser) {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, projectsForCurrentUser,
               seconds, TimeUnit.SECONDS);
@@ -230,7 +229,7 @@ public class CloudStackComputeServiceContextModule extends
    @Provides
    @Singleton
    @Memoized
-   public Supplier<User> getCurrentUser(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   public final Supplier<User> getCurrentUser(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
          final GetCurrentUser getCurrentUser) {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, getCurrentUser,
                seconds, TimeUnit.SECONDS);
@@ -238,27 +237,27 @@ public class CloudStackComputeServiceContextModule extends
 
    @Provides
    @Singleton
-   protected Predicate<String> jobComplete(JobComplete jobComplete) {
+   protected final Predicate<String> jobComplete(JobComplete jobComplete) {
       return retry(jobComplete, 1200, 1, 5, SECONDS);
    }
 
    @Provides
    @Singleton
-   protected LoadingCache<String, SshKeyPair> keyPairMap(
+   protected final LoadingCache<String, SshKeyPair> keyPairMap(
          CacheLoader<String, SshKeyPair> in) {
       return CacheBuilder.newBuilder().build(in);
    }
 
    @Provides
    @Singleton
-   protected LoadingCache<ZoneAndName, SecurityGroup> securityGroupMap(
+   protected final LoadingCache<ZoneAndName, SecurityGroup> securityGroupMap(
             CacheLoader<ZoneAndName, SecurityGroup> in) {
       return CacheBuilder.newBuilder().build(in);
    }
 
    @Provides
    @Singleton
-   protected LoadingCache<String, Set<IPForwardingRule>> getIPForwardingRulesByVirtualMachine(
+   protected final LoadingCache<String, Set<IPForwardingRule>> getIPForwardingRulesByVirtualMachine(
       CacheLoader<String, Set<IPForwardingRule>> in) {
       return CacheBuilder.newBuilder().build(in);
    }
@@ -266,14 +265,14 @@ public class CloudStackComputeServiceContextModule extends
 
    @Provides
    @Singleton
-   protected LoadingCache<String, Set<FirewallRule>> getFirewallRulesByVirtualMachine(
+   protected final LoadingCache<String, Set<FirewallRule>> getFirewallRulesByVirtualMachine(
       CacheLoader<String, Set<FirewallRule>> getFirewallRules) {
       return CacheBuilder.newBuilder().build(getFirewallRules);
    }
 
    @Provides
    @Singleton
-   public Map<NetworkType, ? extends OptionsConverter> optionsConverters() {
+   public final Map<NetworkType, ? extends OptionsConverter> optionsConverters() {
       return ImmutableMap.of(
          NetworkType.ADVANCED, new AdvancedNetworkOptionsConverter(),
          NetworkType.BASIC, new BasicNetworkOptionsConverter());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
index 95f186e..5a8962e 100644
--- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
+++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
@@ -117,7 +117,7 @@ public class CloudStackHttpApiModule extends HttpApiModule<CloudStackApi> {
     */
    @Provides
    @Singleton
-   protected AuthenticationFilter authenticationFilterForCredentialType(CredentialType credentialType,
+   protected final AuthenticationFilter authenticationFilterForCredentialType(CredentialType credentialType,
             AddSessionKeyAndJSessionIdToRequest addSessionKeyAndJSessionIdToRequest, QuerySigner querySigner) {
       switch (credentialType) {
          case PASSWORD_CREDENTIALS:
@@ -132,7 +132,7 @@ public class CloudStackHttpApiModule extends HttpApiModule<CloudStackApi> {
    // PROPERTY_SESSION_INTERVAL is default to 60 seconds
    @Provides
    @Singleton
-   protected LoadingCache<Credentials, LoginResponse> provideLoginResponseCache(
+   protected final LoadingCache<Credentials, LoginResponse> provideLoginResponseCache(
             LoginWithPasswordCredentials getLoginResponse,
             @Named(Constants.PROPERTY_SESSION_INTERVAL) int seconds) {
       return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(getLoginResponse);
@@ -142,7 +142,7 @@ public class CloudStackHttpApiModule extends HttpApiModule<CloudStackApi> {
    // http://code.google.com/p/guava-libraries/issues/detail?id=872
    @Provides
    @Singleton
-   protected Supplier<LoginResponse> provideLoginResponseSupplier(final LoadingCache<Credentials, LoginResponse> cache,
+   protected final Supplier<LoginResponse> provideLoginResponseSupplier(final LoadingCache<Credentials, LoginResponse> cache,
          @Provider final Supplier<Credentials> creds) {
       return new Supplier<LoginResponse>() {
          @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java b/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java
index 1aa7f5b..97eca73 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java
@@ -27,10 +27,12 @@ import java.util.concurrent.atomic.AtomicReference;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
+import org.jclouds.compute.ComputeServiceContext;
 import org.jclouds.compute.config.BaseComputeServiceContextModule;
 import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.extensions.ImageExtension;
 import org.jclouds.compute.extensions.SecurityGroupExtension;
+import org.jclouds.ec2.compute.EC2ComputeService;
 import org.jclouds.ec2.compute.domain.RegionAndName;
 import org.jclouds.ec2.compute.loaders.RegionAndIdToImage;
 import org.jclouds.ec2.compute.suppliers.RegionAndNameToImageSupplier;
@@ -63,11 +65,11 @@ public class EC2ComputeServiceContextModule extends BaseComputeServiceContextMod
       install(new EC2BindComputeSuppliersByClass());
       super.configure();
    }
-   
+
    protected void installDependencies() {
       install(new EC2ComputeServiceDependenciesModule());
    }
-   
+
    @Override
    protected boolean shouldEagerlyParseImages(Injector injector) {
       // If no owners to query, then will never lookup all images
@@ -90,13 +92,18 @@ public class EC2ComputeServiceContextModule extends BaseComputeServiceContextMod
 
    @Provides
    @Singleton
-   protected Supplier<LoadingCache<RegionAndName, ? extends Image>> provideRegionAndNameToImageSupplierCache(
+   protected final Supplier<LoadingCache<RegionAndName, ? extends Image>> provideRegionAndNameToImageSupplierCache(
             final RegionAndNameToImageSupplier supplier) {
       return supplier;
    }
 
    @Provides
    @Singleton
+   protected final Supplier<CacheLoader<RegionAndName, Image>> guiceProvideRegionAndNameToImageSupplierCacheLoader(
+           final RegionAndIdToImage delegate) {
+      return provideRegionAndNameToImageSupplierCacheLoader(delegate);
+   }
+
    protected Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader(
             final RegionAndIdToImage delegate) {
       return Suppliers.<CacheLoader<RegionAndName, Image>>ofInstance(new CacheLoader<RegionAndName, Image>() {
@@ -116,19 +123,19 @@ public class EC2ComputeServiceContextModule extends BaseComputeServiceContextMod
             };
             return new SetAndThrowAuthorizationExceptionSupplier<Image>(rawSupplier, authException).get();
          }
-         
+
       });
    }
 
    @Provides
    @Singleton
    @Named(PROPERTY_EC2_AMI_OWNERS)
-   String[] amiOwners(@Named(PROPERTY_EC2_AMI_OWNERS) String amiOwners) {
+   final String[] amiOwners(@Named(PROPERTY_EC2_AMI_OWNERS) String amiOwners) {
       if (amiOwners.trim().equals(""))
          return new String[] {};
       return toArray(Splitter.on(',').split(amiOwners), String.class);
    }
-   
+
    @Override
    protected Optional<ImageExtension> provideImageExtension(Injector i) {
       return Optional.of(i.getInstance(ImageExtension.class));

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java b/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java
index b9ef0ca..0a1a243 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java
@@ -93,7 +93,7 @@ public class EC2ComputeServiceDependenciesModule extends AbstractModule {
    
    @Singleton
    @Provides
-   protected Map<InstanceState, NodeMetadata.Status> toPortableNodeStatus() {
+   protected final Map<InstanceState, NodeMetadata.Status> toPortableNodeStatus() {
       return toPortableNodeStatus;
    }
    
@@ -106,7 +106,7 @@ public class EC2ComputeServiceDependenciesModule extends AbstractModule {
 
    @Singleton
    @Provides
-   protected Map<ImageState, Image.Status> toPortableImageStatus() {
+   protected final Map<ImageState, Image.Status> toPortableImageStatus() {
       return toPortableImageStatus;
    }
    
@@ -146,7 +146,7 @@ public class EC2ComputeServiceDependenciesModule extends AbstractModule {
     */
    @Provides
    @Singleton
-   public Function<RunningInstance, NodeMetadata> bindNodeConverter(RunningInstanceToNodeMetadata baseConverter,
+   public final Function<RunningInstance, NodeMetadata> bindNodeConverter(RunningInstanceToNodeMetadata baseConverter,
               AddElasticIpsToNodemetadata addElasticIpsToNodemetadata,
             @Named(EC2Constants.PROPERTY_EC2_AUTO_ALLOCATE_ELASTIC_IPS) boolean autoAllocateElasticIps) {
       if (!autoAllocateElasticIps)
@@ -156,20 +156,20 @@ public class EC2ComputeServiceDependenciesModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected LoadingCache<RunningInstance, Optional<LoginCredentials>> credentialsMap(CacheLoader<RunningInstance, Optional<LoginCredentials>> in) {
+   protected final LoadingCache<RunningInstance, Optional<LoginCredentials>> credentialsMap(CacheLoader<RunningInstance, Optional<LoginCredentials>> in) {
       return CacheBuilder.newBuilder().build(in);
    }
 
    @Provides
    @Singleton
-   protected ConcurrentMap<RegionAndName, KeyPair> keypairMap(Injector i) {
+   protected final ConcurrentMap<RegionAndName, KeyPair> keypairMap(Injector i) {
       return Maps.newConcurrentMap();
    }
 
    @Provides
    @Singleton
    @Named("SECURITY")
-   protected LoadingCache<RegionAndName, String> securityGroupMap(
+   protected final LoadingCache<RegionAndName, String> securityGroupMap(
             @Named("SECURITY") CacheLoader<RegionAndName, String> in) {
       return CacheBuilder.newBuilder().build(in);
    }
@@ -177,7 +177,7 @@ public class EC2ComputeServiceDependenciesModule extends AbstractModule {
    @Provides
    @Singleton
    @Named("ELASTICIP")
-   protected LoadingCache<RegionAndName, String> instanceToElasticIp(
+   protected final LoadingCache<RegionAndName, String> instanceToElasticIp(
             @Named("ELASTICIP") CacheLoader<RegionAndName, String> in) {
       return CacheBuilder.newBuilder().build(in);
    }
@@ -185,7 +185,7 @@ public class EC2ComputeServiceDependenciesModule extends AbstractModule {
    @Provides
    @Singleton
    @Named("SECURITY")
-   protected Predicate<RegionAndName> securityGroupEventualConsistencyDelay(SecurityGroupPresent in,
+   protected final Predicate<RegionAndName> securityGroupEventualConsistencyDelay(SecurityGroupPresent in,
          @Named(PROPERTY_EC2_TIMEOUT_SECURITYGROUP_PRESENT) long msDelay) {
       return retry(in, msDelay, 100l, MILLISECONDS);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/config/ElasticStackComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/config/ElasticStackComputeServiceContextModule.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/config/ElasticStackComputeServiceContextModule.java
index 4da11f2..7736aad 100644
--- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/config/ElasticStackComputeServiceContextModule.java
+++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/compute/config/ElasticStackComputeServiceContextModule.java
@@ -101,7 +101,7 @@ public class ElasticStackComputeServiceContextModule extends
 
    @Provides
    @Singleton
-   protected LoadingCache<String, DriveInfo> cache(GetDrive getDrive) {
+   protected final LoadingCache<String, DriveInfo> cache(GetDrive getDrive) {
       return CacheBuilder.newBuilder().build(getDrive);
    }
 
@@ -123,7 +123,7 @@ public class ElasticStackComputeServiceContextModule extends
    @Singleton
    @Provides
    @Memoized
-   protected Supplier<Map<String, WellKnownImage>> provideImages(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   protected final Supplier<Map<String, WellKnownImage>> provideImages(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
          @Memoized final Supplier<List<WellKnownImage>> wellKnownImageSupplier) throws IOException {
       // The image map won't change. Memoize it during the session.
       // This map can't be created directly as a singleton, as Guice needs it to construct the ElasticStackComputeServiceAdapter
@@ -144,7 +144,7 @@ public class ElasticStackComputeServiceContextModule extends
    @Singleton
    @Provides
    @Memoized
-   protected Supplier<List<WellKnownImage>> provideWellKnownImageSupplier(AtomicReference<AuthorizationException> authException,
+   protected final Supplier<List<WellKnownImage>> provideWellKnownImageSupplier(AtomicReference<AuthorizationException> authException,
          @Named(PROPERTY_SESSION_INTERVAL) long seconds, WellKnownImageSupplier uncached)
          throws IOException {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, uncached, seconds,
@@ -153,7 +153,7 @@ public class ElasticStackComputeServiceContextModule extends
 
    @Provides
    @Singleton
-   protected Predicate<DriveInfo> supplyDriveUnclaimed(DriveClaimed driveClaimed, Timeouts timeouts) {
+   protected final Predicate<DriveInfo> supplyDriveUnclaimed(DriveClaimed driveClaimed, Timeouts timeouts) {
       return retry(Predicates.not(driveClaimed), timeouts.nodeRunning, 1000, MILLISECONDS);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderHttpApiModule.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderHttpApiModule.java
index ef0b05e..f8c472f 100644
--- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderHttpApiModule.java
+++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderHttpApiModule.java
@@ -49,7 +49,7 @@ public class CinderHttpApiModule extends HttpApiModule<CinderApi> {
    
    @Provides
    @Singleton
-   public Multimap<URI, URI> aliases() {
+   public final Multimap<URI, URI> aliases() {
       return ImmutableMultimap.<URI, URI>builder().build();
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderParserModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderParserModule.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderParserModule.java
index da80131..3b2d157 100644
--- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderParserModule.java
+++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/config/CinderParserModule.java
@@ -41,7 +41,7 @@ public class CinderParserModule extends AbstractModule {
 
    @Provides
    @Singleton
-   public Map<Type, Object> provideCustomAdapterBindings() {
+   public final Map<Type, Object> provideCustomAdapterBindings() {
       return ImmutableMap.<Type, Object>of(
             Snapshot.class, new SnapshotAdapter()
       );

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
index 2c2fac3..4d540fd 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
@@ -95,7 +95,7 @@ public class KeystoneAuthenticationModule extends AbstractModule {
 
       @Provides
       @Singleton
-      protected Supplier<URI> provideZoneIdToURISupplierForApiVersion(
+      protected final Supplier<URI> provideZoneIdToURISupplierForApiVersion(
             @Named(KeystoneProperties.SERVICE_TYPE) String serviceType, @ApiVersion String apiVersion,
             LocationIdToURIFromAccessForTypeAndVersion.Factory factory) {
          return getLastValueInMap(factory.createForApiTypeAndVersion(serviceType, apiVersion));
@@ -103,8 +103,9 @@ public class KeystoneAuthenticationModule extends AbstractModule {
 
       @Provides
       @Singleton
-      Function<Endpoint, String> provideProvider(@Provider final String provider) {
+      final Function<Endpoint, String> provideProvider(@Provider final String provider) {
          return new Function<Endpoint, String>() {
+            @Override
             public String apply(Endpoint in) {
                return provider;
             }
@@ -125,21 +126,33 @@ public class KeystoneAuthenticationModule extends AbstractModule {
          bind(LocationsSupplier.class).to(RegionToProvider.class).in(Scopes.SINGLETON);
       }
 
-      // supply the region to id map from keystone, based on the servicetype and api version in
-      // config
       @Provides
       @Singleton
+      protected final RegionIdToURISupplier guiceProvideRegionIdToURISupplierForApiVersion(
+              @Named(KeystoneProperties.SERVICE_TYPE) String serviceType, @ApiVersion String apiVersion,
+              RegionIdToURISupplier.Factory factory) {
+         return provideRegionIdToURISupplierForApiVersion(serviceType, apiVersion, factory);
+      }
+
+      // supply the region to id map from keystone, based on the servicetype and api version in
+      // config
       protected RegionIdToURISupplier provideRegionIdToURISupplierForApiVersion(
             @Named(KeystoneProperties.SERVICE_TYPE) String serviceType, @ApiVersion String apiVersion,
             RegionIdToURISupplier.Factory factory) {
          return factory.createForApiTypeAndVersion(serviceType, apiVersion);
       }
 
+      @Provides
+      @Singleton
+      protected final RegionIdToAdminURISupplier guiceProvideRegionIdToAdminURISupplierForApiVersion(
+              @Named(KeystoneProperties.SERVICE_TYPE) String serviceType, @ApiVersion String apiVersion,
+              RegionIdToAdminURISupplier.Factory factory) {
+         return provideRegionIdToAdminURISupplierForApiVersion(serviceType, apiVersion, factory);
+      }
+
       // supply the region to id to AdminURL map from keystone, based on the servicetype and api
       // version in
       // config
-      @Provides
-      @Singleton
       protected RegionIdToAdminURISupplier provideRegionIdToAdminURISupplierForApiVersion(
             @Named(KeystoneProperties.SERVICE_TYPE) String serviceType, @ApiVersion String apiVersion,
             RegionIdToAdminURISupplier.Factory factory) {
@@ -167,7 +180,7 @@ public class KeystoneAuthenticationModule extends AbstractModule {
       // config
       @Provides
       @Singleton
-      protected ZoneIdToURISupplier provideZoneIdToURISupplierForApiVersion(
+      protected final ZoneIdToURISupplier provideZoneIdToURISupplierForApiVersion(
             @Named(KeystoneProperties.SERVICE_TYPE) String serviceType, @ApiVersion String apiVersion,
             ZoneIdToURISupplier.Factory factory) {
          return factory.createForApiTypeAndVersion(serviceType, apiVersion);
@@ -186,9 +199,10 @@ public class KeystoneAuthenticationModule extends AbstractModule {
    @Provides
    @Singleton
    @Authentication
-   protected Supplier<String> provideAuthenticationTokenCache(final Supplier<Access> supplier)
+   protected final Supplier<String> provideAuthenticationTokenCache(final Supplier<Access> supplier)
          throws InterruptedException, ExecutionException, TimeoutException {
       return new Supplier<String>() {
+         @Override
          public String get() {
             return supplier.get().getToken().getId();
          }
@@ -197,6 +211,10 @@ public class KeystoneAuthenticationModule extends AbstractModule {
 
    @Provides
    @Singleton
+   protected final Map<String, Function<Credentials, Access>> provideAuthenticationMethods(Injector i) {
+      return authenticationMethods(i);
+   }
+
    protected Map<String, Function<Credentials, Access>> authenticationMethods(Injector i) {
       Builder<Function<Credentials, Access>> fns = ImmutableSet.<Function<Credentials, Access>> builder();
       fns.add(i.getInstance(AuthenticatePasswordCredentials.class));
@@ -206,7 +224,7 @@ public class KeystoneAuthenticationModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected Function<Credentials, Access> authenticationMethodForCredentialType(
+   protected final Function<Credentials, Access> authenticationMethodForCredentialType(
          @Named(KeystoneProperties.CREDENTIAL_TYPE) String credentialType,
          Map<String, Function<Credentials, Access>> authenticationMethods) {
       checkArgument(authenticationMethods.containsKey(credentialType), "credential type %s not in supported list: %s",
@@ -218,7 +236,7 @@ public class KeystoneAuthenticationModule extends AbstractModule {
    // PROPERTY_SESSION_INTERVAL is default to 60 seconds, but we have this here at 11 hours for now.
    @Provides
    @Singleton
-   public LoadingCache<Credentials, Access> provideAccessCache(Function<Credentials, Access> getAccess) {
+   public final LoadingCache<Credentials, Access> provideAccessCache(Function<Credentials, Access> getAccess) {
       return CacheBuilder.newBuilder().expireAfterWrite(11, TimeUnit.HOURS).build(CacheLoader.from(getAccess));
    }
 
@@ -226,7 +244,7 @@ public class KeystoneAuthenticationModule extends AbstractModule {
    // http://code.google.com/p/guava-libraries/issues/detail?id=872
    @Provides
    @Singleton
-   protected Supplier<Access> provideAccessSupplier(final LoadingCache<Credentials, Access> cache,
+   protected final Supplier<Access> provideAccessSupplier(final LoadingCache<Credentials, Access> cache,
          @Provider final Supplier<Credentials> creds) {
       return new Supplier<Access>() {
          @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
index 03b4c17..d34541c 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
@@ -79,7 +79,7 @@ public class KeystoneHttpApiModule extends HttpApiModule<KeystoneApi> {
       @Provides
       @Singleton
       @Identity
-      protected Supplier<URI> provideStorageUrl(final RegionIdToAdminURISupplier.Factory factory,
+      protected final Supplier<URI> provideStorageUrl(final RegionIdToAdminURISupplier.Factory factory,
                @ApiVersion final String version, @Provider final Supplier<URI> providerURI) {
          Supplier<URI> identityServiceForVersion = getLastValueInMap(factory.createForApiTypeAndVersion(
                   ServiceType.IDENTITY, version));
@@ -105,7 +105,7 @@ public class KeystoneHttpApiModule extends HttpApiModule<KeystoneApi> {
 
    @Provides
    @Singleton
-   public LoadingCache<String, Set<? extends Extension>> provideExtensionsByRegion(final javax.inject.Provider<KeystoneApi> keystoneApi) {
+   public final LoadingCache<String, Set<? extends Extension>> provideExtensionsByRegion(final javax.inject.Provider<KeystoneApi> keystoneApi) {
       return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS)
             .build(CacheLoader.from(Suppliers.memoize(new Supplier<Set<? extends Extension>>() {
                @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/config/ProviderModuleExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/config/ProviderModuleExpectTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/config/ProviderModuleExpectTest.java
index 2ccdcb2..b40fcbf 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/config/ProviderModuleExpectTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/config/ProviderModuleExpectTest.java
@@ -82,7 +82,7 @@ public class ProviderModuleExpectTest extends BaseRestApiExpectTest<ProviderModu
       @Provides
       @Singleton
       @DNS
-      protected Supplier<URI> provideCDNUrl(RegionIdToURISupplier.Factory factory, @ApiVersion String apiVersion) {
+      protected final Supplier<URI> provideCDNUrl(RegionIdToURISupplier.Factory factory, @ApiVersion String apiVersion) {
          return getLastValueInMap(factory.createForApiTypeAndVersion("dns", apiVersion));
       }
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
index 029c374..f03c456 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
@@ -174,14 +174,14 @@ public class NovaComputeServiceContextModule extends
    @Provides
    @Singleton
    @Named("FLOATINGIP")
-   protected LoadingCache<RegionAndId, Iterable<? extends FloatingIP>> instanceToFloatingIps(
+   protected final LoadingCache<RegionAndId, Iterable<? extends FloatingIP>> instanceToFloatingIps(
             @Named("FLOATINGIP") CacheLoader<RegionAndId, Iterable<? extends FloatingIP>> in) {
       return CacheBuilder.newBuilder().build(in);
    }
 
    @Provides
    @Singleton
-   protected LoadingCache<RegionAndName, SecurityGroupInRegion> securityGroupMap(
+   protected final LoadingCache<RegionAndName, SecurityGroupInRegion> securityGroupMap(
             CacheLoader<RegionAndName, SecurityGroupInRegion> in) {
       return CacheBuilder.newBuilder().build(in);
    }
@@ -195,7 +195,7 @@ public class NovaComputeServiceContextModule extends
    @Provides
    @Singleton
    @Named("SECURITYGROUP_PRESENT")
-   protected Predicate<AtomicReference<RegionAndName>> securityGroupEventualConsistencyDelay(
+   protected final Predicate<AtomicReference<RegionAndName>> securityGroupEventualConsistencyDelay(
             FindSecurityGroupWithNameAndReturnTrue in,
             @Named(TIMEOUT_SECURITYGROUP_PRESENT) long msDelay) {
       return retry(in, msDelay, 100l, MILLISECONDS);
@@ -203,14 +203,14 @@ public class NovaComputeServiceContextModule extends
 
    @Provides
    @Singleton
-   protected LoadingCache<RegionAndName, KeyPair> keyPairMap(
+   protected final LoadingCache<RegionAndName, KeyPair> keyPairMap(
          CacheLoader<RegionAndName, KeyPair> in) {
       return CacheBuilder.newBuilder().build(in);
    }
 
    @Provides
    @Singleton
-   protected Supplier<Map<String, Location>> createLocationIndexedById(
+   protected final Supplier<Map<String, Location>> createLocationIndexedById(
             @Memoized Supplier<Set<? extends Location>> locations) {
       return Suppliers.compose(new Function<Set<? extends Location>, Map<String, Location>>() {
 
@@ -261,7 +261,7 @@ public class NovaComputeServiceContextModule extends
 
    @Singleton
    @Provides
-   protected Map<Server.Status, NodeMetadata.Status> toPortableNodeStatus() {
+   protected final Map<Server.Status, NodeMetadata.Status> toPortableNodeStatus() {
       return toPortableNodeStatus;
    }
 
@@ -277,7 +277,7 @@ public class NovaComputeServiceContextModule extends
 
    @Singleton
    @Provides
-   protected Map<org.jclouds.openstack.nova.v2_0.domain.Image.Status, Image.Status> toPortableImageStatus() {
+   protected final Map<org.jclouds.openstack.nova.v2_0.domain.Image.Status, Image.Status> toPortableImageStatus() {
       return toPortableImageStatus;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaHttpApiModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaHttpApiModule.java
index 4a74cf7..53525d6 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaHttpApiModule.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaHttpApiModule.java
@@ -100,7 +100,7 @@ public class NovaHttpApiModule extends HttpApiModule<NovaApi> {
 
    @Provides
    @Singleton
-   public LoadingCache<String, Set<? extends Extension>> provideExtensionsByRegion(final Provider<NovaApi> novaApi) {
+   public final LoadingCache<String, Set<? extends Extension>> provideExtensionsByRegion(final Provider<NovaApi> novaApi) {
       return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS)
             .build(new CacheLoader<String, Set<? extends Extension>>() {
                @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
index 5b3eb0d..bde077a 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
@@ -62,7 +62,7 @@ public class NovaParserModule extends AbstractModule {
 
    @Provides
    @Singleton
-   public Map<Type, Object> provideCustomAdapterBindings() {
+   public final Map<Type, Object> provideCustomAdapterBindings() {
       return ImmutableMap.<Type, Object>of(
               HostResourceUsage.class, new HostResourceUsageAdapter(),
               ServerWithSecurityGroups.class, new ServerWithSecurityGroupsAdapter(),

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/config/SwiftBlobStoreContextModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/config/SwiftBlobStoreContextModule.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/config/SwiftBlobStoreContextModule.java
index c3b0a82..5474863 100644
--- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/config/SwiftBlobStoreContextModule.java
+++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/config/SwiftBlobStoreContextModule.java
@@ -44,7 +44,7 @@ public class SwiftBlobStoreContextModule extends AbstractModule {
    }
 
    @Provides
-   Function<String, BlobStore> blobStore(FactoryFunction in) {
+   final Function<String, BlobStore> blobStore(FactoryFunction in) {
       return in;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/config/TroveHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/config/TroveHttpApiModule.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/config/TroveHttpApiModule.java
index b1971b0..1bf6404 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/config/TroveHttpApiModule.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/config/TroveHttpApiModule.java
@@ -55,7 +55,7 @@ public class TroveHttpApiModule extends HttpApiModule<TroveApi> {
    
    @Provides
    @Singleton
-   public Multimap<URI, URI> aliases() {
+   public final Multimap<URI, URI> aliases() {
       return ImmutableMultimap.<URI, URI>builder().build();
    }
 
@@ -67,7 +67,7 @@ public class TroveHttpApiModule extends HttpApiModule<TroveApi> {
    }
    
    @Provides
-   Supplier<Optional<Tenant>> supplyTenant(Supplier<Access> access) {
+   final Supplier<Optional<Tenant>> supplyTenant(Supplier<Access> access) {
       return Suppliers.compose(GetTenant.INSTANCE, access);
    }
    

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/rackspace-cloudidentity/src/main/java/org/jclouds/rackspace/cloudidentity/v2_0/config/CloudIdentityAuthenticationApiModule.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudidentity/src/main/java/org/jclouds/rackspace/cloudidentity/v2_0/config/CloudIdentityAuthenticationApiModule.java b/apis/rackspace-cloudidentity/src/main/java/org/jclouds/rackspace/cloudidentity/v2_0/config/CloudIdentityAuthenticationApiModule.java
index 5fc125a..d3f0ec1 100644
--- a/apis/rackspace-cloudidentity/src/main/java/org/jclouds/rackspace/cloudidentity/v2_0/config/CloudIdentityAuthenticationApiModule.java
+++ b/apis/rackspace-cloudidentity/src/main/java/org/jclouds/rackspace/cloudidentity/v2_0/config/CloudIdentityAuthenticationApiModule.java
@@ -33,7 +33,7 @@ public class CloudIdentityAuthenticationApiModule extends AbstractModule  {
    }
 
    @Provides
-   private AuthenticationApi provideAuthenticationApi(CloudIdentityAuthenticationApi in){ 
+   private AuthenticationApi provideAuthenticationApi(CloudIdentityAuthenticationApi in){
       return in;
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/route53/src/main/java/org/jclouds/route53/config/Route53HttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/route53/src/main/java/org/jclouds/route53/config/Route53HttpApiModule.java b/apis/route53/src/main/java/org/jclouds/route53/config/Route53HttpApiModule.java
index 44ae706..1ee323c 100644
--- a/apis/route53/src/main/java/org/jclouds/route53/config/Route53HttpApiModule.java
+++ b/apis/route53/src/main/java/org/jclouds/route53/config/Route53HttpApiModule.java
@@ -42,16 +42,20 @@ import com.google.inject.Provides;
 public class Route53HttpApiModule extends AWSHttpApiModule<Route53Api> {
    public Route53HttpApiModule() {
    }
-   
+
    @Provides
    @TimeStamp
+   protected final String guiceProvideTimeStamp(DateService dateService) {
+      return provideTimeStamp(dateService);
+   }
+
    protected String provideTimeStamp(DateService dateService) {
       return dateService.rfc1123DateFormat(new Date(System.currentTimeMillis()));
    }
 
    @Provides
    @Singleton
-   RequestSigner provideRequestSigner(RestAuthentication in) {
+   final RequestSigner provideRequestSigner(RestAuthentication in) {
       return in;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/s3/src/main/java/org/jclouds/s3/blobstore/config/S3BlobStoreContextModule.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/config/S3BlobStoreContextModule.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/config/S3BlobStoreContextModule.java
index f820308..9c76eee 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/config/S3BlobStoreContextModule.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/config/S3BlobStoreContextModule.java
@@ -58,7 +58,7 @@ public class S3BlobStoreContextModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected LoadingCache<String, AccessControlList> bucketAcls(BackoffOnNotFoundWhenGetBucketACL loader) {
+   protected final LoadingCache<String, AccessControlList> bucketAcls(BackoffOnNotFoundWhenGetBucketACL loader) {
       return CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build(loader);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java b/apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java
index 3841865..69feb8e 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/config/S3HttpApiModule.java
@@ -80,6 +80,11 @@ public class S3HttpApiModule<S extends S3Client> extends AWSHttpApiModule<S> {
    @Provides
    @Bucket
    @Singleton
+   protected final CacheLoader<String, Optional<String>> provideBucketToRegion(@Region Supplier<Set<String>> regionSupplier,
+            final S3Client client) {
+      return bucketToRegion(regionSupplier, client);
+   }
+
    protected CacheLoader<String, Optional<String>> bucketToRegion(@Region Supplier<Set<String>> regionSupplier,
             final S3Client client) {
       Set<String> regions = regionSupplier.get();
@@ -133,13 +138,17 @@ public class S3HttpApiModule<S extends S3Client> extends AWSHttpApiModule<S> {
    @Provides
    @Bucket
    @Singleton
-   protected LoadingCache<String, Optional<String>> bucketToRegion(@Bucket CacheLoader<String, Optional<String>> loader) {
+   protected final LoadingCache<String, Optional<String>> bucketToRegion(@Bucket CacheLoader<String, Optional<String>> loader) {
       return CacheBuilder.newBuilder().build(loader);
    }
 
    @Provides
    @Bucket
    @Singleton
+   protected final Supplier<String> provideDefaultRegionForBucket(@Region Supplier<String> defaultRegion) {
+      return defaultRegionForBucket(defaultRegion);
+   }
+
    protected Supplier<String> defaultRegionForBucket(@Region Supplier<String> defaultRegion) {
       return defaultRegion;
    }
@@ -147,7 +156,7 @@ public class S3HttpApiModule<S extends S3Client> extends AWSHttpApiModule<S> {
    @Provides
    @Singleton
    @Bucket
-   protected Supplier<URI> provideBucketURI(@Bucket Supplier<String> defaultRegion,
+   protected final Supplier<URI> provideBucketURI(@Bucket Supplier<String> defaultRegion,
             RegionToEndpointOrProviderIfNull regionToEndpoint) {
       return Suppliers.compose(regionToEndpoint, defaultRegion);
    }
@@ -177,7 +186,7 @@ public class S3HttpApiModule<S extends S3Client> extends AWSHttpApiModule<S> {
 
    @Provides
    @Singleton
-   protected RequestSigner provideRequestSigner(RequestAuthorizeSignature in) {
+   protected final RequestSigner provideRequestSigner(RequestAuthorizeSignature in) {
       return in;
    }
 
@@ -190,6 +199,10 @@ public class S3HttpApiModule<S extends S3Client> extends AWSHttpApiModule<S> {
 
    @Provides
    @TimeStamp
+   protected final String guiceProvideTimeStamp(@TimeStamp Supplier<String> cache) {
+      return provideTimeStamp(cache);
+   }
+
    protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
       return cache.get();
    }
@@ -200,9 +213,10 @@ public class S3HttpApiModule<S extends S3Client> extends AWSHttpApiModule<S> {
    @Provides
    @TimeStamp
    @Singleton
-   protected Supplier<String> provideTimeStampCache(@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
+   protected final Supplier<String> provideTimeStampCache(@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
             final DateService dateService) {
       return Suppliers.memoizeWithExpiration(new Supplier<String>() {
+         @Override
          public String get() {
             return dateService.rfc822DateFormat();
          }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/s3/src/main/java/org/jclouds/s3/config/S3ObjectModule.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/config/S3ObjectModule.java b/apis/s3/src/main/java/org/jclouds/s3/config/S3ObjectModule.java
index 268ec41..fbe2734 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/config/S3ObjectModule.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/config/S3ObjectModule.java
@@ -53,7 +53,7 @@ public class S3ObjectModule extends AbstractModule {
    }
 
    @Provides
-   S3Object provideS3Object(S3Object.Factory factory) {
+   final S3Object provideS3Object(S3Object.Factory factory) {
       return factory.create(null);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java b/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
index 4992ab6..d433672 100644
--- a/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
+++ b/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
@@ -49,14 +49,14 @@ public abstract class AWSHttpApiModule<A> extends HttpApiModule<A> {
    @Provides
    @ClientError
    @Singleton
-   protected Set<String> provideRetryableCodes() {
+   protected final Set<String> provideRetryableCodes() {
       return ImmutableSet.of("RequestTimeout", "OperationAborted", "SignatureDoesNotMatch");
    }
    
    @Provides
    @ServerError
    @Singleton
-   protected Set<String> provideRetryableServerCodes() {
+   protected final Set<String> provideRetryableServerCodes() {
       return ImmutableSet.of("RequestLimitExceeded", "InternalError");
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/sts/src/main/java/org/jclouds/aws/config/FormSigningHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/sts/src/main/java/org/jclouds/aws/config/FormSigningHttpApiModule.java b/apis/sts/src/main/java/org/jclouds/aws/config/FormSigningHttpApiModule.java
index 5989a29..0792f4f 100644
--- a/apis/sts/src/main/java/org/jclouds/aws/config/FormSigningHttpApiModule.java
+++ b/apis/sts/src/main/java/org/jclouds/aws/config/FormSigningHttpApiModule.java
@@ -45,13 +45,17 @@ public abstract class FormSigningHttpApiModule<A> extends AWSHttpApiModule<A> {
 
    @Provides
    @TimeStamp
+   protected final String guiceProvideTimeStamp(DateService dateService) {
+      return provideTimeStamp(dateService);
+   }
+
    protected String provideTimeStamp(DateService dateService) {
       return dateService.iso8601DateFormat(new Date(System.currentTimeMillis()));
    }
 
    @Provides
    @Singleton
-   RequestSigner provideRequestSigner(FormSigner in) {
+   final RequestSigner provideRequestSigner(FormSigner in) {
       if (in instanceof RequestSigner) {
          return (RequestSigner) in;
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/config/TemporaryUrlExtensionModule.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/config/TemporaryUrlExtensionModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/config/TemporaryUrlExtensionModule.java
index b514f32..18abd56 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/config/TemporaryUrlExtensionModule.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/config/TemporaryUrlExtensionModule.java
@@ -64,6 +64,7 @@ public abstract class TemporaryUrlExtensionModule<A extends CommonSwiftClient> e
    public static class SwiftKeystoneTemporaryUrlExtensionModule extends
          TemporaryUrlExtensionModule<SwiftKeystoneClient> {
 
+      @Override
       protected void bindTemporaryUrlKeyApi() {
          bindHttpApi(binder(), KeystoneTemporaryUrlKeyApi.class);
          bind(TemporaryUrlKeyApi.class).to(KeystoneTemporaryUrlKeyApi.class);
@@ -79,6 +80,10 @@ public abstract class TemporaryUrlExtensionModule<A extends CommonSwiftClient> e
 
    @Provides
    @TimeStamp
+   protected final Long guiceUnixEpochTimestampProvider() {
+      return unixEpochTimestampProvider();
+   }
+
    protected Long unixEpochTimestampProvider() {
       return System.currentTimeMillis() / 1000; /* convert to seconds */
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftHttpApiModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftHttpApiModule.java
index 3a673be..c45da4f 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftHttpApiModule.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftHttpApiModule.java
@@ -66,7 +66,7 @@ public class SwiftHttpApiModule<S extends CommonSwiftClient> extends HttpApiModu
       @Provides
       @Singleton
       @Storage
-      protected Supplier<URI> provideStorageUrl(URIFromAuthenticationResponseForService.Factory factory) {
+      protected final Supplier<URI> provideStorageUrl(URIFromAuthenticationResponseForService.Factory factory) {
          return factory.create(AuthHeaders.STORAGE_URL);
       }
    }
@@ -75,7 +75,7 @@ public class SwiftHttpApiModule<S extends CommonSwiftClient> extends HttpApiModu
       @Provides
       @Singleton
       @Storage
-      protected Supplier<URI> provideStorageUrl(RegionIdToURISupplier.Factory factory,
+      protected final Supplier<URI> provideStorageUrl(RegionIdToURISupplier.Factory factory,
             @ApiVersion String apiVersion,
             @Named(LocationConstants.PROPERTY_REGION) String region) {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftObjectModule.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftObjectModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftObjectModule.java
index 439b802..738d47e 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftObjectModule.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftObjectModule.java
@@ -54,7 +54,7 @@ public class SwiftObjectModule extends AbstractModule {
    }
 
    @Provides
-   SwiftObject provideSwiftObject(SwiftObject.Factory factory) {
+   final SwiftObject provideSwiftObject(SwiftObject.Factory factory) {
       return factory.create(null);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/blobstore/src/main/java/org/jclouds/blobstore/config/BlobStoreObjectModule.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/BlobStoreObjectModule.java b/blobstore/src/main/java/org/jclouds/blobstore/config/BlobStoreObjectModule.java
index 8af7268..d657114 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/BlobStoreObjectModule.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/BlobStoreObjectModule.java
@@ -52,7 +52,7 @@ public class BlobStoreObjectModule extends AbstractModule {
    }
 
    @Provides
-   Blob provideBlob(Blob.Factory factory) {
+   final Blob provideBlob(Blob.Factory factory) {
       return factory.create(null);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/common/openstack/src/main/java/org/jclouds/openstack/config/OpenStackAuthenticationModule.java
----------------------------------------------------------------------
diff --git a/common/openstack/src/main/java/org/jclouds/openstack/config/OpenStackAuthenticationModule.java b/common/openstack/src/main/java/org/jclouds/openstack/config/OpenStackAuthenticationModule.java
index 9a98f7f..49870b8 100644
--- a/common/openstack/src/main/java/org/jclouds/openstack/config/OpenStackAuthenticationModule.java
+++ b/common/openstack/src/main/java/org/jclouds/openstack/config/OpenStackAuthenticationModule.java
@@ -59,15 +59,21 @@ public class OpenStackAuthenticationModule extends AbstractModule {
       bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(RetryOnRenew.class);
    }
 
-   /**
-    * borrowing concurrency code to ensure that caching takes place properly
-    */
    @Provides
    @Singleton
    @Authentication
+   protected final Supplier<String> guiceProvideAuthenticationTokenCache(final Supplier<AuthenticationResponse> supplier)
+            throws InterruptedException, ExecutionException, TimeoutException {
+      return provideAuthenticationTokenCache(supplier);
+   }
+
+   /**
+    * borrowing concurrency code to ensure that caching takes place properly
+    */
    protected Supplier<String> provideAuthenticationTokenCache(final Supplier<AuthenticationResponse> supplier)
             throws InterruptedException, ExecutionException, TimeoutException {
       return new Supplier<String>() {
+         @Override
          public String get() {
             return supplier.get().getAuthToken();
          }
@@ -97,14 +103,14 @@ public class OpenStackAuthenticationModule extends AbstractModule {
 
    @Provides
    @Singleton
-   public LoadingCache<Credentials, AuthenticationResponse> provideAuthenticationResponseCache(
+   public final LoadingCache<Credentials, AuthenticationResponse> provideAuthenticationResponseCache(
          GetAuthenticationResponse getAuthenticationResponse) {
       return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS).build(getAuthenticationResponse);
    }
 
    @Provides
    @Singleton
-   protected Supplier<AuthenticationResponse> provideAuthenticationResponseSupplier(
+   protected final Supplier<AuthenticationResponse> provideAuthenticationResponseSupplier(
          final LoadingCache<Credentials, AuthenticationResponse> cache, @Provider final Supplier<Credentials> creds) {
       return new Supplier<AuthenticationResponse>() {
          @Override
@@ -117,8 +123,13 @@ public class OpenStackAuthenticationModule extends AbstractModule {
    @Provides
    @Singleton
    @TimeStamp
+   protected final Supplier<Date> guiceProvideCacheBusterDate() {
+      return provideCacheBusterDate();
+   }
+
    protected Supplier<Date> provideCacheBusterDate() {
       return memoizeWithExpiration(new Supplier<Date>() {
+         @Override
          public Date get() {
             return new Date();
          }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/common/openstack/src/main/java/org/jclouds/openstack/keystone/v1_1/config/AuthenticationServiceModule.java
----------------------------------------------------------------------
diff --git a/common/openstack/src/main/java/org/jclouds/openstack/keystone/v1_1/config/AuthenticationServiceModule.java b/common/openstack/src/main/java/org/jclouds/openstack/keystone/v1_1/config/AuthenticationServiceModule.java
index f8d32e1..4d48888 100644
--- a/common/openstack/src/main/java/org/jclouds/openstack/keystone/v1_1/config/AuthenticationServiceModule.java
+++ b/common/openstack/src/main/java/org/jclouds/openstack/keystone/v1_1/config/AuthenticationServiceModule.java
@@ -67,7 +67,7 @@ public class AuthenticationServiceModule extends AbstractModule {
    @Provides
    @Singleton
    @Authentication
-   protected Supplier<String> provideAuthenticationTokenCache(final Supplier<Auth> supplier)
+   protected final Supplier<String> provideAuthenticationTokenCache(final Supplier<Auth> supplier)
             throws InterruptedException, ExecutionException, TimeoutException {
       return new Supplier<String>() {
          public String get() {
@@ -99,14 +99,14 @@ public class AuthenticationServiceModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected LoadingCache<Credentials, Auth> provideAuthCache(GetAuth getAuth,
+   protected final LoadingCache<Credentials, Auth> provideAuthCache(GetAuth getAuth,
          @Named(PROPERTY_SESSION_INTERVAL) long sessionInterval) {
       return CacheBuilder.newBuilder().expireAfterWrite(sessionInterval, TimeUnit.SECONDS).build(getAuth);
    }
 
    @Provides
    @Singleton
-   protected Supplier<Auth> provideAuthSupplier(final LoadingCache<Credentials, Auth> cache,
+   protected final Supplier<Auth> provideAuthSupplier(final LoadingCache<Credentials, Auth> cache,
          @Provider final Supplier<Credentials> creds) {
       return new Supplier<Auth>() {
          @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/edde7219/compute/src/main/java/org/jclouds/compute/config/BaseComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/compute/src/main/java/org/jclouds/compute/config/BaseComputeServiceContextModule.java b/compute/src/main/java/org/jclouds/compute/config/BaseComputeServiceContextModule.java
index 5336f44..c1bdf38 100644
--- a/compute/src/main/java/org/jclouds/compute/config/BaseComputeServiceContextModule.java
+++ b/compute/src/main/java/org/jclouds/compute/config/BaseComputeServiceContextModule.java
@@ -168,7 +168,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
 
    @Provides
    @Singleton
-   public Map<OsFamily, Map<String, String>> provideOsVersionMap(ComputeServiceConstants.ReferenceData data, Json json) {
+   public final Map<OsFamily, Map<String, String>> provideOsVersionMap(ComputeServiceConstants.ReferenceData data, Json json) {
       return json.fromJson(data.osVersionMapJson, new TypeLiteral<Map<OsFamily, Map<String, String>>>() {
       }.getType());
    }
@@ -178,7 +178,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
     */
    @Provides
    @Named("DEFAULT")
-   protected TemplateBuilder provideTemplateOptionallyFromProperties(Injector injector, TemplateBuilder template,
+   protected final TemplateBuilder provideTemplateOptionallyFromProperties(Injector injector, TemplateBuilder template,
          @Provider String provider, ValueOfConfigurationKeyOrNull config) {
       String templateString = config.apply(provider + ".template");
       if (templateString == null)
@@ -198,6 +198,10 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
    
    @Provides
    @Singleton
+   protected final Map<OsFamily, LoginCredentials> provideOsFamilyToCredentials(Injector injector) {
+      return osFamilyToCredentials(injector);
+   }
+
    protected Map<OsFamily, LoginCredentials> osFamilyToCredentials(Injector injector) {
       return ImmutableMap.of(OsFamily.WINDOWS, LoginCredentials.builder().user("Administrator").build());
    }
@@ -207,13 +211,17 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
     */
    @Provides
    @Named("DEFAULT")
+   protected final TemplateOptions guiceProvideTemplateOptions(Injector injector, TemplateOptions options) {
+      return provideTemplateOptions(injector, options);
+   }
+
    protected TemplateOptions provideTemplateOptions(Injector injector, TemplateOptions options) {
       return options;
    }
 
    @Provides
    @Singleton
-   protected Supplier<Map<String, ? extends Image>> provideImageMap(@Memoized Supplier<Set<? extends Image>> images) {
+   protected final Supplier<Map<String, ? extends Image>> provideImageMap(@Memoized Supplier<Set<? extends Image>> images) {
       return Suppliers.compose(new Function<Set<? extends Image>, Map<String, ? extends Image>>() {
 
          @Override
@@ -234,7 +242,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
    @Provides
    @Singleton
    @Named("imageCache")
-   protected Supplier<Set<? extends Image>> supplyImageCache(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   protected final Supplier<Set<? extends Image>> supplyImageCache(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
          final Supplier<Set<? extends Image>> imageSupplier, Injector injector) {
       if (shouldEagerlyParseImages(injector)) {
          return supplyImageCache(authException, seconds, imageSupplier);
@@ -263,7 +271,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected Supplier<Map<String, ? extends Hardware>> provideSizeMap(@Memoized Supplier<Set<? extends Hardware>> sizes) {
+   protected final Supplier<Map<String, ? extends Hardware>> provideSizeMap(@Memoized Supplier<Set<? extends Hardware>> sizes) {
       return Suppliers.compose(new Function<Set<? extends Hardware>, Map<String, ? extends Hardware>>() {
 
          @Override
@@ -284,7 +292,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
    @Provides
    @Singleton
    @Memoized
-   protected Supplier<Set<? extends Hardware>> supplySizeCache(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
+   protected final Supplier<Set<? extends Hardware>> supplySizeCache(AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
          final Supplier<Set<? extends Hardware>> hardwareSupplier) {
       return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, hardwareSupplier,
                seconds, TimeUnit.SECONDS);
@@ -292,7 +300,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected Function<ComputeMetadata, String> indexer() {
+   protected final Function<ComputeMetadata, String> indexer() {
       return new Function<ComputeMetadata, String>() {
          @Override
          public String apply(ComputeMetadata from) {
@@ -304,7 +312,7 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
    @Provides
    @Singleton
    public final Optional<ImageExtension> guiceProvideImageExtension(Injector i) {
-       return provideImageExtension(i);
+      return provideImageExtension(i);
    }
 
    protected Optional<ImageExtension> provideImageExtension(Injector i) {
@@ -313,8 +321,8 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
 
    @Provides
    @Singleton
-   protected Optional<SecurityGroupExtension> guiceProvideSecurityGroupExtension(Injector i)
-       return provideSecurityGroupExtension(i);
+   protected final Optional<SecurityGroupExtension> guiceProvideSecurityGroupExtension(Injector i) {
+      return provideSecurityGroupExtension(i);
    }
 
    protected Optional<SecurityGroupExtension> provideSecurityGroupExtension(Injector i) {