Author: sco...@google.com
Date: Thu Apr  2 13:49:05 2009
New Revision: 5171

Added:
    trunk/user/src/com/google/gwt/i18n/rebind/ClearStaticData.java
Modified:
    trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
    trunk/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
    trunk/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
    trunk/user/src/com/google/gwt/i18n/server/GwtLocaleFactoryImpl.java

Log:
HACK: compiler clears out pinned i18n static data to free memory.
TODO: make i18n.rebind not pin static state.

Review by: jat

Modified:  
trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
==============================================================================
--- trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java     
 
(original)
+++ trunk/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java     
 
Thu Apr  2 13:49:05 2009
@@ -369,6 +369,14 @@
      if (!options.isCompilationStateRetained()) {
        module.clear();
      }
+    try {
+      // HACK: Make i18n free its internal static state.
+      Class<?> clazz = Class.forName(
+          "com.google.gwt.i18n.rebind.ClearStaticData", false,
+          Thread.currentThread().getContextClassLoader());
+      clazz.getDeclaredMethod("clear").invoke(null);
+    } catch (Throwable e) {
+    }

      // Check for compilation problems. We don't log here because any  
problems
      // found here will have already been logged by AbstractCompiler.

Added: trunk/user/src/com/google/gwt/i18n/rebind/ClearStaticData.java
==============================================================================
--- (empty file)
+++ trunk/user/src/com/google/gwt/i18n/rebind/ClearStaticData.java      Thu Apr 
  
2 13:49:05 2009
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
+ * use this file except in compliance with the License. You may obtain a  
copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations  
under
+ * the License.
+ */
+package com.google.gwt.i18n.rebind;
+
+/**
+ * HACK: Allows clearing accumulated static state.
+ *
+ * TODO(jat): Make i18n.rebind not pin static state.
+ */
+public class ClearStaticData {
+  public static void clear() {
+    ResourceFactory.clearCache();
+    LocaleUtils.clear();
+  }
+}

Modified: trunk/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
==============================================================================
--- trunk/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java  (original)
+++ trunk/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java  Thu Apr  2  
13:49:05 2009
@@ -32,7 +32,7 @@
  public class LocaleUtils {
    // TODO(jat): rewrite to avoid statics

-  private static GwtLocaleFactory factory = new GwtLocaleFactoryImpl();
+  private static final GwtLocaleFactoryImpl factory = new  
GwtLocaleFactoryImpl();

    /**
     * The token representing the locale property controlling Localization.
@@ -46,11 +46,19 @@

    private static GwtLocale compileLocale;

-  private static Set<GwtLocale> allLocales = new HashSet<GwtLocale>();
+  private static final Set<GwtLocale> allLocales = new  
HashSet<GwtLocale>();

-  private static Set<GwtLocale> allCompileLocales = new  
HashSet<GwtLocale>();
-
-  private static Set<GwtLocale> runtimeLocales = new HashSet<GwtLocale>();
+  private static final Set<GwtLocale> allCompileLocales = new  
HashSet<GwtLocale>();
+
+  private static final Set<GwtLocale> runtimeLocales = new  
HashSet<GwtLocale>();
+
+  public static void clear() {
+    allCompileLocales.clear();
+    allLocales.clear();
+    compileLocale = null;
+    factory.clear();
+    runtimeLocales.clear();
+  }

    /**
     * Returns the set of all compile-time locales.
@@ -112,9 +120,9 @@
          return;
        }
        compileLocale = newCompileLocale;
-      allLocales = new HashSet<GwtLocale>();
-      allCompileLocales = new HashSet<GwtLocale>();
-      runtimeLocales = new HashSet<GwtLocale>();
+      allLocales.clear();
+      allCompileLocales.clear();
+      runtimeLocales.clear();
        String[] localeValues = propertyOracle.getPropertyValueSet(logger,
            PROP_LOCALE);
        String rtLocaleNames = propertyOracle.getPropertyValue(logger,

Modified:  
trunk/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
==============================================================================
--- trunk/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java  
(original)
+++ trunk/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java Thu  
Apr  2 13:49:05 2009
@@ -94,13 +94,13 @@
      }
      return generate(logger, context, typeName, locale);
    }
-
+
    public final String generate(TreeLogger logger, GeneratorContext context,
        String typeName, String localeName) throws UnableToCompleteException  
{
      // Clear cache if reset was done.
      TypeOracle typeOracle = context.getTypeOracle();
      if (lastReloadCount != typeOracle.getReloadCount()) {
-      ResourceFactory.clearCache();
+      ClearStaticData.clear();
        lastReloadCount = typeOracle.getReloadCount();
      }


Modified:  
trunk/user/src/com/google/gwt/i18n/server/GwtLocaleFactoryImpl.java
==============================================================================
--- trunk/user/src/com/google/gwt/i18n/server/GwtLocaleFactoryImpl.java  
(original)
+++ trunk/user/src/com/google/gwt/i18n/server/GwtLocaleFactoryImpl.java Thu  
Apr  2 13:49:05 2009
@@ -68,6 +68,10 @@
    // one is used instead to preserved cached data structures.
    private Map<GwtLocaleImpl, GwtLocaleImpl> instanceCache = new  
HashMap<GwtLocaleImpl, GwtLocaleImpl>();

+  public void clear() {
+    instanceCache.clear();
+  }
+
    public GwtLocale fromComponents(String language, String script,
        String region, String variant) {
      if (language != null && language.length() == 0) {

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to