Bridge methods should use the same source info (and param names) as the bridged-to method.
Review by: spoon
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7476 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JParameter.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JParameter.java
index f3c4971..c68ee51 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JParameter.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JParameter.java
@@ -38,7 +38,7 @@
private final JMethod enclosingMethod;
private final boolean isThis;
- JParameter(SourceInfo info, String name, JType type, boolean isFinal,
+ public JParameter(SourceInfo info, String name, JType type, boolean isFinal,
boolean isThis, JMethod enclosingMethod) {
super(info, name, type, isFinal);
this.enclosingMethod = enclosingMethod;
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
index 156418b..0b32c72 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
@@ -2027,9 +2027,8 @@
*/
private void createBridgeMethod(JClassType clazz,
SyntheticMethodBinding jdtBridgeMethod, JMethod implmeth) {
- SourceInfo info = program.createSourceInfoSynthetic(
+ SourceInfo info = implmeth.getSourceInfo().makeChild(
GenerateJavaAST.class, "bridge method");
-
// create the method itself
JMethod bridgeMethod = program.createMethod(info,
jdtBridgeMethod.selector, clazz,
@@ -2037,28 +2036,25 @@
false, true, false, false);
bridgeMethod.setSynthetic();
int paramIdx = 0;
+ List<JParameter> implParams = implmeth.getParams();
for (TypeBinding jdtParamType : jdtBridgeMethod.parameters) {
- String paramName = "p" + paramIdx++;
+ JParameter param = implParams.get(paramIdx++);
JType paramType = (JType) typeMap.get(jdtParamType.erasure());
- program.createParameter(program.createSourceInfoSynthetic(
- GenerateJavaAST.class, "part of a bridge method"),
- paramName.toCharArray(), paramType, true, false, bridgeMethod);
+ JParameter newParam = new JParameter(param.getSourceInfo().makeChild(
+ GenerateJavaAST.class, "bridge method"), param.getName(),
+ paramType, true, false, bridgeMethod);
+ bridgeMethod.addParam(newParam);
}
bridgeMethod.freezeParamTypes();
// create a call
- JMethodCall call = new JMethodCall(program.createSourceInfoSynthetic(
- GenerateJavaAST.class, "call to inherited method"),
- program.getExprThisRef(program.createSourceInfoSynthetic(
- GenerateJavaAST.class, "part of a bridge method"), clazz),
- implmeth);
+ JMethodCall call = new JMethodCall(info, program.getExprThisRef(info,
+ clazz), implmeth);
for (int i = 0; i < bridgeMethod.getParams().size(); i++) {
JParameter param = bridgeMethod.getParams().get(i);
- JParameterRef paramRef = new JParameterRef(
- program.createSourceInfoSynthetic(GenerateJavaAST.class,
- "part of a bridge method"), param);
- call.addArg(maybeCast(implmeth.getParams().get(i).getType(), paramRef));
+ JParameterRef paramRef = new JParameterRef(info, param);
+ call.addArg(maybeCast(implParams.get(i).getType(), paramRef));
}
// wrap it in a return if necessary
@@ -2066,8 +2062,7 @@
if (bridgeMethod.getType() == program.getTypeVoid()) {
callOrReturn = call.makeStatement();
} else {
- callOrReturn = new JReturnStatement(program.createSourceInfoSynthetic(
- GenerateJavaAST.class, "part of a bridge method"), call);
+ callOrReturn = new JReturnStatement(info, call);
}
// create a body that is just that call