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; 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); PsiFile psiFile = psiManager.findFile(file);
assert psiFile != null; assert psiFile != null;
psiFile.putUserData(EXTERNAL_MODULE_NAME, moduleName);
setupPsiFile(psiFile, moduleName);
return (JetFile) psiFile; 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 List<JetFile> jetFiles;
private final String moduleName; private final String moduleName;
private final PsiManager psiManager; private final PsiManager psiManager;
@@ -18,12 +18,15 @@ package org.jetbrains.k2js.test.config;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetFile; 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.lang.resolve.BindingContext;
import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jet.utils.PathUtil;
import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS; 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.EcmaVersion;
import org.jetbrains.k2js.config.LibrarySourcesConfig; import org.jetbrains.k2js.config.LibrarySourcesConfig;
import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -98,6 +102,22 @@ public class LibrarySourcesConfigWithCaching extends LibrarySourcesConfig {
return isUnitTestConfig; 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() { private AnalyzeExhaust getExhaust() {
if (exhaust == null) { if (exhaust == null) {
//noinspection AssignmentToStaticFieldFromInstanceMethod //noinspection AssignmentToStaticFieldFromInstanceMethod