Move internal utility code to separate package.

These files have moved from c.g.i.internal to c.g.i.internal.util. Visibility has been increased when necessary.

AbstractIterator.java 
AbstractMapEntry.java 
AsynchronousComputationException.java 
Classes.java 
Collections2.java 
ComputationException.java 
CustomConcurrentHashMap.java 
ExpirationTimer.java 
FinalizablePhantomReference.java 
FinalizableReference.java 
FinalizableReferenceQueue.java 
FinalizableSoftReference.java 
FinalizableWeakReference.java 
Finalizer.java 
Function.java 
Hashing.java 
ImmutableCollection.java 
ImmutableEntry.java 
ImmutableList.java 
ImmutableMap.java 
ImmutableSet.java 
Iterables.java 
Iterators.java 
Join.java 
LineNumbers.java 
Lists.java 
MapMaker.java 
Maps.java 
NullOutputException.java 
ObjectArrays.java 
Objects.java 
Preconditions.java 
Sets.java 
SourceProvider.java 
StackTraceElements.java 
Stopwatch.java 
Strings.java 
ToStringBuilder.java 
UnmodifiableIterator.java 

The rest of this change is just imports changes. Thanks to Max Bowsher for the idea.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@1185 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/AssistedConstructor.java b/extensions/assistedinject/src/com/google/inject/assistedinject/AssistedConstructor.java
index b6024e2..78b79af 100755
--- a/extensions/assistedinject/src/com/google/inject/assistedinject/AssistedConstructor.java
+++ b/extensions/assistedinject/src/com/google/inject/assistedinject/AssistedConstructor.java
@@ -18,7 +18,7 @@
 
 import com.google.inject.Inject;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.Lists;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/BindingCollector.java b/extensions/assistedinject/src/com/google/inject/assistedinject/BindingCollector.java
index e33e6db..3f8dedb 100644
--- a/extensions/assistedinject/src/com/google/inject/assistedinject/BindingCollector.java
+++ b/extensions/assistedinject/src/com/google/inject/assistedinject/BindingCollector.java
@@ -18,8 +18,8 @@
 import com.google.inject.ConfigurationException;
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Maps;
 import com.google.inject.spi.Message;
 import java.util.Collections;
 import java.util.Map;
diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java
index deab85f..8b336ee 100755
--- a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java
+++ b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java
@@ -26,10 +26,10 @@
 import com.google.inject.internal.BytecodeGen;
 import com.google.inject.internal.Errors;
 import com.google.inject.internal.ErrorsException;
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
 import com.google.inject.spi.Message;
diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java
index 282c9ca..101f798 100644
--- a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java
+++ b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java
@@ -31,14 +31,14 @@
 import com.google.inject.internal.BytecodeGen;
 import com.google.inject.internal.Errors;
 import com.google.inject.internal.ErrorsException;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.Iterables;
-import com.google.inject.internal.ToStringBuilder;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.Iterables;
+import com.google.inject.internal.util.ToStringBuilder;
 
-import static com.google.inject.internal.Iterables.getOnlyElement;
-import com.google.inject.internal.Lists;
-import static com.google.inject.internal.Preconditions.checkState;
+import static com.google.inject.internal.util.Iterables.getOnlyElement;
+import com.google.inject.internal.util.Lists;
+import static com.google.inject.internal.util.Preconditions.checkState;
 
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.InjectionPoint;
diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/Parameter.java b/extensions/assistedinject/src/com/google/inject/assistedinject/Parameter.java
index 4262615..dfb830d 100755
--- a/extensions/assistedinject/src/com/google/inject/assistedinject/Parameter.java
+++ b/extensions/assistedinject/src/com/google/inject/assistedinject/Parameter.java
@@ -21,7 +21,7 @@
 import com.google.inject.Key;
 import com.google.inject.Provider;
 import com.google.inject.internal.Annotations;
-import static com.google.inject.internal.Preconditions.checkArgument;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
diff --git a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryModuleBuilderTest.java b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryModuleBuilderTest.java
index 2227b0f..27abb78 100644
--- a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryModuleBuilderTest.java
+++ b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryModuleBuilderTest.java
@@ -24,7 +24,7 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Iterables;
+import com.google.inject.internal.util.Iterables;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
 import com.google.inject.spi.Message;
diff --git a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java
index cc77001..e3abf7c 100755
--- a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java
+++ b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java
@@ -27,7 +27,7 @@
 import com.google.inject.Key;
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
 import com.google.inject.spi.Dependency;
diff --git a/extensions/grapher/src/com/google/inject/grapher/GraphingVisitor.java b/extensions/grapher/src/com/google/inject/grapher/GraphingVisitor.java
index 85bb0ad..73098cb 100644
--- a/extensions/grapher/src/com/google/inject/grapher/GraphingVisitor.java
+++ b/extensions/grapher/src/com/google/inject/grapher/GraphingVisitor.java
@@ -20,7 +20,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Key;
 import com.google.inject.Provider;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.internal.Nullable;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.ConstructorBinding;
diff --git a/extensions/grapher/src/com/google/inject/grapher/InjectorGrapher.java b/extensions/grapher/src/com/google/inject/grapher/InjectorGrapher.java
index 6782f2a..c6a8fb0 100644
--- a/extensions/grapher/src/com/google/inject/grapher/InjectorGrapher.java
+++ b/extensions/grapher/src/com/google/inject/grapher/InjectorGrapher.java
@@ -21,7 +21,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.spi.BindingTargetVisitor;
 import java.io.IOException;
 import java.util.Collection;
diff --git a/extensions/grapher/src/com/google/inject/grapher/ShortNameFactory.java b/extensions/grapher/src/com/google/inject/grapher/ShortNameFactory.java
index 396691e..83c145a 100644
--- a/extensions/grapher/src/com/google/inject/grapher/ShortNameFactory.java
+++ b/extensions/grapher/src/com/google/inject/grapher/ShortNameFactory.java
@@ -18,10 +18,10 @@
 
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Join;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.Join;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.internal.ProviderMethod;
-import com.google.inject.internal.StackTraceElements;
+import com.google.inject.internal.util.StackTraceElements;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Member;
diff --git a/extensions/grapher/src/com/google/inject/grapher/TransitiveDependencyVisitor.java b/extensions/grapher/src/com/google/inject/grapher/TransitiveDependencyVisitor.java
index f7badae..62dcdd2 100644
--- a/extensions/grapher/src/com/google/inject/grapher/TransitiveDependencyVisitor.java
+++ b/extensions/grapher/src/com/google/inject/grapher/TransitiveDependencyVisitor.java
@@ -17,8 +17,8 @@
 package com.google.inject.grapher;
 
 import com.google.inject.Key;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.ConstructorBinding;
 import com.google.inject.spi.ConvertedConstantBinding;
diff --git a/extensions/grapher/src/com/google/inject/grapher/graphviz/BindingEdgeFactory.java b/extensions/grapher/src/com/google/inject/grapher/graphviz/BindingEdgeFactory.java
index 4c06509..68d61e7 100644
--- a/extensions/grapher/src/com/google/inject/grapher/graphviz/BindingEdgeFactory.java
+++ b/extensions/grapher/src/com/google/inject/grapher/graphviz/BindingEdgeFactory.java
@@ -18,7 +18,7 @@
 
 import com.google.inject.Inject;
 import com.google.inject.grapher.BindingEdge;
