Fix the FastClassByGuice LineNumbers problem by using the natural constructor rather than the synthetic one when generating LineNumbers.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@443 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/src/com/google/inject/ProxyFactory.java b/src/com/google/inject/ProxyFactory.java
index ae3aabd..6ad31ef 100644
--- a/src/com/google/inject/ProxyFactory.java
+++ b/src/com/google/inject/ProxyFactory.java
@@ -158,17 +158,17 @@
     // Store callbacks.
     Enhancer.registerStaticCallbacks(proxied, callbacks);
 
-    return createConstructionProxy(proxied, constructor.getParameterTypes());
+    return createConstructionProxy(proxied, constructor);
   }
 
   /**
    * Creates a construction proxy given a class and parameter types.
    */
-  <T> ConstructionProxy<T> createConstructionProxy(Class<?> clazz,
-      Class[] parameterTypes) {
+  private <T> ConstructionProxy<T> createConstructionProxy(final Class<?> clazz,
+      final Constructor standardConstructor) {
     FastClass fastClass = GuiceFastClass.create(clazz);
     final FastConstructor fastConstructor
-        = fastClass.getConstructor(parameterTypes);
+        = fastClass.getConstructor(standardConstructor.getParameterTypes());
     return new ConstructionProxy<T>() {
       @SuppressWarnings("unchecked")
       public T newInstance(Object... arguments)
@@ -181,7 +181,7 @@
       }
 
       public Member getMember() {
-        return fastConstructor.getJavaConstructor();
+        return standardConstructor;
       }
     };
   }
diff --git a/src/com/google/inject/internal/ConstructionProxy.java b/src/com/google/inject/internal/ConstructionProxy.java
index 1d5b386..437bd2b 100644
--- a/src/com/google/inject/internal/ConstructionProxy.java
+++ b/src/com/google/inject/internal/ConstructionProxy.java
@@ -37,5 +37,10 @@
 
   List<Parameter<?>> getParameters();
 
+  /**
+   * Returns the injected method or constructor. If the injected member is
+   * synthetic (such as generated code for method interception), the natural
+   * constructor is returned.
+   */
   Member getMember();
 }
diff --git a/test/com/google/inject/internal/LineNumbersTest.java b/test/com/google/inject/internal/LineNumbersTest.java
index fb026dd..eaf5981 100644
--- a/test/com/google/inject/internal/LineNumbersTest.java
+++ b/test/com/google/inject/internal/LineNumbersTest.java
@@ -35,8 +35,7 @@
     try {
       Guice.createInjector(new AbstractModule() {
         protected void configure() {
-          bindInterceptor(Matchers.only(A.class),
-              Matchers.any(),
+          bindInterceptor(Matchers.only(A.class), Matchers.any(),
               new MethodInterceptor() {
                 public Object invoke(MethodInvocation methodInvocation) {
                   return null;
@@ -48,8 +47,8 @@
       });
       fail();
     } catch (CreationException expected) {
-      assertTrue(expected.getMessage().contains("No bindings to that type were found."));
       assertTrue(expected.getMessage().contains("LineNumbersTest$B"));
+      assertTrue(expected.getMessage().contains("No bindings to that type were found."));
     }
   }