Makes java.util.logging.Logger optimize faster.

Patch reduces indirection on flag processing so they could
get their final value sooner and static eval earlier in the
optimization loop.

Change-Id: I409e0211433375c0248d47458efbaab82c54f783
diff --git a/user/super/com/google/gwt/emul/java/util/logging/Level.java b/user/super/com/google/gwt/emul/java/util/logging/Level.java
index d549f69..4fb6dec 100644
--- a/user/super/com/google/gwt/emul/java/util/logging/Level.java
+++ b/user/super/com/google/gwt/emul/java/util/logging/Level.java
@@ -82,8 +82,8 @@
   }
 
   public static Level parse(String name) {
-    Logger.assertLoggingValues();
-    if (System.getProperty("jre.logging.logLevel").equals("OFF")) {
+    // '==' instead of equals makes it compile out faster.
+    if (System.getProperty("jre.logging.logLevel") == "OFF") {
       return null;
     }
 
diff --git a/user/super/com/google/gwt/emul/java/util/logging/Logger.java b/user/super/com/google/gwt/emul/java/util/logging/Logger.java
index 2c0e0b0..acbbffd 100644
--- a/user/super/com/google/gwt/emul/java/util/logging/Logger.java
+++ b/user/super/com/google/gwt/emul/java/util/logging/Logger.java
@@ -27,14 +27,29 @@
 public class Logger {
   public static final String GLOBAL_LOGGER_NAME = "global";
 
-  private static final String LOG_LEVEL = System.getProperty("jre.logging.logLevel");
-  private static final boolean LOGGING_INFO = LOG_LEVEL.equals("INFO");
-  private static final boolean LOGGING_WARNING = LOG_LEVEL.equals("WARNING");
-  private static final boolean LOGGING_SEVERE = LOG_LEVEL.equals("SEVERE");
-  private static final boolean LOGGING_OFF = LOG_LEVEL.equals("OFF");
+  private static final boolean LOGGING_OFF;
+  private static final boolean ALL_ENABLED;
+  private static final boolean INFO_ENABLED;
+  private static final boolean WARNING_ENABLED;
+  private static final boolean SEVERE_ENABLED;
 
   static {
-    assertLoggingValues();
+    // '==' instead of equals makes it compile out faster.
+
+    String level = System.getProperty("jre.logging.logLevel");
+    if (level != "ALL"
+        && level != "INFO"
+        && level != "WARNING"
+        && level != "SEVERE"
+        && level != "OFF") {
+      throw new AssertionError("Undefined value for jre.logging.logLevel: '" + level + "'");
+    }
+
+    LOGGING_OFF = level == "OFF";
+    ALL_ENABLED = level == "ALL";
+    INFO_ENABLED = level == "ALL" || level == "INFO";
+    WARNING_ENABLED = level == "ALL" || level == "INFO" || level == "WARNING";
+    SEVERE_ENABLED = level == "ALL" || level == "INFO" || level == "WARNING" || level == "SEVERE";
   }
 
   public static Logger getGlobal() {
@@ -44,28 +59,13 @@
   public static Logger getLogger(String name) {
     // Use shortcut if logging is disabled to avoid parent logger creations in LogManager
     if (LOGGING_OFF) {
-      return new Logger(name, null);
+      return new Logger(null, null);
     }
     return LogManager.getLogManager().ensureLogger(name);
   }
 
-  static void assertLoggingValues() {
-    if (LOG_LEVEL.equals("ALL")
-        || LOG_LEVEL.equals("INFO")
-        || LOG_LEVEL.equals("WARNING")
-        || LOG_LEVEL.equals("SEVERE")
-        || LOG_LEVEL.equals("OFF")) {
-      return;
-    }
-
-    throw new AssertionError(
-        "Undefined value for jre.logging.logLevel: '"
-            + LOG_LEVEL
-            + "'. Allowed values are ALL, INFO, WARNING, SEVERE, OFF");
-  }
-
   private List<Handler> handlers;
-  private Level level = null;
+  private Level level;
   private String name;
   private Logger parent;  // Should never be null except in the RootLogger
   private boolean useParentHandlers;
@@ -88,98 +88,98 @@
   }
 
   public void config(String msg) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.CONFIG, msg);
   }
 
   public void config(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.CONFIG, msgSupplier);
   }
 
   public void fine(String msg) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.FINE, msg);
   }
 
   public void fine(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.FINE, msgSupplier);
   }
 
   public void finer(String msg) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.FINER, msg);
   }
 
   public void finer(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.FINER, msgSupplier);
   }
 
   public void finest(String msg) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.FINEST, msg);
   }
 
   public void finest(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING || LOGGING_INFO) {
+    if (!ALL_ENABLED) {
       return;
     }
     log(Level.FINEST, msgSupplier);
   }
 
   public void info(String msg) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING) {
+    if (!INFO_ENABLED) {
       return;
     }
     log(Level.INFO, msg);
   }
 
   public void info(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF || LOGGING_SEVERE || LOGGING_WARNING) {
+    if (!INFO_ENABLED) {
       return;
     }
     log(Level.INFO, msgSupplier);
   }
 
   public void warning(String msg) {
-    if (LOGGING_OFF || LOGGING_SEVERE) {
+    if (!WARNING_ENABLED) {
       return;
     }
     log(Level.WARNING, msg);
   }
 
   public void warning(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF || LOGGING_SEVERE) {
+    if (!WARNING_ENABLED) {
       return;
     }
     log(Level.WARNING, msgSupplier);
   }
 
   public void severe(String msg) {
-    if (LOGGING_OFF) {
+    if (!SEVERE_ENABLED) {
       return;
     }
     log(Level.SEVERE, msg);
   }
 
   public void severe(Supplier<String> msgSupplier) {
-    if (LOGGING_OFF) {
+    if (!SEVERE_ENABLED) {
       return;
     }
     log(Level.SEVERE, msgSupplier);
@@ -210,16 +210,16 @@
   }
 
   public boolean isLoggable(Level messageLevel) {
-    if (LOGGING_OFF) {
-      return false;
-    } else if (LOGGING_SEVERE) {
-      return messageLevel.intValue() >= Level.SEVERE.intValue();
-    } else if (LOGGING_WARNING) {
-      return messageLevel.intValue() >= Level.WARNING.intValue();
-    } else if (LOGGING_INFO) {
-      return messageLevel.intValue() >= Level.INFO.intValue();
-    } else {
+    if (ALL_ENABLED) {
       return messageLevel.intValue() >= getEffectiveLevel().intValue();
+    } else if (INFO_ENABLED) {
+      return messageLevel.intValue() >= Level.INFO.intValue();
+    } else if (WARNING_ENABLED) {
+      return messageLevel.intValue() >= Level.WARNING.intValue();
+    } else if (SEVERE_ENABLED) {
+      return messageLevel.intValue() >= Level.SEVERE.intValue();
+    } else {
+      return false;
     }
   }
 
@@ -339,4 +339,4 @@
   // public void logrb(Level level, String sourceClass, String sourceMethod, String bundleName, String msg, Object[] params) {}
   // public void logrb(Level level, String sourceClass, String sourceMethod, String bundleName, String msg, Throwable thrown) {}
   // public void throwing(String sourceClass, String sourceMethod, Throwable thrown) {}
-}
\ No newline at end of file
+}