Use soft reference for expensive cash in TranslationUtils
Also move member in RhinoUtils
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user