Updates the list of aggressive optimizations to be those
added within the last year.

Review at http://gwt-code-reviews.appspot.com/406801

Review by: scottb@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7978 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index 6ba5944..90cf5df 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -280,7 +280,7 @@
       EvalFunctionsAtTopScope.exec(jsProgram, map);
 
       // (9) Optimize the JS AST.
-      if (options.isAggressivelyOptimize()) {
+      if (!options.isDraftCompile()) {
         boolean didChange;
         do {
           if (Thread.interrupted()) {
@@ -304,7 +304,7 @@
 
       // (10) Split up the program into fragments
       SyntheticArtifact dependencies = null;
-      if (options.isAggressivelyOptimize() && options.isRunAsyncEnabled()) {
+      if (options.isRunAsyncEnabled()) {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         CodeSplitter.exec(logger, jprogram, jsProgram, map,
             chooseDependencyRecorder(options.isSoycEnabled(), baos));
@@ -323,15 +323,17 @@
         case OBFUSCATED:
           obfuscateMap = JsStringInterner.exec(jprogram, jsProgram);
           JsObfuscateNamer.exec(jsProgram);
-          if (JsStackEmulator.getStackMode(propertyOracles) == JsStackEmulator.StackMode.STRIP) {
-            boolean changed = false;
-            for (int i = 0; i < jsProgram.getFragmentCount(); i++) {
-              JsBlock fragment = jsProgram.getFragmentBlock(i);
-              changed = JsDuplicateFunctionRemover.exec(jsProgram, fragment)
-                  || changed;
-            }
-            if (changed) {
-              JsUnusedFunctionRemover.exec(jsProgram);
+          if (options.isAggressivelyOptimize()) {
+            if (JsStackEmulator.getStackMode(propertyOracles) == JsStackEmulator.StackMode.STRIP) {
+              boolean changed = false;
+              for (int i = 0; i < jsProgram.getFragmentCount(); i++) {
+                JsBlock fragment = jsProgram.getFragmentBlock(i);
+                changed = JsDuplicateFunctionRemover.exec(jsProgram, fragment)
+                    || changed;
+              }
+              if (changed) {
+                JsUnusedFunctionRemover.exec(jsProgram);
+              }
             }
           }
           break;
@@ -529,7 +531,7 @@
       ReplaceRebinds.exec(logger, jprogram, rpo);
 
       // Fix up GWT.runAsync()
-      if (options.isAggressivelyOptimize() && options.isRunAsyncEnabled()) {
+      if (options.isRunAsyncEnabled()) {
         ReplaceRunAsyncs.exec(logger, jprogram);
         CodeSplitter.pickInitialLoadSequence(logger, jprogram,
             module.getProperties());
@@ -673,10 +675,10 @@
     // dead code removal??
     didChange = DeadCodeElimination.exec(jprogram) || didChange;
 
-    if (isAggressivelyOptimize) {
-      // inlining
-      didChange = MethodInliner.exec(jprogram) || didChange;
+    // inlining
+    didChange = MethodInliner.exec(jprogram) || didChange;
 
+    if (isAggressivelyOptimize) {
       // remove same parameters value
       didChange = SameParameterValueOptimizer.exec(jprogram) || didChange;
     }
@@ -924,7 +926,8 @@
       JsFunctionClusterer clusterer = new JsFunctionClusterer(out.toString(),
           v.getStatementRanges());
       // only cluster for obfuscated mode
-      if (options.getOutput() == JsOutputOption.OBFUSCATED) {
+      if (options.isAggressivelyOptimize()
+          && options.getOutput() == JsOutputOption.OBFUSCATED) {
         clusterer.exec();
       }
       // rewrite top-level blocks to limit the number of statements