-import com.google.inject.internal.ImmutableList;
+import com.google.inject.internal.util.ImmutableList;
 
 /**
  * Graphviz-specific implementation of {@link BindingEdge.Factory}. Uses a
diff --git a/extensions/grapher/src/com/google/inject/grapher/graphviz/DependencyEdgeFactory.java b/extensions/grapher/src/com/google/inject/grapher/graphviz/DependencyEdgeFactory.java
index 008cea8..ca82c92 100644
--- a/extensions/grapher/src/com/google/inject/grapher/graphviz/DependencyEdgeFactory.java
+++ b/extensions/grapher/src/com/google/inject/grapher/graphviz/DependencyEdgeFactory.java
@@ -18,7 +18,7 @@
 
 import com.google.inject.Inject;
 import com.google.inject.grapher.DependencyEdge;
-import com.google.inject.internal.ImmutableList;
+import com.google.inject.internal.util.ImmutableList;
 import com.google.inject.spi.InjectionPoint;
 
 /**
diff --git a/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizEdge.java b/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizEdge.java
index 0692e34..aab1cb8 100644
--- a/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizEdge.java
+++ b/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizEdge.java
@@ -16,7 +16,7 @@
 
 package com.google.inject.grapher.graphviz;
 
-import com.google.inject.internal.ImmutableList;
+import com.google.inject.internal.util.ImmutableList;
 import java.util.List;
 
 /**
diff --git a/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizNode.java b/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizNode.java
index a8c0d86..9b06ba6 100644
--- a/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizNode.java
+++ b/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizNode.java
@@ -16,9 +16,9 @@
 
 package com.google.inject.grapher.graphviz;
 
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.Maps;
 import java.util.List;
 import java.util.Map;
 
diff --git a/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizRenderer.java b/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizRenderer.java
index 0918527..7d01f5f 100644
--- a/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizRenderer.java
+++ b/extensions/grapher/src/com/google/inject/grapher/graphviz/GraphvizRenderer.java
@@ -19,9 +19,9 @@
 import com.google.inject.grapher.ImplementationNode;
 import com.google.inject.grapher.NodeAliasFactory;
 import com.google.inject.grapher.Renderer;
-import com.google.inject.internal.Join;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.Join;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
 import java.io.PrintWriter;
 import java.util.List;
 import java.util.Map;
diff --git a/extensions/grapher/test/com/google/inject/grapher/GraphingVisitorTest.java b/extensions/grapher/test/com/google/inject/grapher/GraphingVisitorTest.java
index 8450a38..8b4ce45 100644
--- a/extensions/grapher/test/com/google/inject/grapher/GraphingVisitorTest.java
+++ b/extensions/grapher/test/com/google/inject/grapher/GraphingVisitorTest.java
@@ -21,8 +21,8 @@
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.ConstructorBinding;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
diff --git a/extensions/grapher/test/com/google/inject/grapher/ShortNameFactoryTest.java b/extensions/grapher/test/com/google/inject/grapher/ShortNameFactoryTest.java
index 8907ee3..97772d2 100644
--- a/extensions/grapher/test/com/google/inject/grapher/ShortNameFactoryTest.java
+++ b/extensions/grapher/test/com/google/inject/grapher/ShortNameFactoryTest.java
@@ -27,7 +27,7 @@
 import com.google.inject.Provides;
 import com.google.inject.TypeLiteral;
 import com.google.inject.internal.ProviderMethod;
-import com.google.inject.internal.StackTraceElements;
+import com.google.inject.internal.util.StackTraceElements;
 import com.google.inject.name.Names;
 import com.google.inject.spi.DefaultBindingTargetVisitor;
 import com.google.inject.spi.ProviderInstanceBinding;
diff --git a/extensions/grapher/test/com/google/inject/grapher/TransitiveDependencyVisitorTest.java b/extensions/grapher/test/com/google/inject/grapher/TransitiveDependencyVisitorTest.java
index e124e62..8e896f7 100644
--- a/extensions/grapher/test/com/google/inject/grapher/TransitiveDependencyVisitorTest.java
+++ b/extensions/grapher/test/com/google/inject/grapher/TransitiveDependencyVisitorTest.java
@@ -24,7 +24,7 @@
 import com.google.inject.Module;
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.name.Names;
 import com.google.inject.spi.ConstructorBinding;
 import com.google.inject.spi.ConvertedConstantBinding;
diff --git a/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java b/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
index 6c9993f..072996a 100644
--- a/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
+++ b/extensions/multibindings/src/com/google/inject/multibindings/MapBinder.java
@@ -24,8 +24,8 @@
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
 import com.google.inject.binder.LinkedBindingBuilder;
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.multibindings.Multibinder.RealMultibinder;
 import static com.google.inject.multibindings.Multibinder.checkConfiguration;
 import static com.google.inject.multibindings.Multibinder.checkNotNull;
diff --git a/extensions/multibindings/src/com/google/inject/multibindings/Multibinder.java b/extensions/multibindings/src/com/google/inject/multibindings/Multibinder.java
index b846e04..bc01134 100644
--- a/extensions/multibindings/src/com/google/inject/multibindings/Multibinder.java
+++ b/extensions/multibindings/src/com/google/inject/multibindings/Multibinder.java
@@ -29,10 +29,11 @@
 import com.google.inject.binder.LinkedBindingBuilder;
 import com.google.inject.internal.Annotations;
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
 import static com.google.inject.name.Names.named;
+
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
 import com.google.inject.spi.Message;
diff --git a/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java b/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
index 3ba1252..36acb19 100644
--- a/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
+++ b/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
@@ -34,8 +34,8 @@
 import com.google.inject.ProvisionException;
 import com.google.inject.Stage;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Maps;
 import com.google.inject.name.Names;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
diff --git a/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java b/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java
index 0cab926..47a6ead 100644
--- a/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java
+++ b/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java
@@ -19,7 +19,6 @@
 import com.google.inject.AbstractModule;
 import static com.google.inject.Asserts.assertContains;
 
-import com.google.inject.Binder;
 import com.google.inject.Binding;
 import com.google.inject.BindingAnnotation;
 import com.google.inject.CreationException;
@@ -32,9 +31,9 @@
 import com.google.inject.ProvisionException;
 import com.google.inject.Stage;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.name.Names;
 import static com.google.inject.name.Names.named;
 import com.google.inject.spi.Dependency;
diff --git a/extensions/persist/src/com/google/inject/persist/PersistModule.java b/extensions/persist/src/com/google/inject/persist/PersistModule.java
index d8d5956..409d3b6 100644
--- a/extensions/persist/src/com/google/inject/persist/PersistModule.java
+++ b/extensions/persist/src/com/google/inject/persist/PersistModule.java
@@ -2,7 +2,7 @@
 
 import com.google.inject.AbstractModule;
 import com.google.inject.BindingAnnotation;
-import com.google.inject.internal.Preconditions;
+import com.google.inject.internal.util.Preconditions;
 import com.google.inject.persist.jpa.InternalJpaModule;
 import com.google.inject.servlet.ServletModule;
 import java.lang.annotation.Retention;
diff --git a/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerFactoryProvider.java b/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerFactoryProvider.java
index 8aed0f2..738ad9f 100644
--- a/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerFactoryProvider.java
+++ b/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerFactoryProvider.java
@@ -20,7 +20,7 @@
 import com.google.inject.Provider;

 import com.google.inject.Singleton;

 import com.google.inject.internal.Nullable;

-import com.google.inject.internal.Preconditions;

+import com.google.inject.internal.util.Preconditions;

 import com.google.inject.persist.PersistModule;

 import com.google.inject.persist.PersistenceService;

 import java.util.Properties;

diff --git a/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerProvider.java b/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerProvider.java
index 7644a3a..82f71f4 100644
--- a/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerProvider.java
+++ b/extensions/persist/src/com/google/inject/persist/jpa/EntityManagerProvider.java
@@ -19,7 +19,7 @@
 import com.google.inject.Inject;

 import com.google.inject.Provider;

 import com.google.inject.Singleton;

-import com.google.inject.internal.Preconditions;

+import com.google.inject.internal.util.Preconditions;

 import com.google.inject.persist.WorkManager;

 import javax.persistence.EntityManager;

 import javax.persistence.EntityManagerFactory;

diff --git a/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java b/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
index c23d767..4eadf1e 100644
--- a/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
+++ b/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
@@ -23,7 +23,7 @@
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
 import com.google.inject.binder.ScopedBindingBuilder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.internal.UniqueAnnotations;
 import com.google.inject.util.Types;
 import java.lang.annotation.Annotation;
diff --git a/lifecycle/src/com/google/inject/lifecycle/BroadcastingLifecycle.java b/lifecycle/src/com/google/inject/lifecycle/BroadcastingLifecycle.java
index 0368185..fe4479d 100644
--- a/lifecycle/src/com/google/inject/lifecycle/BroadcastingLifecycle.java
+++ b/lifecycle/src/com/google/inject/lifecycle/BroadcastingLifecycle.java
@@ -6,9 +6,9 @@
 import com.google.inject.Key;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Preconditions;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Preconditions;
 import com.google.inject.matcher.Matcher;
 import static com.google.inject.matcher.Matchers.any;
 import java.lang.reflect.Method;
diff --git a/lifecycle/src/com/google/inject/lifecycle/LifecycleModule.java b/lifecycle/src/com/google/inject/lifecycle/LifecycleModule.java
index 7c780bf..f6b8e98 100644
--- a/lifecycle/src/com/google/inject/lifecycle/LifecycleModule.java
+++ b/lifecycle/src/com/google/inject/lifecycle/LifecycleModule.java
@@ -2,8 +2,8 @@
 
 import com.google.inject.AbstractModule;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
 import java.util.List;
 
 /**
diff --git a/servlet/src/com/google/inject/servlet/FilterDefinition.java b/servlet/src/com/google/inject/servlet/FilterDefinition.java
index 8097713..b7e185a 100755
--- a/servlet/src/com/google/inject/servlet/FilterDefinition.java
+++ b/servlet/src/com/google/inject/servlet/FilterDefinition.java
@@ -18,7 +18,7 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.Scopes;
-import com.google.inject.internal.Iterators;
+import com.google.inject.internal.util.Iterators;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.Enumeration;
diff --git a/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java b/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java
index 68797ef..afc471f 100755
--- a/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java
+++ b/servlet/src/com/google/inject/servlet/FiltersModuleBuilder.java
@@ -18,7 +18,7 @@
 import com.google.inject.AbstractModule;
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.internal.UniqueAnnotations;
 import java.util.HashMap;
 import java.util.List;
diff --git a/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java b/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
index 56df560..2cf573d 100755
--- a/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
+++ b/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
@@ -22,9 +22,9 @@
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Sets;
 import java.io.IOException;
 import java.util.List;
 import java.util.Set;
diff --git a/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java b/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
index 650e7b1..d3cb0ab 100755
--- a/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
+++ b/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
@@ -21,10 +21,10 @@
 import com.google.inject.Key;
 import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Preconditions;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Preconditions;
+import com.google.inject.internal.util.Sets;
 import java.io.IOException;
 import java.util.List;
 import java.util.Set;
diff --git a/servlet/src/com/google/inject/servlet/ServletDefinition.java b/servlet/src/com/google/inject/servlet/ServletDefinition.java
index a4ef7e2..941b8ad 100755
--- a/servlet/src/com/google/inject/servlet/ServletDefinition.java
+++ b/servlet/src/com/google/inject/servlet/ServletDefinition.java
@@ -18,7 +18,7 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.Scopes;
-import com.google.inject.internal.Iterators;
+import com.google.inject.internal.util.Iterators;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.Enumeration;
diff --git a/servlet/src/com/google/inject/servlet/ServletModule.java b/servlet/src/com/google/inject/servlet/ServletModule.java
index bd846f6..f75659f 100644
--- a/servlet/src/com/google/inject/servlet/ServletModule.java
+++ b/servlet/src/com/google/inject/servlet/ServletModule.java
@@ -18,7 +18,7 @@
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Key;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.Lists;
 import java.util.Map;
 import javax.servlet.Filter;
 import javax.servlet.ServletContext;
diff --git a/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java b/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java
index 47af60e..bf9f407 100755
--- a/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java
+++ b/servlet/src/com/google/inject/servlet/ServletsModuleBuilder.java
@@ -18,8 +18,8 @@
 import com.google.inject.AbstractModule;
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.internal.UniqueAnnotations;
 import java.util.HashMap;
 import java.util.List;
diff --git a/servlet/test/com/google/inject/servlet/FilterDefinitionTest.java b/servlet/test/com/google/inject/servlet/FilterDefinitionTest.java
index 8436737..4729972 100644
--- a/servlet/test/com/google/inject/servlet/FilterDefinitionTest.java
+++ b/servlet/test/com/google/inject/servlet/FilterDefinitionTest.java
@@ -3,8 +3,8 @@
 import com.google.inject.Binding;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.spi.BindingScopingVisitor;
 import java.io.IOException;
 import java.util.Enumeration;
diff --git a/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java b/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
index 0c7d50f..bdc69c4 100644
--- a/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
+++ b/servlet/test/com/google/inject/servlet/ServletDefinitionPathsTest.java
@@ -19,8 +19,8 @@
 import com.google.inject.Binding;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.spi.BindingScopingVisitor;
 import java.io.IOException;
 import java.util.HashMap;
diff --git a/servlet/test/com/google/inject/servlet/ServletDefinitionTest.java b/servlet/test/com/google/inject/servlet/ServletDefinitionTest.java
index 7219e77..0c6af1c 100644
--- a/servlet/test/com/google/inject/servlet/ServletDefinitionTest.java
+++ b/servlet/test/com/google/inject/servlet/ServletDefinitionTest.java
@@ -20,8 +20,8 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.spi.BindingScopingVisitor;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Sets;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
diff --git a/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java b/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
index c35391c..e8d3be8 100644
--- a/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
+++ b/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
@@ -20,9 +20,9 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.spi.BindingScopingVisitor;
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/servlet/test/com/google/inject/servlet/ServletTest.java b/servlet/test/com/google/inject/servlet/ServletTest.java
index cb6ebfa..ce4ef29 100644
--- a/servlet/test/com/google/inject/servlet/ServletTest.java
+++ b/servlet/test/com/google/inject/servlet/ServletTest.java
@@ -23,7 +23,7 @@
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.Maps;
 import static com.google.inject.servlet.ServletScopes.NullObject;
 import com.google.inject.util.Providers;
 import java.io.IOException;
diff --git a/spring/src/com/google/inject/spring/SpringIntegration.java b/spring/src/com/google/inject/spring/SpringIntegration.java
index 6319b95..7e23cb8 100644
--- a/spring/src/com/google/inject/spring/SpringIntegration.java
+++ b/spring/src/com/google/inject/spring/SpringIntegration.java
@@ -19,7 +19,7 @@
 import com.google.inject.Binder;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.name.Names;
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.ListableBeanFactory;
diff --git a/src/com/google/inject/AbstractModule.java b/src/com/google/inject/AbstractModule.java
index 08d89b7..4408589 100644
--- a/src/com/google/inject/AbstractModule.java
+++ b/src/com/google/inject/AbstractModule.java
@@ -19,8 +19,8 @@
 import com.google.inject.binder.AnnotatedBindingBuilder;
 import com.google.inject.binder.AnnotatedConstantBindingBuilder;
 import com.google.inject.binder.LinkedBindingBuilder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import static com.google.inject.internal.Preconditions.checkState;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkState;
 import com.google.inject.matcher.Matcher;
 import com.google.inject.spi.Message;
 import com.google.inject.spi.TypeConverter;
diff --git a/src/com/google/inject/ConfigurationException.java b/src/com/google/inject/ConfigurationException.java
index 458b2e1..4b94a50 100644
--- a/src/com/google/inject/ConfigurationException.java
+++ b/src/com/google/inject/ConfigurationException.java
@@ -17,8 +17,8 @@
 package com.google.inject;
 
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableSet;
-import static com.google.inject.internal.Preconditions.checkState;
+import com.google.inject.internal.util.ImmutableSet;
+import static com.google.inject.internal.util.Preconditions.checkState;
 import com.google.inject.spi.Message;
 import java.util.Collection;
 
diff --git a/src/com/google/inject/CreationException.java b/src/com/google/inject/CreationException.java
index a3b19b4..e031a61 100644
--- a/src/com/google/inject/CreationException.java
+++ b/src/com/google/inject/CreationException.java
@@ -17,8 +17,8 @@
 package com.google.inject;
 
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableSet;
-import static com.google.inject.internal.Preconditions.checkArgument;
+import com.google.inject.internal.util.ImmutableSet;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
 import com.google.inject.spi.Message;
 import java.util.Collection;
 
diff --git a/src/com/google/inject/InjectorBuilder.java b/src/com/google/inject/InjectorBuilder.java
index faeb99e..41753a0 100644
--- a/src/com/google/inject/InjectorBuilder.java
+++ b/src/com/google/inject/InjectorBuilder.java
@@ -1,10 +1,9 @@
 package com.google.inject;
 
+import com.google.inject.internal.InternalInjectorCreator;
 import java.lang.reflect.Proxy;
 import java.util.Arrays;
 
-import com.google.inject.internal.InternalInjectorCreator;
-
 /**
  * The advanced entry point to the Guice framework. Creates {@link Injector}s from
  * {@link Module}s, allowing many options to be configured for the Injector.
diff --git a/src/com/google/inject/Key.java b/src/com/google/inject/Key.java
index 0578743..6ee1553 100644
--- a/src/com/google/inject/Key.java
+++ b/src/com/google/inject/Key.java
@@ -18,9 +18,8 @@
 
 import com.google.inject.internal.Annotations;
 import com.google.inject.internal.MoreTypes;
-
-import static com.google.inject.internal.Preconditions.checkArgument;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
diff --git a/src/com/google/inject/PrivateModule.java b/src/com/google/inject/PrivateModule.java
index 40a80cd..26aae84 100644
--- a/src/com/google/inject/PrivateModule.java
+++ b/src/com/google/inject/PrivateModule.java
@@ -20,7 +20,7 @@
 import com.google.inject.binder.AnnotatedConstantBindingBuilder;
 import com.google.inject.binder.AnnotatedElementBuilder;
 import com.google.inject.binder.LinkedBindingBuilder;
-import static com.google.inject.internal.Preconditions.checkState;
+import static com.google.inject.internal.util.Preconditions.checkState;
 import com.google.inject.matcher.Matcher;
 import com.google.inject.spi.Message;
 import com.google.inject.spi.TypeConverter;
diff --git a/src/com/google/inject/ProvisionException.java b/src/com/google/inject/ProvisionException.java
index 8f529d8..e3ce9e1 100644
--- a/src/com/google/inject/ProvisionException.java
+++ b/src/com/google/inject/ProvisionException.java
@@ -17,9 +17,9 @@
 package com.google.inject;
 
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableSet;
-import static com.google.inject.internal.Preconditions.checkArgument;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
 import com.google.inject.spi.Message;
 import java.util.Collection;
 
diff --git a/src/com/google/inject/Scopes.java b/src/com/google/inject/Scopes.java
index c96a577..d10a657 100644
--- a/src/com/google/inject/Scopes.java
+++ b/src/com/google/inject/Scopes.java
@@ -16,12 +16,11 @@
 
 package com.google.inject;
 
-import java.lang.annotation.Annotation;
-
 import com.google.inject.internal.CircularDependencyProxy;
 import com.google.inject.internal.InternalInjectorCreator;
 import com.google.inject.internal.LinkedBindingImpl;
 import com.google.inject.spi.BindingScopingVisitor;
+import java.lang.annotation.Annotation;
 
 /**
  * Built-in scope implementations.
diff --git a/src/com/google/inject/TypeLiteral.java b/src/com/google/inject/TypeLiteral.java
index 27dc48b..75008bd 100644
--- a/src/com/google/inject/TypeLiteral.java
+++ b/src/com/google/inject/TypeLiteral.java
@@ -16,11 +16,11 @@
 
 package com.google.inject;
 
-import com.google.inject.internal.ImmutableList;
 import com.google.inject.internal.MoreTypes;
 import static com.google.inject.internal.MoreTypes.canonicalize;
-import static com.google.inject.internal.Preconditions.checkArgument;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.ImmutableList;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.util.Types;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
diff --git a/src/com/google/inject/internal/AbstractBindingBuilder.java b/src/com/google/inject/internal/AbstractBindingBuilder.java
index 278fc21..e6c997f 100644
--- a/src/com/google/inject/internal/AbstractBindingBuilder.java
+++ b/src/com/google/inject/internal/AbstractBindingBuilder.java
@@ -19,7 +19,7 @@
 import com.google.inject.Binder;
 import com.google.inject.Key;
 import com.google.inject.Scope;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.InstanceBinding;
 import java.lang.annotation.Annotation;
diff --git a/src/com/google/inject/internal/Annotations.java b/src/com/google/inject/internal/Annotations.java
index d76d32a..9b93983 100644
--- a/src/com/google/inject/internal/Annotations.java
+++ b/src/com/google/inject/internal/Annotations.java
@@ -20,9 +20,9 @@
 import com.google.inject.Key;
 import com.google.inject.ScopeAnnotation;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.Classes;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
-
 import java.lang.annotation.Annotation;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/src/com/google/inject/internal/BindingBuilder.java b/src/com/google/inject/internal/BindingBuilder.java
index 692982f..fa273e4 100644
--- a/src/com/google/inject/internal/BindingBuilder.java
+++ b/src/com/google/inject/internal/BindingBuilder.java
@@ -23,7 +23,8 @@
 import com.google.inject.TypeLiteral;
 import com.google.inject.binder.AnnotatedBindingBuilder;
 import com.google.inject.binder.ScopedBindingBuilder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.ImmutableSet;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.InjectionPoint;
 import com.google.inject.spi.Message;
diff --git a/src/com/google/inject/internal/BindingImpl.java b/src/com/google/inject/internal/BindingImpl.java
index 72d4ec2..8ae7586 100644
--- a/src/com/google/inject/internal/BindingImpl.java
+++ b/src/com/google/inject/internal/BindingImpl.java
@@ -19,6 +19,7 @@
 import com.google.inject.Binding;
 import com.google.inject.Key;
 import com.google.inject.Provider;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingScopingVisitor;
 import com.google.inject.spi.ElementVisitor;
 import com.google.inject.spi.InstanceBinding;
diff --git a/src/com/google/inject/internal/BindingProcessor.java b/src/com/google/inject/internal/BindingProcessor.java
index dfeb499..38af5c0 100644
--- a/src/com/google/inject/internal/BindingProcessor.java
+++ b/src/com/google/inject/internal/BindingProcessor.java
@@ -26,6 +26,8 @@
 import com.google.inject.Provider;
 import com.google.inject.Scope;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.ConstructorBinding;
 import com.google.inject.spi.ConvertedConstantBinding;
diff --git a/src/com/google/inject/internal/BytecodeGen.java b/src/com/google/inject/internal/BytecodeGen.java
index 7f961d8..2c61232 100644
--- a/src/com/google/inject/internal/BytecodeGen.java
+++ b/src/com/google/inject/internal/BytecodeGen.java
@@ -16,6 +16,8 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.MapMaker;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
diff --git a/src/com/google/inject/internal/ConstantBindingBuilderImpl.java b/src/com/google/inject/internal/ConstantBindingBuilderImpl.java
index 5b2dd00..11b237e 100644
--- a/src/com/google/inject/internal/ConstantBindingBuilderImpl.java
+++ b/src/com/google/inject/internal/ConstantBindingBuilderImpl.java
@@ -20,6 +20,7 @@
 import com.google.inject.Key;
 import com.google.inject.binder.AnnotatedConstantBindingBuilder;
 import com.google.inject.binder.ConstantBindingBuilder;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.InjectionPoint;
 import java.lang.annotation.Annotation;
diff --git a/src/com/google/inject/internal/ConstantFactory.java b/src/com/google/inject/internal/ConstantFactory.java
index 9787569..5e15b88 100644
--- a/src/com/google/inject/internal/ConstantFactory.java
+++ b/src/com/google/inject/internal/ConstantFactory.java
@@ -16,6 +16,7 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.Dependency;
 
 /**
diff --git a/src/com/google/inject/internal/ConstructionProxy.java b/src/com/google/inject/internal/ConstructionProxy.java
index fe3eb22..930d660 100644
--- a/src/com/google/inject/internal/ConstructionProxy.java
+++ b/src/com/google/inject/internal/ConstructionProxy.java
@@ -16,11 +16,13 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.internal.util.ImmutableMap;
 import com.google.inject.spi.InjectionPoint;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.List;
+import org.aopalliance.intercept.MethodInterceptor;
 
 /**
  * Proxies calls to a {@link java.lang.reflect.Constructor} for a class
@@ -50,6 +52,6 @@
   /**
    * Returns the interceptors applied to each method, in order of invocation.
    */
