More cleanup of Errors -- including sources as a factory method rather than push/pop methods (that require try/finally clauses)

I'll want to get this for InjectionPoints sooner or later also.

Also merging AddMessageCommand and AddThrowableErrorCommand, with a command that ads an spi.Message.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@532 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/src/com/google/inject/RequestStaticInjectionCommandProcessor.java b/src/com/google/inject/RequestStaticInjectionCommandProcessor.java
index a2ba1a3..132ff54 100644
--- a/src/com/google/inject/RequestStaticInjectionCommandProcessor.java
+++ b/src/com/google/inject/RequestStaticInjectionCommandProcessor.java
@@ -68,15 +68,11 @@
     }
 
     void validate(final InjectorImpl injector) {
-      errors.pushSource(source);
-      try {
-        injector.addSingleInjectorsForFields(
-            type.getDeclaredFields(), true, memberInjectors, errors);
-        injector.addSingleInjectorsForMethods(
-            type.getDeclaredMethods(), true, memberInjectors, errors);
-      } finally {
-        errors.popSource(source);
-      }
+      Errors errorsForMember = errors.withSource(source);
+      injector.addSingleInjectorsForFields(
+          type.getDeclaredFields(), true, memberInjectors, errorsForMember);
+      injector.addSingleInjectorsForMethods(
+          type.getDeclaredMethods(), true, memberInjectors, errorsForMember);
     }
 
     void injectMembers(InjectorImpl injector) {