JS tests: create JetFiles by JetPsiFactory instead of by PsiManager to avoid to access to PsiManager after it disposed.

That fixed js tests after changes in DiagnosticsWithSuppression.
This commit is contained in:
Zalim Bashorov
2014-11-06 17:16:18 +03:00
parent 38d5f2ee2b
commit b3defdbf90
2 changed files with 28 additions and 3 deletions
@@ -138,14 +138,19 @@ public class LibrarySourcesConfig extends Config {
return result;
}
private static JetFile getJetFileByVirtualFile(VirtualFile file, String moduleName, PsiManager psiManager) {
protected JetFile getJetFileByVirtualFile(VirtualFile file, String moduleName, PsiManager psiManager) {
PsiFile psiFile = psiManager.findFile(file);
assert psiFile != null;
psiFile.putUserData(EXTERNAL_MODULE_NAME, moduleName);
setupPsiFile(psiFile, moduleName);
return (JetFile) psiFile;
}
private static class JetFileCollector extends VirtualFileVisitor {
protected static void setupPsiFile(PsiFile psiFile, String moduleName) {
psiFile.putUserData(EXTERNAL_MODULE_NAME, moduleName);
}
private class JetFileCollector extends VirtualFileVisitor {
private final List<JetFile> jetFiles;
private final String moduleName;
private final PsiManager psiManager;
@@ -18,12 +18,15 @@ package org.jetbrains.k2js.test.config;
import com.google.common.base.Predicates;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.utils.PathUtil;
import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS;
@@ -31,6 +34,7 @@ import org.jetbrains.k2js.config.Config;
import org.jetbrains.k2js.config.EcmaVersion;
import org.jetbrains.k2js.config.LibrarySourcesConfig;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -98,6 +102,22 @@ public class LibrarySourcesConfigWithCaching extends LibrarySourcesConfig {
return isUnitTestConfig;
}
@Override
protected JetFile getJetFileByVirtualFile(VirtualFile file, String moduleName, PsiManager psiManager) {
JetFile jetFile;
try {
String text = new String(file.contentsToByteArray(false), file.getCharset());
jetFile = new JetPsiFactory(getProject()).createPhysicalFile(file.getName(), text);
}
catch (IOException e) {
JetFile jetFileByVirtualFile = super.getJetFileByVirtualFile(file, moduleName, psiManager);
jetFile = new JetPsiFactory(getProject()).createPhysicalFile(file.getPath(), jetFileByVirtualFile.getText());
}
setupPsiFile(jetFile, moduleName);
return jetFile;
}
private AnalyzeExhaust getExhaust() {
if (exhaust == null) {
//noinspection AssignmentToStaticFieldFromInstanceMethod