All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.dev.javac.UnitCacheSingleton Maven / Gradle / Ivy

/*
 * Copyright 2011 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.dev.javac;

import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;

import java.io.File;

/**
 * Lazily creates a singleton cache for {@link CompilationUnit} instances.
 */
public class UnitCacheSingleton {

  public static final String GWT_PERSISTENTUNITCACHE = "gwt.persistentunitcache";

  /**
   * The API must be enabled explicitly for persistent caching to be live.
   */
  private static final String configPropertyValue = System.getProperty(GWT_PERSISTENTUNITCACHE,
      "true");
  private static final boolean usePersistent = configPropertyValue.length() == 0
      || Boolean.parseBoolean(configPropertyValue);
  private static UnitCache instance = null;

  /**
   * If the cache is enabled, instantiates the cache and begins loading units
   * into memory in a background thread. If the cache is not enabled, it clears
   * out any old cached files.
   *
   * Only one instance of the cache is instantiated. If a previously created
   * cache exists, the previous instance is returned.
   */
  public static synchronized UnitCache get(TreeLogger logger, File cacheDir) {
    assert logger != null;
    if (instance == null) {
      if (usePersistent) {
        String dirProp = "gwt.persistentunitcachedir";
        String propertyCacheDir = System.getProperty(dirProp);
        if (propertyCacheDir != null) {
          cacheDir = new File(propertyCacheDir);
        } else if (cacheDir == null) {
          logger.log(TreeLogger.TRACE, "Persistent caching disabled - no directory specified.\n"
              + "To enable persistent unit caching use -Dgwt.persistentunitcachedir=");
        }
        if (cacheDir != null) {
          try {
            instance = new PersistentUnitCache(logger, cacheDir);
            return instance;
          } catch (UnableToCompleteException ignored) {
          }
        }
      }
      // Fallback - use in-memory only cache.
      instance = new MemoryUnitCache();
    }
    return instance;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy