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."));
}
}