Reviewers: Lex,
Message:
Lex,
Please review.
Description:
SameParameterValueOptimizer should ignore methods called from native
code.
Please review this at http://gwt-code-reviews.appspot.com/141812
Affected files:
M
dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
M
dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
Index:
dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
diff --git
a/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
b/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
index
c22d483e43da32c220f52633b2b0594ee45f3cba..bdbf664616d1f68f92fa5c138c6940bf37d3483b
100644
---
a/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
+++
b/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
@@ -29,6 +29,8 @@ import com.google.gwt.dev.jjs.ast.JPrefixOperation;
import com.google.gwt.dev.jjs.ast.JProgram;
import com.google.gwt.dev.jjs.ast.JValueLiteral;
import com.google.gwt.dev.jjs.ast.JVisitor;
+import com.google.gwt.dev.jjs.ast.js.JsniMethodBody;
+import com.google.gwt.dev.jjs.ast.js.JsniMethodRef;
import java.util.HashSet;
import java.util.IdentityHashMap;
@@ -103,6 +105,13 @@ public class SameParameterValueOptimizer {
}
@Override
+ public void endVisit(JsniMethodBody x, Context ctx) {
+ for (JsniMethodRef methodRef : x.getJsniMethodRefs()) {
+ rescuedMethods.add(methodRef.getTarget());
+ }
+ }
+
+ @Override
public boolean visit(JMethod x, Context ctx) {
Set<JMethod> overrides = program.typeOracle.getAllOverrides(x);
if (!overrides.isEmpty()) {
Index:
dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
diff --git
a/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
b/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
index
036d71a2daa0362c76bfb294524d58cd2e99b114..196894be93c4fcd7ee7cea023d722bfe99c6cbae
100644
---
a/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
+++
b/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
@@ -52,6 +52,21 @@ public class SameParameterValueOptimizerTest extends
OptimizerTestBase {
" int j = 1;", "}");
}
+ public void testJsniReferenceSaveMethod() throws Exception {
+ addSnippetClassDecl(
+ "public static native void someStaticMethod() /*-{" +
+ " var foo = @test.EntryPoint::foo(Ljava/lang/String;)" +
+ "}-*/");
+
+ assertOptimize(
+ "foo",
+ "static void foo(String s) { String p = s; }",
+ "foo(\"\"); foo(\"\");").into(
+ "public static void foo(String s){",
+ " String p = s;",
+ "}");
+ }
+
private OptimizationResult assertOptimize(String methodName,
String methodDecl, String codeSnippet) throws
UnableToCompleteException {
addSnippetClassDecl(methodDecl);
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors