Use soft reference for expensive cash in TranslationUtils

Also move member in RhinoUtils
This commit is contained in:
Pavel V. Talanov
2012-07-09 15:37:18 +04:00
parent 3d8c6065c5
commit 20dc05e679
2 changed files with 13 additions and 11 deletions
@@ -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<EcmaVersion, Scriptable> versionToScope = Maps.newHashMap();
private RhinoUtils() {
}
@@ -104,7 +106,7 @@ public final class RhinoUtils {
@NotNull RhinoResultChecker checker,
@Nullable Map<String, Object> variables,
@NotNull EcmaVersion ecmaVersion) throws Exception {
runRhinoTest(fileNames, checker, variables, ecmaVersion, Collections.EMPTY_LIST);
runRhinoTest(fileNames, checker, variables, ecmaVersion, Collections.<String>emptyList());
}
public static void runRhinoTest(@NotNull List<String> fileNames,
@@ -189,9 +191,6 @@ public final class RhinoUtils {
}
}
@NotNull
private static final Map<EcmaVersion, Scriptable> 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;
@@ -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<BindingContext> cachedLibraryContext = new SoftReference<BindingContext>(null);
@Nullable
private static List<JetFile> 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<JetFile> allLibFiles = getAllLibFiles(project);
Predicate<PsiFile> filesWithCode = new Predicate<PsiFile>() {
@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<BindingContext>(context);
}
return libraryContext;
return context;
}
private static boolean isFileWithCode(@NotNull JetFile file) {