Fix invalidating built-ins psi in consecutive test runs

This commit is contained in:
Nikolay Krasko
2014-05-29 14:39:21 +04:00
parent dd00d7d004
commit 484fa3b7cd
2 changed files with 29 additions and 1 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -33,6 +33,7 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.asJava.LightClassUtil;
import org.jetbrains.jet.context.ContextPackage;
import org.jetbrains.jet.context.GlobalContextImpl;
@@ -80,6 +81,11 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
});
}
@TestOnly
public Set<JetFile> getBuiltInsSources() {
return builtInsSources;
}
private void initialize() {
assert bindingContext == null : "Attempt to initialize twice";
@@ -22,15 +22,22 @@ import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.file.impl.FileManager;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.InTextDirectivesUtils;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver;
import org.jetbrains.jet.utils.UtilsPackage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Set;
public abstract class JetLightCodeInsightFixtureTestCase extends LightCodeInsightFixtureTestCase {
@Override
@@ -39,6 +46,21 @@ public abstract class JetLightCodeInsightFixtureTestCase extends LightCodeInsigh
((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities();
}
@Override
protected void tearDown() throws Exception {
Set<JetFile> builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources();
FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).getFileManager();
super.tearDown();
// Restore mapping between PsiFiles and VirtualFiles dropped in FileManager.cleanupForNextTest(),
// otherwise built-ins psi elements will become invalid in next test.
for (JetFile source : builtInsSources) {
FileViewProvider provider = source.getViewProvider();
fileManager.setViewProvider(provider.getVirtualFile(), provider);
}
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {