From 20dc05e679bb9563d85d37c33eeba9b47718eb0d Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 9 Jul 2012 15:37:18 +0400 Subject: [PATCH] Use soft reference for expensive cash in TranslationUtils Also move member in RhinoUtils --- .../org/jetbrains/k2js/test/rhino/RhinoUtils.java | 9 ++++----- .../k2js/test/utils/TranslationUtils.java | 15 +++++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java b/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java index a429694fab0..661d3fa1dc3 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java @@ -18,7 +18,6 @@ package org.jetbrains.k2js.test.rhino; import closurecompiler.internal.com.google.common.collect.Maps; import com.google.common.base.Supplier; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; @@ -70,6 +69,9 @@ public final class RhinoUtils { private static final String KOTLIN_JS_LIB_ECMA_3 = pathToTestFilesRoot() + "kotlin_lib_ecma3.js"; private static final String KOTLIN_JS_LIB_ECMA_5 = pathToTestFilesRoot() + "kotlin_lib_ecma5.js"; + @NotNull + private static final Map versionToScope = Maps.newHashMap(); + private RhinoUtils() { } @@ -104,7 +106,7 @@ public final class RhinoUtils { @NotNull RhinoResultChecker checker, @Nullable Map variables, @NotNull EcmaVersion ecmaVersion) throws Exception { - runRhinoTest(fileNames, checker, variables, ecmaVersion, Collections.EMPTY_LIST); + runRhinoTest(fileNames, checker, variables, ecmaVersion, Collections.emptyList()); } public static void runRhinoTest(@NotNull List fileNames, @@ -189,9 +191,6 @@ public final class RhinoUtils { } } - @NotNull - private static final Map versionToScope = Maps.newHashMap(); - @NotNull public static String getKotlinLibFile(@NotNull EcmaVersion ecmaVersion) { return ecmaVersion == EcmaVersion.v5 ? KOTLIN_JS_LIB_ECMA_5 : KOTLIN_JS_LIB_ECMA_3; diff --git a/js/js.tests/test/org/jetbrains/k2js/test/utils/TranslationUtils.java b/js/js.tests/test/org/jetbrains/k2js/test/utils/TranslationUtils.java index c8ee1b1f7e8..651b8ee6c12 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/utils/TranslationUtils.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/utils/TranslationUtils.java @@ -37,6 +37,7 @@ import org.jetbrains.k2js.test.config.TestConfigFactory; import org.jetbrains.k2js.utils.JetFileUtils; import java.io.*; +import java.lang.ref.SoftReference; import java.util.List; import static org.jetbrains.k2js.utils.JetFileUtils.createPsiFileList; @@ -50,8 +51,8 @@ public final class TranslationUtils { private TranslationUtils() { } - @Nullable - private static BindingContext libraryContext = null; + @NotNull + private static SoftReference cachedLibraryContext = new SoftReference(null); @Nullable private static List libFiles = null; @@ -66,7 +67,8 @@ public final class TranslationUtils { @NotNull public static BindingContext getLibraryContext(@NotNull Project project) { - if (libraryContext == null) { + BindingContext context = cachedLibraryContext.get(); + if (context == null) { List allLibFiles = getAllLibFiles(project); Predicate filesWithCode = new Predicate() { @Override @@ -76,10 +78,11 @@ public final class TranslationUtils { }; AnalyzeExhaust exhaust = AnalyzerFacadeForJS .analyzeFiles(allLibFiles, filesWithCode, Config.getEmptyConfig(project)); - libraryContext = exhaust.getBindingContext(); - AnalyzerFacadeForJS.checkForErrors(allLibFiles, libraryContext); + context = exhaust.getBindingContext(); + AnalyzerFacadeForJS.checkForErrors(allLibFiles, context); + cachedLibraryContext = new SoftReference(context); } - return libraryContext; + return context; } private static boolean isFileWithCode(@NotNull JetFile file) {