-  ImmutableMap<Method, List<org.aopalliance.intercept.MethodInterceptor>> getMethodInterceptors();
+  ImmutableMap<Method, List<MethodInterceptor>> getMethodInterceptors();
   /*end[AOP]*/
 }
diff --git a/src/com/google/inject/internal/ConstructorBindingImpl.java b/src/com/google/inject/internal/ConstructorBindingImpl.java
index f01a95d..03c47c6 100644
--- a/src/com/google/inject/internal/ConstructorBindingImpl.java
+++ b/src/com/google/inject/internal/ConstructorBindingImpl.java
@@ -21,7 +21,11 @@
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
 import static com.google.inject.internal.Annotations.findScopeAnnotation;
-import static com.google.inject.internal.Preconditions.checkState;
+import com.google.inject.internal.util.Classes;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Objects;
+import static com.google.inject.internal.util.Preconditions.checkState;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.ConstructorBinding;
 import com.google.inject.spi.Dependency;
diff --git a/src/com/google/inject/internal/ConstructorInjector.java b/src/com/google/inject/internal/ConstructorInjector.java
index 1f8d65d..5cf6175 100644
--- a/src/com/google/inject/internal/ConstructorInjector.java
+++ b/src/com/google/inject/internal/ConstructorInjector.java
@@ -16,6 +16,7 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.spi.InjectionPoint;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Set;
diff --git a/src/com/google/inject/internal/ConstructorInjectorStore.java b/src/com/google/inject/internal/ConstructorInjectorStore.java
index 7ea52fa..77cdbdc 100644
--- a/src/com/google/inject/internal/ConstructorInjectorStore.java
+++ b/src/com/google/inject/internal/ConstructorInjectorStore.java
@@ -16,7 +16,8 @@
 
 package com.google.inject.internal;
 
-import static com.google.inject.internal.Iterables.concat;
+import com.google.inject.internal.util.ImmutableList;
+import static com.google.inject.internal.util.Iterables.concat;
 import com.google.inject.spi.InjectionPoint;
 
 /**
diff --git a/src/com/google/inject/internal/DefaultConstructionProxyFactory.java b/src/com/google/inject/internal/DefaultConstructionProxyFactory.java
index 505ffa8..c654bbc 100644
--- a/src/com/google/inject/internal/DefaultConstructionProxyFactory.java
+++ b/src/com/google/inject/internal/DefaultConstructionProxyFactory.java
@@ -17,12 +17,14 @@
 package com.google.inject.internal;
 
 import com.google.inject.internal.BytecodeGen.Visibility;
+import com.google.inject.internal.util.ImmutableMap;
 import com.google.inject.spi.InjectionPoint;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.List;
+import org.aopalliance.intercept.MethodInterceptor;
 
 /**
  * Produces construction proxies that invoke the class constructor.
@@ -95,7 +97,7 @@
         return constructor;
       }
       /*if[AOP]*/
-      public ImmutableMap<Method, List<org.aopalliance.intercept.MethodInterceptor>>
+      public ImmutableMap<Method, List<MethodInterceptor>>
           getMethodInterceptors() {
         return ImmutableMap.of();
       }
diff --git a/src/com/google/inject/internal/DeferredLookups.java b/src/com/google/inject/internal/DeferredLookups.java
index ee54507..a4047cf 100644
--- a/src/com/google/inject/internal/DeferredLookups.java
+++ b/src/com/google/inject/internal/DeferredLookups.java
@@ -20,6 +20,7 @@
 import com.google.inject.MembersInjector;
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.MembersInjectorLookup;
 import com.google.inject.spi.ProviderLookup;
