Fixes a problem in type pruning where removing a type would cause it to skip the next type. Also early-outs method upref rescue.
Suggested by: alex.tkachman
Review by: mmendez
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1035 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java b/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java
index 47a6d17..984b31f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/Pruner.java
@@ -182,13 +182,13 @@
// @Override
public boolean visit(JProgram program, Context ctx) {
- for (int i = 0; i < program.getDeclaredTypes().size(); ++i) {
- JReferenceType type = (JReferenceType) program.getDeclaredTypes().get(i);
+ for (Iterator it = program.getDeclaredTypes().iterator(); it.hasNext(); ) {
+ JReferenceType type = (JReferenceType) it.next();
if (referencedTypes.contains(type)
|| program.typeOracle.isInstantiatedType(type)) {
accept(type);
} else {
- program.getDeclaredTypes().remove(type);
+ it.remove();
didChange = true;
}
}
@@ -619,14 +619,18 @@
for (int i = 0; i < x.overrides.size(); ++i) {
JMethod ref = (JMethod) x.overrides.get(i);
if (referencedNonTypes.contains(ref)) {
- didRescue |= rescuer.rescue(x);
+ rescuer.rescue(x);
+ didRescue = true;
+ return false;
}
}
JMethod[] virtualOverrides = program.typeOracle.getAllVirtualOverrides(x);
for (int i = 0; i < virtualOverrides.length; ++i) {
JMethod ref = virtualOverrides[i];
if (referencedNonTypes.contains(ref)) {
- didRescue |= rescuer.rescue(x);
+ rescuer.rescue(x);
+ didRescue = true;
+ return false;
}
}
return false;