diff --git a/src/com/google/inject/internal/DelegatingInvocationHandler.java b/src/com/google/inject/internal/DelegatingInvocationHandler.java
index 435c8fb..3c9201f 100644
--- a/src/com/google/inject/internal/DelegatingInvocationHandler.java
+++ b/src/com/google/inject/internal/DelegatingInvocationHandler.java
@@ -17,8 +17,8 @@
 package com.google.inject.internal;
 
 import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 
 class DelegatingInvocationHandler<T> implements InvocationHandler {
 
diff --git a/src/com/google/inject/internal/EncounterImpl.java b/src/com/google/inject/internal/EncounterImpl.java
index 8fce696..16441f9 100644
--- a/src/com/google/inject/internal/EncounterImpl.java
+++ b/src/com/google/inject/internal/EncounterImpl.java
@@ -20,7 +20,9 @@
 import com.google.inject.MembersInjector;
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkState;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
+import static com.google.inject.internal.util.Preconditions.checkState;
 import com.google.inject.matcher.Matcher;
 import com.google.inject.matcher.Matchers;
 import com.google.inject.spi.InjectionListener;
diff --git a/src/com/google/inject/internal/Errors.java b/src/com/google/inject/internal/Errors.java
index 40f23de..b85a9df 100644
--- a/src/com/google/inject/internal/Errors.java
+++ b/src/com/google/inject/internal/Errors.java
@@ -24,6 +24,11 @@
 import com.google.inject.ProvisionException;
 import com.google.inject.Scope;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.SourceProvider;
+import com.google.inject.internal.util.StackTraceElements;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.InjectionListener;
 import com.google.inject.spi.InjectionPoint;
diff --git a/src/com/google/inject/internal/ExposedBindingImpl.java b/src/com/google/inject/internal/ExposedBindingImpl.java
index d11fe00..92c1c23 100644
--- a/src/com/google/inject/internal/ExposedBindingImpl.java
+++ b/src/com/google/inject/internal/ExposedBindingImpl.java
@@ -19,6 +19,8 @@
 import com.google.inject.Binder;
 import com.google.inject.Injector;
 import com.google.inject.Key;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.ExposedBinding;
diff --git a/src/com/google/inject/internal/ExposureBuilder.java b/src/com/google/inject/internal/ExposureBuilder.java
index 61b000a..f5c943c 100644
--- a/src/com/google/inject/internal/ExposureBuilder.java
+++ b/src/com/google/inject/internal/ExposureBuilder.java
@@ -16,9 +16,10 @@
 
 package com.google.inject.internal;
 
-import com.google.inject.binder.AnnotatedElementBuilder;
 import com.google.inject.Binder;
 import com.google.inject.Key;
+import com.google.inject.binder.AnnotatedElementBuilder;
+import com.google.inject.internal.util.Preconditions;
 import java.lang.annotation.Annotation;
 
 /**
@@ -42,13 +43,13 @@
   }
 
   public void annotatedWith(Class<? extends Annotation> annotationType) {
-    com.google.inject.internal.Preconditions.checkNotNull(annotationType, "annotationType");
+    Preconditions.checkNotNull(annotationType, "annotationType");
     checkNotAnnotated();
     key = Key.get(key.getTypeLiteral(), annotationType);
   }
 
   public void annotatedWith(Annotation annotation) {
-    com.google.inject.internal.Preconditions.checkNotNull(annotation, "annotation");
+    Preconditions.checkNotNull(annotation, "annotation");
     checkNotAnnotated();
     key = Key.get(key.getTypeLiteral(), annotation);
   }
diff --git a/src/com/google/inject/internal/FactoryProxy.java b/src/com/google/inject/internal/FactoryProxy.java
index ab73b49..ca9a33c 100644
--- a/src/com/google/inject/internal/FactoryProxy.java
+++ b/src/com/google/inject/internal/FactoryProxy.java
@@ -18,6 +18,7 @@
 
 import com.google.inject.Key;
 import com.google.inject.internal.InjectorImpl.JitLimitation;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.Dependency;
 
 /**
diff --git a/src/com/google/inject/internal/FailableCache.java b/src/com/google/inject/internal/FailableCache.java
index fea8cda..eca27e4 100644
--- a/src/com/google/inject/internal/FailableCache.java
+++ b/src/com/google/inject/internal/FailableCache.java
@@ -16,6 +16,7 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.internal.util.MapMaker;
 import java.util.Map;
 
 /**
diff --git a/src/com/google/inject/internal/InheritingState.java b/src/com/google/inject/internal/InheritingState.java
index 8bca3e4..4050b1e 100644
--- a/src/com/google/inject/internal/InheritingState.java
+++ b/src/com/google/inject/internal/InheritingState.java
@@ -20,7 +20,10 @@
 import com.google.inject.Key;
 import com.google.inject.Scope;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.TypeListenerBinding;
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
diff --git a/src/com/google/inject/internal/Initializer.java b/src/com/google/inject/internal/Initializer.java
index ee15fc4..e78f665 100644
--- a/src/com/google/inject/internal/Initializer.java
+++ b/src/com/google/inject/internal/Initializer.java
@@ -18,7 +18,9 @@
 
 import com.google.inject.Stage;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.InjectionPoint;
 import java.util.Map;
 import java.util.Set;
diff --git a/src/com/google/inject/internal/InjectionRequestProcessor.java b/src/com/google/inject/internal/InjectionRequestProcessor.java
index aff4f6f..d0b5a7c 100644
--- a/src/com/google/inject/internal/InjectionRequestProcessor.java
+++ b/src/com/google/inject/internal/InjectionRequestProcessor.java
@@ -18,6 +18,8 @@
 
 import com.google.inject.ConfigurationException;
 import com.google.inject.Stage;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.InjectionPoint;
 import com.google.inject.spi.InjectionRequest;
 import com.google.inject.spi.StaticInjectionRequest;
diff --git a/src/com/google/inject/internal/InjectorImpl.java b/src/com/google/inject/internal/InjectorImpl.java
index 34a00af..b9a78eb 100644
--- a/src/com/google/inject/internal/InjectorImpl.java
+++ b/src/com/google/inject/internal/InjectorImpl.java
@@ -31,6 +31,14 @@
 import com.google.inject.Scope;
 import com.google.inject.TypeLiteral;
 import com.google.inject.internal.InternalInjectorCreator.InjectorOptions;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Objects;
+import com.google.inject.internal.util.SourceProvider;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.ConvertedConstantBinding;
 import com.google.inject.spi.Dependency;
@@ -268,7 +276,7 @@
         Initializables.of(membersInjector));
 
 
-    return new InstanceBindingImpl<MembersInjector<T>>(this, key, SourceProvider.UNKNOWN_SOURCE, 
+    return new InstanceBindingImpl<MembersInjector<T>>(this, key, SourceProvider.UNKNOWN_SOURCE,
         factory, ImmutableSet.<InjectionPoint>of(), membersInjector);
   }
 
diff --git a/src/com/google/inject/internal/InjectorShell.java b/src/com/google/inject/internal/InjectorShell.java
index 172a170..87c6a9a 100644
--- a/src/com/google/inject/internal/InjectorShell.java
+++ b/src/com/google/inject/internal/InjectorShell.java
@@ -24,10 +24,13 @@
 import static com.google.inject.Scopes.SINGLETON;
 import com.google.inject.Singleton;
 import com.google.inject.Stage;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import static com.google.inject.internal.Preconditions.checkState;
-
 import com.google.inject.internal.InternalInjectorCreator.InjectorOptions;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkState;
+import com.google.inject.internal.util.SourceProvider;
+import com.google.inject.internal.util.Stopwatch;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.Elements;
diff --git a/src/com/google/inject/internal/InstanceBindingImpl.java b/src/com/google/inject/internal/InstanceBindingImpl.java
index e9fd26a..77b8e8d 100644
--- a/src/com/google/inject/internal/InstanceBindingImpl.java
+++ b/src/com/google/inject/internal/InstanceBindingImpl.java
@@ -19,6 +19,9 @@
 import com.google.inject.Binder;
 import com.google.inject.Key;
 import com.google.inject.Provider;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Objects;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
diff --git a/src/com/google/inject/internal/InternalContext.java b/src/com/google/inject/internal/InternalContext.java
index c772910..36bc41a 100644
--- a/src/com/google/inject/internal/InternalContext.java
+++ b/src/com/google/inject/internal/InternalContext.java
@@ -16,6 +16,7 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.internal.util.Maps;
 import com.google.inject.spi.Dependency;
 import java.util.Map;
 
diff --git a/src/com/google/inject/internal/InternalFactoryToProviderAdapter.java b/src/com/google/inject/internal/InternalFactoryToProviderAdapter.java
index c5d41cf..87d6862 100644
--- a/src/com/google/inject/internal/InternalFactoryToProviderAdapter.java
+++ b/src/com/google/inject/internal/InternalFactoryToProviderAdapter.java
@@ -17,7 +17,7 @@
 package com.google.inject.internal;
 
 import com.google.inject.Provider;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.Dependency;
 
 /**
diff --git a/src/com/google/inject/internal/InternalInjectorCreator.java b/src/com/google/inject/internal/InternalInjectorCreator.java
index 3e491c0..44f0065 100644
--- a/src/com/google/inject/internal/InternalInjectorCreator.java
+++ b/src/com/google/inject/internal/InternalInjectorCreator.java
@@ -22,16 +22,18 @@
 import com.google.inject.MembersInjector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
+import com.google.inject.Scope;
 import com.google.inject.Stage;
 import com.google.inject.TypeLiteral;
-import com.google.inject.Scope;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Iterables;
+import com.google.inject.internal.util.Stopwatch;
 import com.google.inject.spi.Dependency;
-
+import java.lang.annotation.Annotation;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.lang.annotation.Annotation;
 
 /**
  * Builds a tree of injectors. This is a primary injector, plus child injectors needed for each
diff --git a/src/com/google/inject/internal/LinkedBindingImpl.java b/src/com/google/inject/internal/LinkedBindingImpl.java
index efeb723..e306c84 100644
--- a/src/com/google/inject/internal/LinkedBindingImpl.java
+++ b/src/com/google/inject/internal/LinkedBindingImpl.java
@@ -16,14 +16,16 @@
 
 package com.google.inject.internal;
 
-import java.util.Set;
-
 import com.google.inject.Binder;
 import com.google.inject.Key;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Objects;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
 import com.google.inject.spi.LinkedKeyBinding;
+import java.util.Set;
 
 public final class LinkedBindingImpl<T> extends BindingImpl<T> implements LinkedKeyBinding<T>, HasDependencies {
 
diff --git a/src/com/google/inject/internal/LinkedProviderBindingImpl.java b/src/com/google/inject/internal/LinkedProviderBindingImpl.java
index 6f8c516..ccbdf9e 100644
--- a/src/com/google/inject/internal/LinkedProviderBindingImpl.java
+++ b/src/com/google/inject/internal/LinkedProviderBindingImpl.java
@@ -16,14 +16,16 @@
 
 package com.google.inject.internal;
 
-import java.util.Set;
-
 import com.google.inject.Binder;
 import com.google.inject.Key;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Objects;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
 import com.google.inject.spi.ProviderKeyBinding;
+import java.util.Set;
 
 final class LinkedProviderBindingImpl<T>
     extends BindingImpl<T> implements ProviderKeyBinding<T>, HasDependencies {
diff --git a/src/com/google/inject/internal/Lookups.java b/src/com/google/inject/internal/Lookups.java
index f2cedbf..2b32c7a 100644
--- a/src/com/google/inject/internal/Lookups.java
+++ b/src/com/google/inject/internal/Lookups.java
@@ -16,9 +16,9 @@
 
 package com.google.inject.internal;
 
-import com.google.inject.Provider;
 import com.google.inject.Key;
 import com.google.inject.MembersInjector;
+import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
 
 /**
diff --git a/src/com/google/inject/internal/MatcherAndConverter.java b/src/com/google/inject/internal/MatcherAndConverter.java
index c31d1c3..b618b3f 100644
--- a/src/com/google/inject/internal/MatcherAndConverter.java
+++ b/src/com/google/inject/internal/MatcherAndConverter.java
@@ -17,7 +17,7 @@
 package com.google.inject.internal;
 
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.matcher.Matcher;
 import com.google.inject.spi.TypeConverter;
 
diff --git a/src/com/google/inject/internal/MembersInjectorImpl.java b/src/com/google/inject/internal/MembersInjectorImpl.java
index 3b4df0a..9230def 100644
--- a/src/com/google/inject/internal/MembersInjectorImpl.java
+++ b/src/com/google/inject/internal/MembersInjectorImpl.java
@@ -17,8 +17,9 @@
 package com.google.inject.internal;
 
 import com.google.inject.MembersInjector;
-import com.google.inject.Stage;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.spi.InjectionListener;
 import com.google.inject.spi.InjectionPoint;
 
diff --git a/src/com/google/inject/internal/MembersInjectorStore.java b/src/com/google/inject/internal/MembersInjectorStore.java
index 7b7f266..a8eb427 100644
--- a/src/com/google/inject/internal/MembersInjectorStore.java
+++ b/src/com/google/inject/internal/MembersInjectorStore.java
@@ -18,6 +18,8 @@
 
 import com.google.inject.ConfigurationException;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.InjectionPoint;
 import com.google.inject.spi.TypeListenerBinding;
 import java.lang.reflect.Field;
diff --git a/src/com/google/inject/internal/MethodAspect.java b/src/com/google/inject/internal/MethodAspect.java
index f9377a3..439491e 100644
--- a/src/com/google/inject/internal/MethodAspect.java
+++ b/src/com/google/inject/internal/MethodAspect.java
@@ -16,7 +16,7 @@
 
 package com.google.inject.internal;
 
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.matcher.Matcher;
 import java.lang.reflect.Method;
 import java.util.Arrays;
diff --git a/src/com/google/inject/internal/MoreTypes.java b/src/com/google/inject/internal/MoreTypes.java
index a33abe9..bb3a2eb 100644
--- a/src/com/google/inject/internal/MoreTypes.java
+++ b/src/com/google/inject/internal/MoreTypes.java
@@ -19,9 +19,10 @@
 
 import com.google.inject.ConfigurationException;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkArgument;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import com.google.inject.spi.Message;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.Objects;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.util.Types;
 import java.io.Serializable;
 import java.lang.reflect.Array;
diff --git a/src/com/google/inject/internal/PrivateElementProcessor.java b/src/com/google/inject/internal/PrivateElementProcessor.java
index 21883fb..086488e 100644
--- a/src/com/google/inject/internal/PrivateElementProcessor.java
+++ b/src/com/google/inject/internal/PrivateElementProcessor.java
@@ -17,6 +17,7 @@
 package com.google.inject.internal;
 
 import com.google.inject.internal.InternalInjectorCreator.InjectorOptions;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.PrivateElements;
 import java.util.List;
 
diff --git a/src/com/google/inject/internal/PrivateElementsImpl.java b/src/com/google/inject/internal/PrivateElementsImpl.java
index 28900ae..1a05ab1 100644
--- a/src/com/google/inject/internal/PrivateElementsImpl.java
+++ b/src/com/google/inject/internal/PrivateElementsImpl.java
@@ -20,9 +20,14 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.PrivateBinder;
-import static com.google.inject.internal.Preconditions.checkArgument;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import static com.google.inject.internal.Preconditions.checkState;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkState;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.ElementVisitor;
 import com.google.inject.spi.PrivateElements;
diff --git a/src/com/google/inject/internal/ProviderInstanceBindingImpl.java b/src/com/google/inject/internal/ProviderInstanceBindingImpl.java
index d861d75..ff4c311 100644
--- a/src/com/google/inject/internal/ProviderInstanceBindingImpl.java
+++ b/src/com/google/inject/internal/ProviderInstanceBindingImpl.java
@@ -19,6 +19,9 @@
 import com.google.inject.Binder;
 import com.google.inject.Key;
 import com.google.inject.Provider;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Objects;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.HasDependencies;
diff --git a/src/com/google/inject/internal/ProviderMethod.java b/src/com/google/inject/internal/ProviderMethod.java
index 10ae83d..4e0c607 100644
--- a/src/com/google/inject/internal/ProviderMethod.java
+++ b/src/com/google/inject/internal/ProviderMethod.java
@@ -21,6 +21,8 @@
 import com.google.inject.Key;
 import com.google.inject.PrivateBinder;
 import com.google.inject.Provider;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.StackTraceElements;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.ProviderWithDependencies;
 import java.lang.annotation.Annotation;
diff --git a/src/com/google/inject/internal/ProviderMethodsModule.java b/src/com/google/inject/internal/ProviderMethodsModule.java
index b308260..dd30d92 100644
--- a/src/com/google/inject/internal/ProviderMethodsModule.java
+++ b/src/com/google/inject/internal/ProviderMethodsModule.java
@@ -22,7 +22,9 @@
 import com.google.inject.Provider;
 import com.google.inject.Provides;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.Message;
 import com.google.inject.util.Modules;
diff --git a/src/com/google/inject/internal/ProxyFactory.java b/src/com/google/inject/internal/ProxyFactory.java
index 42b634c..d3d8aaa 100644
--- a/src/com/google/inject/internal/ProxyFactory.java
+++ b/src/com/google/inject/internal/ProxyFactory.java
@@ -16,9 +16,12 @@
 
 package com.google.inject.internal;
 
-import static com.google.inject.internal.BytecodeGen.newFastClass;
-
 import com.google.inject.ProvisionException;
+import static com.google.inject.internal.BytecodeGen.newFastClass;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
 import com.google.inject.spi.InjectionPoint;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
diff --git a/src/com/google/inject/internal/ScopeBindingProcessor.java b/src/com/google/inject/internal/ScopeBindingProcessor.java
index e107c70..7c2ac61 100644
--- a/src/com/google/inject/internal/ScopeBindingProcessor.java
+++ b/src/com/google/inject/internal/ScopeBindingProcessor.java
@@ -17,7 +17,7 @@
 package com.google.inject.internal;
 
 import com.google.inject.Scope;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.spi.ScopeBinding;
 import java.lang.annotation.Annotation;
 
diff --git a/src/com/google/inject/internal/Scoping.java b/src/com/google/inject/internal/Scoping.java
index 60c3708..bcbb174 100644
--- a/src/com/google/inject/internal/Scoping.java
+++ b/src/com/google/inject/internal/Scoping.java
@@ -16,13 +16,14 @@
 
 package com.google.inject.internal;
 
+import com.google.inject.Key;
+import com.google.inject.Provider;
 import com.google.inject.Scope;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.Stage;
-import com.google.inject.Key;
-import com.google.inject.Provider;
 import com.google.inject.binder.ScopedBindingBuilder;
+import com.google.inject.internal.util.Objects;
 import com.google.inject.spi.BindingScopingVisitor;
 import java.lang.annotation.Annotation;
 
diff --git a/src/com/google/inject/internal/State.java b/src/com/google/inject/internal/State.java
index 24699af..4bf8025 100644
--- a/src/com/google/inject/internal/State.java
+++ b/src/com/google/inject/internal/State.java
@@ -20,6 +20,9 @@
 import com.google.inject.Key;
 import com.google.inject.Scope;
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.spi.TypeListenerBinding;
 import java.lang.annotation.Annotation;
 import java.util.List;
diff --git a/src/com/google/inject/internal/TypeConverterBindingProcessor.java b/src/com/google/inject/internal/TypeConverterBindingProcessor.java
index d7ca03c..1f10349 100644
--- a/src/com/google/inject/internal/TypeConverterBindingProcessor.java
+++ b/src/com/google/inject/internal/TypeConverterBindingProcessor.java
@@ -17,6 +17,8 @@
 package com.google.inject.internal;
 
 import com.google.inject.TypeLiteral;
+import com.google.inject.internal.util.SourceProvider;
+import com.google.inject.internal.util.Strings;
 import com.google.inject.matcher.AbstractMatcher;
 import com.google.inject.matcher.Matcher;
 import com.google.inject.matcher.Matchers;
diff --git a/src/com/google/inject/internal/UniqueAnnotations.java b/src/com/google/inject/internal/UniqueAnnotations.java
index 8fdab6e..0754f3c 100644
--- a/src/com/google/inject/internal/UniqueAnnotations.java
+++ b/src/com/google/inject/internal/UniqueAnnotations.java
@@ -17,7 +17,6 @@
 package com.google.inject.internal;
 
 import com.google.inject.BindingAnnotation;
-
 import java.lang.annotation.Annotation;
 import java.lang.annotation.Retention;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
diff --git a/src/com/google/inject/internal/UntargettedBindingImpl.java b/src/com/google/inject/internal/UntargettedBindingImpl.java
index b666c1f..19bd2f0 100644
--- a/src/com/google/inject/internal/UntargettedBindingImpl.java
+++ b/src/com/google/inject/internal/UntargettedBindingImpl.java
@@ -18,6 +18,8 @@
 
 import com.google.inject.Binder;
 import com.google.inject.Key;
+import com.google.inject.internal.util.Objects;
+import com.google.inject.internal.util.ToStringBuilder;
 import com.google.inject.spi.BindingTargetVisitor;
 import com.google.inject.spi.Dependency;
 import com.google.inject.spi.UntargettedBinding;
diff --git a/src/com/google/inject/internal/WeakKeySet.java b/src/com/google/inject/internal/WeakKeySet.java
index 58a9c2c..8154bf5 100644
--- a/src/com/google/inject/internal/WeakKeySet.java
+++ b/src/com/google/inject/internal/WeakKeySet.java
@@ -17,6 +17,7 @@
 package com.google.inject.internal;
 
 import com.google.inject.Key;
+import com.google.inject.internal.util.Sets;
 import java.util.Set;
 
 /**
diff --git a/src/com/google/inject/internal/AbstractIterator.java b/src/com/google/inject/internal/util/AbstractIterator.java
similarity index 98%
rename from src/com/google/inject/internal/AbstractIterator.java
rename to src/com/google/inject/internal/util/AbstractIterator.java
index 8dfe134..0686b23 100644
--- a/src/com/google/inject/internal/AbstractIterator.java
+++ b/src/com/google/inject/internal/util/AbstractIterator.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/src/com/google/inject/internal/AbstractMapEntry.java b/src/com/google/inject/internal/util/AbstractMapEntry.java
similarity index 95%
rename from src/com/google/inject/internal/AbstractMapEntry.java
rename to src/com/google/inject/internal/util/AbstractMapEntry.java
index 5733211..1ec9f79 100644
--- a/src/com/google/inject/internal/AbstractMapEntry.java
+++ b/src/com/google/inject/internal/util/AbstractMapEntry.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.util.Map.Entry;
 
 /**
diff --git a/src/com/google/inject/internal/AsynchronousComputationException.java b/src/com/google/inject/internal/util/AsynchronousComputationException.java
similarity index 95%
rename from src/com/google/inject/internal/AsynchronousComputationException.java
rename to src/com/google/inject/internal/util/AsynchronousComputationException.java
index e22ec2d..4b5797a 100644
--- a/src/com/google/inject/internal/AsynchronousComputationException.java
+++ b/src/com/google/inject/internal/util/AsynchronousComputationException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 /**
  * Wraps an exception that occured during a computation in a different thread.
diff --git a/src/com/google/inject/internal/Classes.java b/src/com/google/inject/internal/util/Classes.java
similarity index 93%
rename from src/com/google/inject/internal/Classes.java
rename to src/com/google/inject/internal/util/Classes.java
index 8c587ca..d8ec6e1 100644
--- a/src/com/google/inject/internal/Classes.java
+++ b/src/com/google/inject/internal/util/Classes.java
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.lang.reflect.Modifier;
 
 /**
  * Class utilities.
  */
-final class Classes {
+public final class Classes {
 
   public static boolean isInnerClass(Class<?> clazz) {
     return !Modifier.isStatic(clazz.getModifiers())
diff --git a/src/com/google/inject/internal/Collections2.java b/src/com/google/inject/internal/util/Collections2.java
similarity index 94%
rename from src/com/google/inject/internal/Collections2.java
rename to src/com/google/inject/internal/util/Collections2.java
index ca47faa..47efa34 100644
--- a/src/com/google/inject/internal/Collections2.java
+++ b/src/com/google/inject/internal/util/Collections2.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.util.Collection;
 import java.util.Set;
 
diff --git a/src/com/google/inject/internal/ComputationException.java b/src/com/google/inject/internal/util/ComputationException.java
similarity index 94%
rename from src/com/google/inject/internal/ComputationException.java
rename to src/com/google/inject/internal/util/ComputationException.java
index a41700b..5205828 100644
--- a/src/com/google/inject/internal/ComputationException.java
+++ b/src/com/google/inject/internal/util/ComputationException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 /**
  * Wraps an exception that occured during a computation.
diff --git a/src/com/google/inject/internal/CustomConcurrentHashMap.java b/src/com/google/inject/internal/util/CustomConcurrentHashMap.java
similarity index 99%
rename from src/com/google/inject/internal/CustomConcurrentHashMap.java
rename to src/com/google/inject/internal/util/CustomConcurrentHashMap.java
index 37b2d59..cb65dc0 100644
--- a/src/com/google/inject/internal/CustomConcurrentHashMap.java
+++ b/src/com/google/inject/internal/util/CustomConcurrentHashMap.java
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Function;
+import com.google.inject.internal.Nullable;
 import java.io.IOException;
 import java.io.Serializable;
 import java.lang.reflect.Array;
@@ -41,7 +43,7 @@
  * provides the surrounding concurrent data structure which implements {@link
  * ConcurrentMap}. Additionally supports implementing maps where {@link
  * Map#get} atomically computes values on demand (see {@link
- * Builder#buildComputingMap(ComputingStrategy, Function)}).
+ * Builder#buildComputingMap(ComputingStrategy, com.google.inject.internal.Function)}).
  *
  * <p>The resulting hash table supports full concurrency of retrievals and
  * adjustable expected concurrency for updates. Even though all operations are
diff --git a/src/com/google/inject/internal/ExpirationTimer.java b/src/com/google/inject/internal/util/ExpirationTimer.java
similarity index 94%
rename from src/com/google/inject/internal/ExpirationTimer.java
rename to src/com/google/inject/internal/util/ExpirationTimer.java
index 1a4b33f..0d545a8 100644
--- a/src/com/google/inject/internal/ExpirationTimer.java
+++ b/src/com/google/inject/internal/util/ExpirationTimer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.Timer;
 
diff --git a/src/com/google/inject/internal/FinalizablePhantomReference.java b/src/com/google/inject/internal/util/FinalizablePhantomReference.java
similarity index 96%
rename from src/com/google/inject/internal/FinalizablePhantomReference.java
rename to src/com/google/inject/internal/util/FinalizablePhantomReference.java
index 74058af..386e9a8 100644
--- a/src/com/google/inject/internal/FinalizablePhantomReference.java
+++ b/src/com/google/inject/internal/util/FinalizablePhantomReference.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.lang.ref.PhantomReference;
 
diff --git a/src/com/google/inject/internal/FinalizableReference.java b/src/com/google/inject/internal/util/FinalizableReference.java
similarity index 96%
rename from src/com/google/inject/internal/FinalizableReference.java
rename to src/com/google/inject/internal/util/FinalizableReference.java
index 05c6771..ef6654a 100644
--- a/src/com/google/inject/internal/FinalizableReference.java
+++ b/src/com/google/inject/internal/util/FinalizableReference.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 /**
  * Implemented by references that have code to run after garbage collection of
diff --git a/src/com/google/inject/internal/FinalizableReferenceQueue.java b/src/com/google/inject/internal/util/FinalizableReferenceQueue.java
similarity index 98%
rename from src/com/google/inject/internal/FinalizableReferenceQueue.java
rename to src/com/google/inject/internal/util/FinalizableReferenceQueue.java
index 88b206e..4eebdbc 100644
--- a/src/com/google/inject/internal/FinalizableReferenceQueue.java
+++ b/src/com/google/inject/internal/util/FinalizableReferenceQueue.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -92,7 +92,7 @@
       = Logger.getLogger(FinalizableReferenceQueue.class.getName());
 
   private static final String FINALIZER_CLASS_NAME
-      = "com.google.inject.internal.Finalizer";
+      = "com.google.inject.internal.util.Finalizer";
 
   /** Reference to Finalizer.startFinalizer(). */
   private static final Method startFinalizer;
diff --git a/src/com/google/inject/internal/FinalizableSoftReference.java b/src/com/google/inject/internal/util/FinalizableSoftReference.java
similarity index 96%
rename from src/com/google/inject/internal/FinalizableSoftReference.java
rename to src/com/google/inject/internal/util/FinalizableSoftReference.java
index 66dcabd..39d3570 100644
--- a/src/com/google/inject/internal/FinalizableSoftReference.java
+++ b/src/com/google/inject/internal/util/FinalizableSoftReference.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.lang.ref.SoftReference;
 
diff --git a/src/com/google/inject/internal/FinalizableWeakReference.java b/src/com/google/inject/internal/util/FinalizableWeakReference.java
similarity index 89%
rename from src/com/google/inject/internal/FinalizableWeakReference.java
rename to src/com/google/inject/internal/util/FinalizableWeakReference.java
index b4454d0..0b8cd8e 100644
--- a/src/com/google/inject/internal/FinalizableWeakReference.java
+++ b/src/com/google/inject/internal/util/FinalizableWeakReference.java
@@ -14,10 +14,8 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import com.google.inject.internal.FinalizableReference;
-import com.google.inject.internal.FinalizableReferenceQueue;
 import java.lang.ref.WeakReference;
 
 /**
diff --git a/src/com/google/inject/internal/Finalizer.java b/src/com/google/inject/internal/util/Finalizer.java
similarity index 98%
rename from src/com/google/inject/internal/Finalizer.java
rename to src/com/google/inject/internal/util/Finalizer.java
index 0355894..6755196 100644
--- a/src/com/google/inject/internal/Finalizer.java
+++ b/src/com/google/inject/internal/util/Finalizer.java
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
 import java.lang.ref.PhantomReference;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
 import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Thread that finalizes referents. All references should implement
@@ -52,7 +52,7 @@
 
   /** Name of FinalizableReference.class. */
   private static final String FINALIZABLE_REFERENCE
-      = "com.google.inject.internal.FinalizableReference";
+      = "com.google.inject.internal.util.FinalizableReference";
 
   /**
    * Starts the Finalizer thread. FinalizableReferenceQueue calls this method
diff --git a/src/com/google/inject/internal/Hashing.java b/src/com/google/inject/internal/util/Hashing.java
similarity index 97%
rename from src/com/google/inject/internal/Hashing.java
rename to src/com/google/inject/internal/util/Hashing.java
index fa16e1e..b0fb165 100644
--- a/src/com/google/inject/internal/Hashing.java
+++ b/src/com/google/inject/internal/util/Hashing.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 /**
  * Static methods for implementing hash-based collections.
diff --git a/src/com/google/inject/internal/ImmutableCollection.java b/src/com/google/inject/internal/util/ImmutableCollection.java
similarity index 98%
rename from src/com/google/inject/internal/ImmutableCollection.java
rename to src/com/google/inject/internal/util/ImmutableCollection.java
index 88b2bad..402b905 100644
--- a/src/com/google/inject/internal/ImmutableCollection.java
+++ b/src/com/google/inject/internal/util/ImmutableCollection.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Iterator;
diff --git a/src/com/google/inject/internal/ImmutableEntry.java b/src/com/google/inject/internal/util/ImmutableEntry.java
similarity index 92%
rename from src/com/google/inject/internal/ImmutableEntry.java
rename to src/com/google/inject/internal/util/ImmutableEntry.java
index 8828ecd..73318c7 100644
--- a/src/com/google/inject/internal/ImmutableEntry.java
+++ b/src/com/google/inject/internal/util/ImmutableEntry.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.io.Serializable;
 
 /**
diff --git a/src/com/google/inject/internal/ImmutableList.java b/src/com/google/inject/internal/util/ImmutableList.java
similarity index 99%
rename from src/com/google/inject/internal/ImmutableList.java
rename to src/com/google/inject/internal/util/ImmutableList.java
index c412fd9..c5831d9 100644
--- a/src/com/google/inject/internal/ImmutableList.java
+++ b/src/com/google/inject/internal/util/ImmutableList.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.io.InvalidObjectException;
 import java.io.ObjectInputStream;
 import java.io.Serializable;
diff --git a/src/com/google/inject/internal/ImmutableMap.java b/src/com/google/inject/internal/util/ImmutableMap.java
similarity index 99%
rename from src/com/google/inject/internal/ImmutableMap.java
rename to src/com/google/inject/internal/util/ImmutableMap.java
index dafe5fd..871024c 100644
--- a/src/com/google/inject/internal/ImmutableMap.java
+++ b/src/com/google/inject/internal/util/ImmutableMap.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.Iterator;
diff --git a/src/com/google/inject/internal/ImmutableSet.java b/src/com/google/inject/internal/util/ImmutableSet.java
similarity index 99%
rename from src/com/google/inject/internal/ImmutableSet.java
rename to src/com/google/inject/internal/util/ImmutableSet.java
index 68f3667..c1807f3 100644
--- a/src/com/google/inject/internal/ImmutableSet.java
+++ b/src/com/google/inject/internal/util/ImmutableSet.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/src/com/google/inject/internal/Iterables.java b/src/com/google/inject/internal/util/Iterables.java
similarity index 97%
rename from src/com/google/inject/internal/Iterables.java
rename to src/com/google/inject/internal/util/Iterables.java
index 15d05db..5af7413 100644
--- a/src/com/google/inject/internal/Iterables.java
+++ b/src/com/google/inject/internal/util/Iterables.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Function;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/src/com/google/inject/internal/Iterators.java b/src/com/google/inject/internal/util/Iterators.java
similarity index 98%
rename from src/com/google/inject/internal/Iterators.java
rename to src/com/google/inject/internal/util/Iterators.java
index c9891c4..993c1ea 100644
--- a/src/com/google/inject/internal/Iterators.java
+++ b/src/com/google/inject/internal/util/Iterators.java
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Function;
+import com.google.inject.internal.Nullable;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
diff --git a/src/com/google/inject/internal/Join.java b/src/com/google/inject/internal/util/Join.java
similarity index 96%
rename from src/com/google/inject/internal/Join.java
rename to src/com/google/inject/internal/util/Join.java
index ad186d6..6e97930 100644
--- a/src/com/google/inject/internal/Join.java
+++ b/src/com/google/inject/internal/util/Join.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.Nullable;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -93,7 +93,7 @@
    */
   public static String join(
       String delimiter, @Nullable Object firstToken, Object... otherTokens) {
-    checkNotNull(otherTokens);
+    Preconditions.checkNotNull(otherTokens);
     return join(delimiter, Lists.newArrayList(firstToken, otherTokens));
   }
 
@@ -203,7 +203,7 @@
    */
   public static <T extends Appendable> T join(T appendable, String delimiter,
       @Nullable Object firstToken, Object... otherTokens) {
-    checkNotNull(otherTokens);
+    Preconditions.checkNotNull(otherTokens);
     return join(appendable, delimiter, Lists.newArrayList(firstToken, otherTokens));
   }
 
@@ -228,8 +228,8 @@
 
     /* This method is the workhorse of the class */
 
-    checkNotNull(appendable);
-    checkNotNull(delimiter);
+    Preconditions.checkNotNull(appendable);
+    Preconditions.checkNotNull(delimiter);
     if (tokens.hasNext()) {
       try {
         appendOneToken(appendable, tokens.next());
@@ -264,9 +264,9 @@
    */
   public static <T extends Appendable> T join(T appendable,
       String keyValueSeparator, String entryDelimiter, Map<?, ?> map) {
-    checkNotNull(appendable);
-    checkNotNull(keyValueSeparator);
-    checkNotNull(entryDelimiter);
+    Preconditions.checkNotNull(appendable);
+    Preconditions.checkNotNull(keyValueSeparator);
+    Preconditions.checkNotNull(entryDelimiter);
     Iterator<? extends Map.Entry<?, ?>> entries = map.entrySet().iterator();
     if (entries.hasNext()) {
       try {
diff --git a/src/com/google/inject/internal/LineNumbers.java b/src/com/google/inject/internal/util/LineNumbers.java
similarity index 96%
rename from src/com/google/inject/internal/LineNumbers.java
rename to src/com/google/inject/internal/util/LineNumbers.java
index 05d1c29..992281e 100644
--- a/src/com/google/inject/internal/LineNumbers.java
+++ b/src/com/google/inject/internal/util/LineNumbers.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import static com.google.inject.internal.Preconditions.checkArgument;
+import com.google.inject.internal.MoreTypes;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Member;
@@ -54,7 +54,7 @@
 
     if (!type.isArray()) {
       InputStream in = type.getResourceAsStream("/" + type.getName().replace('.', '/') + ".class");
-      checkArgument(in != null, "Cannot find bytecode for %s", type);
+      Preconditions.checkArgument(in != null, "Cannot find bytecode for %s", type);
       new ClassReader(in).accept(new LineNumberReader(), ClassReader.SKIP_FRAMES);
     }
   }
@@ -77,7 +77,7 @@
    * construction
    */
   public Integer getLineNumber(Member member) {
-    checkArgument(type == member.getDeclaringClass(),
+    Preconditions.checkArgument(type == member.getDeclaringClass(),
         "Member %s belongs to %s, not %s", member, member.getDeclaringClass(), type);
     return lines.get(MoreTypes.memberKey(member));
   }
diff --git a/src/com/google/inject/internal/Lists.java b/src/com/google/inject/internal/util/Lists.java
similarity index 97%
rename from src/com/google/inject/internal/Lists.java
rename to src/com/google/inject/internal/util/Lists.java
index 4840c22..b32a430 100644
--- a/src/com/google/inject/internal/Lists.java
+++ b/src/com/google/inject/internal/util/Lists.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
diff --git a/src/com/google/inject/internal/MapMaker.java b/src/com/google/inject/internal/util/MapMaker.java
similarity index 99%
rename from src/com/google/inject/internal/MapMaker.java
rename to src/com/google/inject/internal/util/MapMaker.java
index 56b9662..9ea17b3 100644
--- a/src/com/google/inject/internal/MapMaker.java
+++ b/src/com/google/inject/internal/util/MapMaker.java
@@ -14,8 +14,11 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Function;
+import com.google.inject.internal.util.CustomConcurrentHashMap.ComputingStrategy;
+import com.google.inject.internal.util.CustomConcurrentHashMap.Internals;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -26,8 +29,6 @@
 import java.util.Map;
 import java.util.TimerTask;
 import java.util.concurrent.ConcurrentHashMap;
-import com.google.inject.internal.CustomConcurrentHashMap.Internals;
-import com.google.inject.internal.CustomConcurrentHashMap.ComputingStrategy;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
 
diff --git a/src/com/google/inject/internal/Maps.java b/src/com/google/inject/internal/util/Maps.java
similarity index 96%
rename from src/com/google/inject/internal/Maps.java
rename to src/com/google/inject/internal/util/Maps.java
index 7459726..7a65243 100644
--- a/src/com/google/inject/internal/Maps.java
+++ b/src/com/google/inject/internal/util/Maps.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.IdentityHashMap;
diff --git a/src/com/google/inject/internal/NullOutputException.java b/src/com/google/inject/internal/util/NullOutputException.java
similarity index 95%
rename from src/com/google/inject/internal/NullOutputException.java
rename to src/com/google/inject/internal/util/NullOutputException.java
index d673332..0a559b5 100644
--- a/src/com/google/inject/internal/NullOutputException.java
+++ b/src/com/google/inject/internal/util/NullOutputException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 /**
  * Thrown when a computer function returns null. This subclass exists so
diff --git a/src/com/google/inject/internal/ObjectArrays.java b/src/com/google/inject/internal/util/ObjectArrays.java
similarity index 96%
rename from src/com/google/inject/internal/ObjectArrays.java
rename to src/com/google/inject/internal/util/ObjectArrays.java
index a098563..db69b02 100644
--- a/src/com/google/inject/internal/ObjectArrays.java
+++ b/src/com/google/inject/internal/util/ObjectArrays.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.lang.reflect.Array;
 
diff --git a/src/com/google/inject/internal/Objects.java b/src/com/google/inject/internal/util/Objects.java
similarity index 95%
rename from src/com/google/inject/internal/Objects.java
rename to src/com/google/inject/internal/util/Objects.java
index 92897fd..c93409d 100644
--- a/src/com/google/inject/internal/Objects.java
+++ b/src/com/google/inject/internal/util/Objects.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.util.Arrays;
 
 /**
diff --git a/src/com/google/inject/internal/Preconditions.java b/src/com/google/inject/internal/util/Preconditions.java
similarity index 98%
rename from src/com/google/inject/internal/Preconditions.java
rename to src/com/google/inject/internal/util/Preconditions.java
index c7d67b3..2dd1335 100644
--- a/src/com/google/inject/internal/Preconditions.java
+++ b/src/com/google/inject/internal/util/Preconditions.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.Collection;
 import java.util.NoSuchElementException;
@@ -50,7 +50,7 @@
  * in their specifications to do so even when given perfectly valid input. That
  * is, {@code null} is a valid parameter to the method {@link
  * #checkNotNull(Object)} -- and technically this parameter could be even marked
- * as {@link Nullable} -- yet the method will still throw an exception anyway,
+ * as {@link com.google.inject.internal.Nullable} -- yet the method will still throw an exception anyway,
  * because that's what its contract says to do.
  * 
  * <p>This class may be used with the Google Web Toolkit (GWT).
diff --git a/src/com/google/inject/internal/Sets.java b/src/com/google/inject/internal/util/Sets.java
similarity index 98%
rename from src/com/google/inject/internal/Sets.java
rename to src/com/google/inject/internal/util/Sets.java
index b22f535..1aa3f84 100644
--- a/src/com/google/inject/internal/Sets.java
+++ b/src/com/google/inject/internal/util/Sets.java
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Nullable;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.Serializable;
diff --git a/src/com/google/inject/internal/SourceProvider.java b/src/com/google/inject/internal/util/SourceProvider.java
similarity index 94%
rename from src/com/google/inject/internal/SourceProvider.java
rename to src/com/google/inject/internal/util/SourceProvider.java
index 75dcc9d..17deeda 100644
--- a/src/com/google/inject/internal/SourceProvider.java
+++ b/src/com/google/inject/internal/util/SourceProvider.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import static com.google.inject.internal.Iterables.concat;
+import static com.google.inject.internal.util.Iterables.concat;
 import java.util.List;
 
 /**
diff --git a/src/com/google/inject/internal/StackTraceElements.java b/src/com/google/inject/internal/util/StackTraceElements.java
similarity index 94%
rename from src/com/google/inject/internal/StackTraceElements.java
rename to src/com/google/inject/internal/util/StackTraceElements.java
index d89bbbd..f121a08 100644
--- a/src/com/google/inject/internal/StackTraceElements.java
+++ b/src/com/google/inject/internal/util/StackTraceElements.java
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.Function;
+import com.google.inject.internal.MoreTypes;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Member;
diff --git a/src/com/google/inject/internal/Stopwatch.java b/src/com/google/inject/internal/util/Stopwatch.java
similarity index 94%
rename from src/com/google/inject/internal/Stopwatch.java
rename to src/com/google/inject/internal/util/Stopwatch.java
index 22ab440..92c73fb 100644
--- a/src/com/google/inject/internal/Stopwatch.java
+++ b/src/com/google/inject/internal/util/Stopwatch.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.logging.Logger;
 
@@ -23,7 +23,7 @@
  *
  * @author crazybob@google.com (Bob Lee)
  */
-final class Stopwatch {
+public final class Stopwatch {
   private static final Logger logger = Logger.getLogger(Stopwatch.class.getName());
 
   private long start = System.currentTimeMillis();
diff --git a/src/com/google/inject/internal/Strings.java b/src/com/google/inject/internal/util/Strings.java
similarity index 97%
rename from src/com/google/inject/internal/Strings.java
rename to src/com/google/inject/internal/util/Strings.java
index 5b9167b..3021f7a 100644
--- a/src/com/google/inject/internal/Strings.java
+++ b/src/com/google/inject/internal/util/Strings.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 /**
  * String utilities.
diff --git a/src/com/google/inject/internal/ToStringBuilder.java b/src/com/google/inject/internal/util/ToStringBuilder.java
similarity index 96%
rename from src/com/google/inject/internal/ToStringBuilder.java
rename to src/com/google/inject/internal/util/ToStringBuilder.java
index 6221eae..9e75fa8 100644
--- a/src/com/google/inject/internal/ToStringBuilder.java
+++ b/src/com/google/inject/internal/util/ToStringBuilder.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
diff --git a/src/com/google/inject/internal/UnmodifiableIterator.java b/src/com/google/inject/internal/util/UnmodifiableIterator.java
similarity index 95%
rename from src/com/google/inject/internal/UnmodifiableIterator.java
rename to src/com/google/inject/internal/util/UnmodifiableIterator.java
index 1762192..d19a49b 100644
--- a/src/com/google/inject/internal/UnmodifiableIterator.java
+++ b/src/com/google/inject/internal/util/UnmodifiableIterator.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.Iterator;
 
diff --git a/src/com/google/inject/matcher/Matchers.java b/src/com/google/inject/matcher/Matchers.java
index 44d938b..e6a0bf5 100644
--- a/src/com/google/inject/matcher/Matchers.java
+++ b/src/com/google/inject/matcher/Matchers.java
@@ -16,8 +16,8 @@
 
 package com.google.inject.matcher;
 
-import static com.google.inject.internal.Preconditions.checkArgument;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.lang.annotation.Retention;
diff --git a/src/com/google/inject/name/NamedImpl.java b/src/com/google/inject/name/NamedImpl.java
index 509b528..8690c51 100644
--- a/src/com/google/inject/name/NamedImpl.java
+++ b/src/com/google/inject/name/NamedImpl.java
@@ -16,7 +16,7 @@
 
 package com.google.inject.name;
 
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.io.Serializable;
 import java.lang.annotation.Annotation;
 
diff --git a/src/com/google/inject/spi/Dependency.java b/src/com/google/inject/spi/Dependency.java
index e9d5650..913f203 100644
--- a/src/com/google/inject/spi/Dependency.java
+++ b/src/com/google/inject/spi/Dependency.java
@@ -17,10 +17,10 @@
 package com.google.inject.spi;
 
 import com.google.inject.Key;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Objects;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Objects;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.util.List;
 import java.util.Set;
 
diff --git a/src/com/google/inject/spi/Elements.java b/src/com/google/inject/spi/Elements.java
index 03871a7..75795b4 100644
--- a/src/com/google/inject/spi/Elements.java
+++ b/src/com/google/inject/spi/Elements.java
@@ -35,14 +35,14 @@
 import com.google.inject.internal.BindingBuilder;
 import com.google.inject.internal.ConstantBindingBuilderImpl;
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Lists;
-import static com.google.inject.internal.Preconditions.checkArgument;
+import com.google.inject.internal.ExposureBuilder;
 import com.google.inject.internal.PrivateElementsImpl;
 import com.google.inject.internal.ProviderMethodsModule;
-import com.google.inject.internal.Sets;
-import com.google.inject.internal.SourceProvider;
-import com.google.inject.internal.ExposureBuilder;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
+import static com.google.inject.internal.util.Preconditions.checkArgument;
+import com.google.inject.internal.util.Sets;
+import com.google.inject.internal.util.SourceProvider;
 import com.google.inject.matcher.Matcher;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
diff --git a/src/com/google/inject/spi/ExposedBinding.java b/src/com/google/inject/spi/ExposedBinding.java
index 66f0536..16a569e 100644
--- a/src/com/google/inject/spi/ExposedBinding.java
+++ b/src/com/google/inject/spi/ExposedBinding.java
@@ -16,8 +16,8 @@
 
 package com.google.inject.spi;
 
-import com.google.inject.Binding;
 import com.google.inject.Binder;
+import com.google.inject.Binding;
 
 /**
  * A binding to a key exposed from an enclosed private environment.
diff --git a/src/com/google/inject/spi/InjectionPoint.java b/src/com/google/inject/spi/InjectionPoint.java
index 918668f..b147a3b 100644
--- a/src/com/google/inject/spi/InjectionPoint.java
+++ b/src/com/google/inject/spi/InjectionPoint.java
@@ -23,12 +23,12 @@
 import com.google.inject.internal.Annotations;
 import com.google.inject.internal.Errors;
 import com.google.inject.internal.ErrorsException;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
 import com.google.inject.internal.MoreTypes;
 import static com.google.inject.internal.MoreTypes.getRawType;
 import com.google.inject.internal.Nullability;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Constructor;
@@ -39,11 +39,11 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.HashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
diff --git a/src/com/google/inject/spi/InjectionRequest.java b/src/com/google/inject/spi/InjectionRequest.java
index d058dda..f3807bd 100644
--- a/src/com/google/inject/spi/InjectionRequest.java
+++ b/src/com/google/inject/spi/InjectionRequest.java
@@ -19,7 +19,7 @@
 import com.google.inject.Binder;
 import com.google.inject.ConfigurationException;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.util.Set;
 
 /**
diff --git a/src/com/google/inject/spi/InterceptorBinding.java b/src/com/google/inject/spi/InterceptorBinding.java
index 2373786..03c3903 100644
--- a/src/com/google/inject/spi/InterceptorBinding.java
+++ b/src/com/google/inject/spi/InterceptorBinding.java
@@ -17,8 +17,8 @@
 package com.google.inject.spi;
 
 import com.google.inject.Binder;
-import com.google.inject.internal.ImmutableList;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.internal.util.ImmutableList;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.matcher.Matcher;
 import java.lang.reflect.Method;
 import java.util.List;
diff --git a/src/com/google/inject/spi/MembersInjectorLookup.java b/src/com/google/inject/spi/MembersInjectorLookup.java
index c3ab792..f4bb165 100644
--- a/src/com/google/inject/spi/MembersInjectorLookup.java
+++ b/src/com/google/inject/spi/MembersInjectorLookup.java
@@ -19,8 +19,8 @@
 import com.google.inject.Binder;
 import com.google.inject.MembersInjector;
 import com.google.inject.TypeLiteral;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import static com.google.inject.internal.Preconditions.checkState;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkState;
 
 /**
  * A lookup of the members injector for a type. Lookups are created explicitly in a module using
diff --git a/src/com/google/inject/spi/Message.java b/src/com/google/inject/spi/Message.java
index 602555e..7b864b5 100644
--- a/src/com/google/inject/spi/Message.java
+++ b/src/com/google/inject/spi/Message.java
@@ -18,10 +18,10 @@
 
 import com.google.inject.Binder;
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Objects;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import com.google.inject.internal.SourceProvider;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Objects;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
+import com.google.inject.internal.util.SourceProvider;
 import java.io.ObjectStreamException;
 import java.io.Serializable;
 import java.util.List;
diff --git a/src/com/google/inject/spi/ProviderLookup.java b/src/com/google/inject/spi/ProviderLookup.java
index a5a3162..74bc5f0 100644
--- a/src/com/google/inject/spi/ProviderLookup.java
+++ b/src/com/google/inject/spi/ProviderLookup.java
@@ -16,11 +16,11 @@
 
 package com.google.inject.spi;
 
+import com.google.inject.Binder;
 import com.google.inject.Key;
 import com.google.inject.Provider;
-import com.google.inject.Binder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
-import static com.google.inject.internal.Preconditions.checkState;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkState;
 
 /**
  * A lookup of the provider for a type. Lookups are created explicitly in a module using
diff --git a/src/com/google/inject/spi/ScopeBinding.java b/src/com/google/inject/spi/ScopeBinding.java
index 5f7b675..f4e6271 100644
--- a/src/com/google/inject/spi/ScopeBinding.java
+++ b/src/com/google/inject/spi/ScopeBinding.java
@@ -16,9 +16,9 @@
 
 package com.google.inject.spi;
 
-import com.google.inject.Scope;
 import com.google.inject.Binder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.Scope;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.lang.annotation.Annotation;
 
 /**
diff --git a/src/com/google/inject/spi/StaticInjectionRequest.java b/src/com/google/inject/spi/StaticInjectionRequest.java
index 94e4a0e..56b5823 100644
--- a/src/com/google/inject/spi/StaticInjectionRequest.java
+++ b/src/com/google/inject/spi/StaticInjectionRequest.java
@@ -16,9 +16,9 @@
 
 package com.google.inject.spi;
 
-import com.google.inject.ConfigurationException;
 import com.google.inject.Binder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.ConfigurationException;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import java.util.Set;
 
 /**
diff --git a/src/com/google/inject/spi/Toolable.java b/src/com/google/inject/spi/Toolable.java
index e1d278e..42897ad 100644
--- a/src/com/google/inject/spi/Toolable.java
+++ b/src/com/google/inject/spi/Toolable.java
@@ -1,15 +1,12 @@
 package com.google.inject.spi;

 

-import static java.lang.annotation.ElementType.METHOD;

-import static java.lang.annotation.RetentionPolicy.RUNTIME;

-

-import java.lang.annotation.Documented;

-import java.lang.annotation.Retention;

-import java.lang.annotation.Target;

-

-import com.google.inject.Inject;

 import com.google.inject.Injector;

 import com.google.inject.Stage;

+import java.lang.annotation.Documented;

+import static java.lang.annotation.ElementType.METHOD;

+import java.lang.annotation.Retention;

+import static java.lang.annotation.RetentionPolicy.RUNTIME;

+import java.lang.annotation.Target;

 

 

 /**

diff --git a/src/com/google/inject/spi/TypeConverterBinding.java b/src/com/google/inject/spi/TypeConverterBinding.java
index b3826ab..74f7c73 100644
--- a/src/com/google/inject/spi/TypeConverterBinding.java
+++ b/src/com/google/inject/spi/TypeConverterBinding.java
@@ -16,9 +16,9 @@
 
 package com.google.inject.spi;
 
-import com.google.inject.TypeLiteral;
 import com.google.inject.Binder;
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import com.google.inject.TypeLiteral;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import com.google.inject.matcher.Matcher;
 
 /**
diff --git a/src/com/google/inject/spi/TypeEncounter.java b/src/com/google/inject/spi/TypeEncounter.java
index 82d42e5..ca2e2b4 100644
--- a/src/com/google/inject/spi/TypeEncounter.java
+++ b/src/com/google/inject/spi/TypeEncounter.java
@@ -16,9 +16,9 @@
 
 package com.google.inject.spi;
 
-import com.google.inject.Provider;
 import com.google.inject.Key;
 import com.google.inject.MembersInjector;
+import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
 import com.google.inject.matcher.Matcher;
 import java.lang.reflect.Method;
diff --git a/src/com/google/inject/util/Jsr330.java b/src/com/google/inject/util/Jsr330.java
index a1891e1..5e32a93 100644
--- a/src/com/google/inject/util/Jsr330.java
+++ b/src/com/google/inject/util/Jsr330.java
@@ -16,7 +16,7 @@
 
 package com.google.inject.util;
 
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 import javax.inject.Provider;
 
 /**
diff --git a/src/com/google/inject/util/Modules.java b/src/com/google/inject/util/Modules.java
index 0bc1a2e..fd19f01 100644
--- a/src/com/google/inject/util/Modules.java
+++ b/src/com/google/inject/util/Modules.java
@@ -21,18 +21,18 @@
 import com.google.inject.Binding;
 import com.google.inject.Key;
 import com.google.inject.Module;
-import com.google.inject.Scope;
 import com.google.inject.PrivateBinder;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
-import com.google.inject.internal.Maps;
-import com.google.inject.internal.Sets;
+import com.google.inject.Scope;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
+import com.google.inject.internal.util.Maps;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.spi.DefaultBindingScopingVisitor;
 import com.google.inject.spi.DefaultElementVisitor;
 import com.google.inject.spi.Element;
 import com.google.inject.spi.Elements;
-import com.google.inject.spi.ScopeBinding;
 import com.google.inject.spi.PrivateElements;
+import com.google.inject.spi.ScopeBinding;
 import java.lang.annotation.Annotation;
 import java.util.Arrays;
 import java.util.LinkedHashSet;
diff --git a/src/com/google/inject/util/Node.java b/src/com/google/inject/util/Node.java
index df6f11e..938c5d4 100644
--- a/src/com/google/inject/util/Node.java
+++ b/src/com/google/inject/util/Node.java
@@ -18,8 +18,8 @@
 
 import com.google.inject.Key;
 import com.google.inject.internal.Errors;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Sets;
 import java.lang.annotation.Annotation;
 import java.util.Set;
 
diff --git a/test/com/google/inject/AllTests.java b/test/com/google/inject/AllTests.java
index fc6de45..bcb2f14 100644
--- a/test/com/google/inject/AllTests.java
+++ b/test/com/google/inject/AllTests.java
@@ -16,11 +16,11 @@
 
 package com.google.inject;
 
-import com.google.inject.internal.FinalizableReferenceQueueTest;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Jsr166HashMapTest;
-import com.google.inject.internal.LineNumbersTest;
-import com.google.inject.internal.MapMakerTestSuite;
+import com.google.inject.internal.util.FinalizableReferenceQueueTest;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Jsr166HashMapTest;
+import com.google.inject.internal.util.LineNumbersTest;
+import com.google.inject.internal.util.MapMakerTestSuite;
 import com.google.inject.internal.MoreTypesTest;
 import com.google.inject.internal.ProxyFactoryTest;
 import com.google.inject.internal.UniqueAnnotationsTest;
diff --git a/test/com/google/inject/BinderTest.java b/test/com/google/inject/BinderTest.java
index bd78b7c..6f97a03 100644
--- a/test/com/google/inject/BinderTest.java
+++ b/test/com/google/inject/BinderTest.java
@@ -18,9 +18,9 @@
 
 import static com.google.inject.Asserts.assertContains;
 import static com.google.inject.Asserts.assertNotSerializable;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Iterables;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Iterables;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
 import com.google.inject.spi.Message;
diff --git a/test/com/google/inject/BinderTestSuite.java b/test/com/google/inject/BinderTestSuite.java
index e4e6844..9e00d5b 100644
--- a/test/com/google/inject/BinderTestSuite.java
+++ b/test/com/google/inject/BinderTestSuite.java
@@ -19,8 +19,8 @@
 import static com.google.inject.Asserts.assertContains;
 import com.google.inject.binder.AnnotatedBindingBuilder;
 import com.google.inject.binder.ScopedBindingBuilder;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.name.Named;
 import static com.google.inject.name.Names.named;
 import com.google.inject.util.Providers;
diff --git a/test/com/google/inject/BindingTest.java b/test/com/google/inject/BindingTest.java
index f2c2039..acaec62 100644
--- a/test/com/google/inject/BindingTest.java
+++ b/test/com/google/inject/BindingTest.java
@@ -17,8 +17,8 @@
 package com.google.inject;
 
 import static com.google.inject.Asserts.assertContains;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Sets;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Sets;
 import com.google.inject.matcher.Matchers;
 import static com.google.inject.name.Names.named;
 
diff --git a/test/com/google/inject/DuplicateBindingsTest.java b/test/com/google/inject/DuplicateBindingsTest.java
index 36230f2..32324b6 100644
--- a/test/com/google/inject/DuplicateBindingsTest.java
+++ b/test/com/google/inject/DuplicateBindingsTest.java
@@ -19,6 +19,7 @@
 import static com.google.inject.Asserts.assertContains;

 import static com.google.inject.name.Names.named;

 

+import com.google.inject.internal.util.Lists;

 import java.lang.annotation.Annotation;

 import java.lang.reflect.Constructor;

 import java.util.Arrays;

@@ -29,7 +30,6 @@
 

 import junit.framework.TestCase;

 

-import com.google.inject.internal.Lists;

 import com.google.inject.spi.Element;

 import com.google.inject.spi.Elements;

 import com.google.inject.util.Providers;

diff --git a/test/com/google/inject/GenericInjectionTest.java b/test/com/google/inject/GenericInjectionTest.java
index 9c9d1e6..211a8dd 100644
--- a/test/com/google/inject/GenericInjectionTest.java
+++ b/test/com/google/inject/GenericInjectionTest.java
@@ -16,8 +16,8 @@
 
 package com.google.inject;
 
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.util.Modules;
 import java.util.Arrays;
 import java.util.Collection;
diff --git a/test/com/google/inject/ImplicitBindingTest.java b/test/com/google/inject/ImplicitBindingTest.java
index de2f409..515635f 100644
--- a/test/com/google/inject/ImplicitBindingTest.java
+++ b/test/com/google/inject/ImplicitBindingTest.java
@@ -16,9 +16,9 @@
 
 package com.google.inject;
 
+import com.google.inject.internal.util.Iterables;
 import java.util.List;
 
-import com.google.inject.internal.Iterables;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
 import junit.framework.TestCase;
diff --git a/test/com/google/inject/MethodInterceptionTest.java b/test/com/google/inject/MethodInterceptionTest.java
index 9bffde6..a10ebf0 100644
--- a/test/com/google/inject/MethodInterceptionTest.java
+++ b/test/com/google/inject/MethodInterceptionTest.java
@@ -16,8 +16,8 @@
 
 package com.google.inject;
 
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableMap;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableMap;
 import com.google.inject.matcher.Matchers;
 import static com.google.inject.matcher.Matchers.only;
 import com.google.inject.spi.ConstructorBinding;
diff --git a/test/com/google/inject/ParentInjectorTest.java b/test/com/google/inject/ParentInjectorTest.java
index f21e49c..7eea191 100644
--- a/test/com/google/inject/ParentInjectorTest.java
+++ b/test/com/google/inject/ParentInjectorTest.java
@@ -17,7 +17,7 @@
 package com.google.inject;
 
 import static com.google.inject.Asserts.assertContains;
-import com.google.inject.internal.ImmutableList;
+import com.google.inject.internal.util.ImmutableList;
 import com.google.inject.matcher.Matchers;
 import com.google.inject.name.Names;
 import com.google.inject.spi.TypeConverter;
diff --git a/test/com/google/inject/PrivateModuleTest.java b/test/com/google/inject/PrivateModuleTest.java
index 3c8fd4d..f93e34f 100644
--- a/test/com/google/inject/PrivateModuleTest.java
+++ b/test/com/google/inject/PrivateModuleTest.java
@@ -17,7 +17,7 @@
 package com.google.inject;
 
 import static com.google.inject.Asserts.assertContains;
-import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
 import static com.google.inject.name.Names.named;
diff --git a/test/com/google/inject/ScopesTest.java b/test/com/google/inject/ScopesTest.java
index 4af8398..a714d61 100644
--- a/test/com/google/inject/ScopesTest.java
+++ b/test/com/google/inject/ScopesTest.java
@@ -17,8 +17,8 @@
 package com.google.inject;
 
 import static com.google.inject.Asserts.assertContains;
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.Maps;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.Maps;
 import com.google.inject.name.Named;
 import static com.google.inject.name.Names.named;
 import com.google.inject.spi.Element;
diff --git a/test/com/google/inject/TypeConversionTest.java b/test/com/google/inject/TypeConversionTest.java
index 142e3fd..ead3c99 100644
--- a/test/com/google/inject/TypeConversionTest.java
+++ b/test/com/google/inject/TypeConversionTest.java
@@ -17,7 +17,7 @@
 package com.google.inject;
 
 import static com.google.inject.Asserts.assertContains;
-import com.google.inject.internal.Iterables;
+import com.google.inject.internal.util.Iterables;
 import com.google.inject.matcher.Matchers;
 import com.google.inject.spi.TypeConverter;
 import java.lang.annotation.Retention;
diff --git a/test/com/google/inject/TypeListenerTest.java b/test/com/google/inject/TypeListenerTest.java
index a23dcdf..aafd248 100644
--- a/test/com/google/inject/TypeListenerTest.java
+++ b/test/com/google/inject/TypeListenerTest.java
@@ -17,8 +17,8 @@
 package com.google.inject;
 
 import static com.google.inject.Asserts.assertContains;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.matcher.Matcher;
 import com.google.inject.matcher.Matchers;
 import static com.google.inject.matcher.Matchers.any;
diff --git a/test/com/google/inject/TypeLiteralTest.java b/test/com/google/inject/TypeLiteralTest.java
index 2584c2d..a0f2976 100644
--- a/test/com/google/inject/TypeLiteralTest.java
+++ b/test/com/google/inject/TypeLiteralTest.java
@@ -18,7 +18,7 @@
 
 import static com.google.inject.Asserts.assertEqualsBothWays;
 import static com.google.inject.Asserts.assertNotSerializable;
-import com.google.inject.internal.ImmutableList;
+import com.google.inject.internal.util.ImmutableList;
 import com.google.inject.util.Types;
 import java.io.IOException;
 import java.lang.reflect.Type;
diff --git a/test/com/google/inject/TypeLiteralTypeResolutionTest.java b/test/com/google/inject/TypeLiteralTypeResolutionTest.java
index 5e8db2b..7403709 100644
--- a/test/com/google/inject/TypeLiteralTypeResolutionTest.java
+++ b/test/com/google/inject/TypeLiteralTypeResolutionTest.java
@@ -18,7 +18,7 @@
 
 import static com.google.inject.Asserts.assertEqualsBothWays;
 import static com.google.inject.Asserts.assertNotSerializable;
-import com.google.inject.internal.ImmutableList;
+import com.google.inject.internal.util.ImmutableList;
 import com.google.inject.util.Types;
 import static com.google.inject.util.Types.arrayOf;
 import static com.google.inject.util.Types.listOf;
diff --git a/test/com/google/inject/internal/ProxyFactoryTest.java b/test/com/google/inject/internal/ProxyFactoryTest.java
index c516d66..bcfa610 100644
--- a/test/com/google/inject/internal/ProxyFactoryTest.java
+++ b/test/com/google/inject/internal/ProxyFactoryTest.java
@@ -21,6 +21,8 @@
 import static com.google.inject.matcher.Matchers.any;
 import static com.google.inject.matcher.Matchers.not;
 import static com.google.inject.matcher.Matchers.only;
+
+import com.google.inject.internal.util.Lists;
 import com.google.inject.spi.InjectionPoint;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/test/com/google/inject/internal/FinalizableReferenceQueueTest.java b/test/com/google/inject/internal/util/FinalizableReferenceQueueTest.java
similarity index 94%
rename from test/com/google/inject/internal/FinalizableReferenceQueueTest.java
rename to test/com/google/inject/internal/util/FinalizableReferenceQueueTest.java
index eb66ea6..779f3b4 100644
--- a/test/com/google/inject/internal/FinalizableReferenceQueueTest.java
+++ b/test/com/google/inject/internal/util/FinalizableReferenceQueueTest.java
@@ -1,5 +1,8 @@
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.util.FinalizableReferenceQueue;
+import com.google.inject.internal.util.FinalizableWeakReference;
+import com.google.inject.internal.util.Finalizer;
 import java.lang.ref.ReferenceQueue;
 import java.lang.ref.WeakReference;
 import java.net.URL;
diff --git a/test/com/google/inject/internal/ForwardingCollection.java b/test/com/google/inject/internal/util/ForwardingCollection.java
similarity index 95%
rename from test/com/google/inject/internal/ForwardingCollection.java
rename to test/com/google/inject/internal/util/ForwardingCollection.java
index 56d7d2f..7e1e019 100644
--- a/test/com/google/inject/internal/ForwardingCollection.java
+++ b/test/com/google/inject/internal/util/ForwardingCollection.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import static com.google.inject.internal.Preconditions.checkNotNull;
+import static com.google.inject.internal.util.Preconditions.checkNotNull;
 
 import java.util.Collection;
 import java.util.Iterator;
diff --git a/test/com/google/inject/internal/ForwardingConcurrentMap.java b/test/com/google/inject/internal/util/ForwardingConcurrentMap.java
similarity index 97%
rename from test/com/google/inject/internal/ForwardingConcurrentMap.java
rename to test/com/google/inject/internal/util/ForwardingConcurrentMap.java
index 91db495..f179af6 100644
--- a/test/com/google/inject/internal/ForwardingConcurrentMap.java
+++ b/test/com/google/inject/internal/util/ForwardingConcurrentMap.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.util.concurrent.ConcurrentMap;
 
diff --git a/test/com/google/inject/internal/ForwardingMap.java b/test/com/google/inject/internal/util/ForwardingMap.java
similarity index 98%
rename from test/com/google/inject/internal/ForwardingMap.java
rename to test/com/google/inject/internal/util/ForwardingMap.java
index c73d634..b4f79d4 100644
--- a/test/com/google/inject/internal/ForwardingMap.java
+++ b/test/com/google/inject/internal/util/ForwardingMap.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import com.google.inject.internal.Nullable;
 
diff --git a/test/com/google/inject/internal/ForwardingObject.java b/test/com/google/inject/internal/util/ForwardingObject.java
similarity index 98%
rename from test/com/google/inject/internal/ForwardingObject.java
rename to test/com/google/inject/internal/util/ForwardingObject.java
index f41898a..74c6399 100644
--- a/test/com/google/inject/internal/ForwardingObject.java
+++ b/test/com/google/inject/internal/util/ForwardingObject.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import java.io.Serializable;
 
diff --git a/test/com/google/inject/internal/ForwardingSet.java b/test/com/google/inject/internal/util/ForwardingSet.java
similarity index 96%
rename from test/com/google/inject/internal/ForwardingSet.java
rename to test/com/google/inject/internal/util/ForwardingSet.java
index 0e352c3..f9bfd47 100644
--- a/test/com/google/inject/internal/ForwardingSet.java
+++ b/test/com/google/inject/internal/util/ForwardingSet.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import com.google.inject.internal.Nullable;
 
diff --git a/test/com/google/inject/internal/Jsr166HashMap.java b/test/com/google/inject/internal/util/Jsr166HashMap.java
similarity index 96%
rename from test/com/google/inject/internal/Jsr166HashMap.java
rename to test/com/google/inject/internal/util/Jsr166HashMap.java
index a176720..b65e62f 100644
--- a/test/com/google/inject/internal/Jsr166HashMap.java
+++ b/test/com/google/inject/internal/util/Jsr166HashMap.java
@@ -6,15 +6,17 @@
  * Pat Fisher, Mike Judd.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.util.ForwardingConcurrentMap;
+import com.google.inject.internal.util.CustomConcurrentHashMap;
 import java.io.Serializable;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
 
 /**
  * A copy of {@link java.util.concurrent.ConcurrentHashMap} used to test {@link
- * com.google.inject.internal.CustomConcurrentHashMap}. This also serves
+ * com.google.inject.internal.util.CustomConcurrentHashMap}. This also serves
  * as the examples in the CustomConcurrentHashMap Javadocs.
  */
 public class Jsr166HashMap<K, V> extends ForwardingConcurrentMap<K, V>
diff --git a/test/com/google/inject/internal/Jsr166HashMapTest.java b/test/com/google/inject/internal/util/Jsr166HashMapTest.java
similarity index 99%
rename from test/com/google/inject/internal/Jsr166HashMapTest.java
rename to test/com/google/inject/internal/util/Jsr166HashMapTest.java
index a337fdd..6e6ed4f 100644
--- a/test/com/google/inject/internal/Jsr166HashMapTest.java
+++ b/test/com/google/inject/internal/util/Jsr166HashMapTest.java
@@ -6,8 +6,9 @@
  * Pat Fisher, Mike Judd.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
+import com.google.inject.internal.util.Jsr166HashMap;
 import junit.framework.TestCase;
 
 import java.io.BufferedInputStream;
diff --git a/test/com/google/inject/internal/LineNumbersTest.java b/test/com/google/inject/internal/util/LineNumbersTest.java
similarity index 97%
rename from test/com/google/inject/internal/LineNumbersTest.java
rename to test/com/google/inject/internal/util/LineNumbersTest.java
index 70fa036..8931cab 100644
--- a/test/com/google/inject/internal/LineNumbersTest.java
+++ b/test/com/google/inject/internal/util/LineNumbersTest.java
@@ -14,8 +14,7 @@
  * limitations under the License.
  */
 
-
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
 import com.google.inject.AbstractModule;
 import static com.google.inject.Asserts.assertContains;
diff --git a/test/com/google/inject/internal/MapMakerTestSuite.java b/test/com/google/inject/internal/util/MapMakerTestSuite.java
similarity index 98%
rename from test/com/google/inject/internal/MapMakerTestSuite.java
rename to test/com/google/inject/internal/util/MapMakerTestSuite.java
index fda27ff..2f14af2 100644
--- a/test/com/google/inject/internal/MapMakerTestSuite.java
+++ b/test/com/google/inject/internal/util/MapMakerTestSuite.java
@@ -14,9 +14,15 @@
  * limitations under the License.
  */
 
-package com.google.inject.internal;
+package com.google.inject.internal.util;
 
-import com.google.inject.internal.CustomConcurrentHashMap.Impl;
+import com.google.inject.internal.Function;
+import com.google.inject.internal.Nullable;
+import com.google.inject.internal.util.ComputationException;
+import com.google.inject.internal.util.CustomConcurrentHashMap.Impl;
+import com.google.inject.internal.util.ExpirationTimer;
+import com.google.inject.internal.util.MapMaker;
+import com.google.inject.internal.util.Maps;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
diff --git a/test/com/google/inject/name/NamesTest.java b/test/com/google/inject/name/NamesTest.java
index 9e00190..6812b7b 100644
--- a/test/com/google/inject/name/NamesTest.java
+++ b/test/com/google/inject/name/NamesTest.java
@@ -23,7 +23,7 @@
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.internal.ImmutableMap;
+import com.google.inject.internal.util.ImmutableMap;
 import java.io.IOException;
 import java.util.Map;
 import java.util.Properties;
diff --git a/test/com/google/inject/spi/ElementsTest.java b/test/com/google/inject/spi/ElementsTest.java
index 56a401b..aa1777d 100644
--- a/test/com/google/inject/spi/ElementsTest.java
+++ b/test/com/google/inject/spi/ElementsTest.java
@@ -35,9 +35,10 @@
 import com.google.inject.binder.AnnotatedConstantBindingBuilder;
 import com.google.inject.binder.ConstantBindingBuilder;
 import com.google.inject.binder.ScopedBindingBuilder;
-import com.google.inject.internal.ImmutableMap;
-import com.google.inject.internal.ImmutableSet;
-import static com.google.inject.internal.Iterables.getOnlyElement;
+import com.google.inject.internal.util.ImmutableMap;
+import com.google.inject.internal.util.ImmutableSet;
+import static com.google.inject.internal.util.Iterables.getOnlyElement;
+
 import com.google.inject.matcher.Matcher;
 import com.google.inject.matcher.Matchers;
 import com.google.inject.name.Named;
diff --git a/test/com/google/inject/spi/HasDependenciesTest.java b/test/com/google/inject/spi/HasDependenciesTest.java
index 9bd30d2..b164a85 100644
--- a/test/com/google/inject/spi/HasDependenciesTest.java
+++ b/test/com/google/inject/spi/HasDependenciesTest.java
@@ -22,8 +22,8 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.Provider;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Iterables;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Iterables;
 import java.util.Set;
 import junit.framework.TestCase;
 
diff --git a/test/com/google/inject/spi/InjectionPointTest.java b/test/com/google/inject/spi/InjectionPointTest.java
index d3362e6..2e5262f 100644
--- a/test/com/google/inject/spi/InjectionPointTest.java
+++ b/test/com/google/inject/spi/InjectionPointTest.java
@@ -24,9 +24,10 @@
 import com.google.inject.Key;
 import com.google.inject.TypeLiteral;
 import com.google.inject.internal.ErrorsException;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableSet;
-import static com.google.inject.internal.Iterables.getOnlyElement;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
+import static com.google.inject.internal.util.Iterables.getOnlyElement;
+
 import com.google.inject.name.Named;
 import static com.google.inject.name.Names.named;
 import java.io.IOException;
diff --git a/test/com/google/inject/spi/ModuleRewriterTest.java b/test/com/google/inject/spi/ModuleRewriterTest.java
index 8984729..0baff33 100644
--- a/test/com/google/inject/spi/ModuleRewriterTest.java
+++ b/test/com/google/inject/spi/ModuleRewriterTest.java
@@ -25,7 +25,7 @@
 import com.google.inject.Key;
 import com.google.inject.Module;
 import com.google.inject.Provider;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.name.Names;
 import java.util.List;
 import junit.framework.TestCase;
diff --git a/test/com/google/inject/spi/ProviderMethodsTest.java b/test/com/google/inject/spi/ProviderMethodsTest.java
index 77e7bd0..8d2bad4 100644
--- a/test/com/google/inject/spi/ProviderMethodsTest.java
+++ b/test/com/google/inject/spi/ProviderMethodsTest.java
@@ -19,7 +19,6 @@
 import com.google.inject.AbstractModule;
 import static com.google.inject.Asserts.assertContains;
 import com.google.inject.Binder;
-import com.google.inject.Binding;
 import com.google.inject.BindingAnnotation;
 import com.google.inject.CreationException;
 import com.google.inject.Guice;
@@ -30,8 +29,8 @@
 import com.google.inject.Provider;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
-import com.google.inject.internal.ImmutableList;
-import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.util.ImmutableList;
+import com.google.inject.internal.util.ImmutableSet;
 import com.google.inject.internal.ProviderMethod;
 import com.google.inject.internal.ProviderMethodsModule;
 import com.google.inject.name.Named;
diff --git a/test/com/google/inject/spi/SpiBindingsTest.java b/test/com/google/inject/spi/SpiBindingsTest.java
index ae62f02..7367cee 100644
--- a/test/com/google/inject/spi/SpiBindingsTest.java
+++ b/test/com/google/inject/spi/SpiBindingsTest.java
@@ -29,8 +29,8 @@
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.Stage;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.Lists;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.Lists;
 import com.google.inject.name.Names;
 import java.lang.reflect.Constructor;
 import java.util.Collections;
diff --git a/test/com/googlecode/guice/StrictContainerTestSuite.java b/test/com/googlecode/guice/StrictContainerTestSuite.java
index e40c260..906609c 100644
--- a/test/com/googlecode/guice/StrictContainerTestSuite.java
+++ b/test/com/googlecode/guice/StrictContainerTestSuite.java
@@ -17,10 +17,10 @@
 package com.googlecode.guice;
 
 import com.google.inject.AllTests;
-import com.google.inject.internal.ImmutableSet;
-import com.google.inject.internal.MapMakerTestSuite;
-import com.google.inject.internal.MapMakerTestSuite.ReferenceMapTest;
-import com.google.inject.internal.MapMakerTestSuite.ComputingTest;
+import com.google.inject.internal.util.ImmutableSet;
+import com.google.inject.internal.util.MapMakerTestSuite;
+import com.google.inject.internal.util.MapMakerTestSuite.ReferenceMapTest;
+import com.google.inject.internal.util.MapMakerTestSuite.ComputingTest;
 import java.io.FilePermission;
 import java.security.AccessControlException;
 import java.security.Permission;