mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
memory leaks in fixtures: remove added sdk after test finishes
This commit is contained in:
@@ -20,6 +20,7 @@ import com.intellij.openapi.components.ExpandMacroToPathMap;
|
||||
import com.intellij.openapi.components.impl.ComponentManagerImpl;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager;
|
||||
import com.intellij.openapi.fileEditor.impl.EditorHistoryManager;
|
||||
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
|
||||
import com.intellij.openapi.fileEditor.impl.FileEditorProviderManagerImpl;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
@@ -73,6 +74,9 @@ public abstract class FileEditorManagerTestCase extends LightPlatformCodeInsight
|
||||
myOldDockContainers = null;
|
||||
((ComponentManagerImpl)getProject()).registerComponentInstance(FileEditorManager.class, myOldManager);
|
||||
myManager.closeAllFiles();
|
||||
for (VirtualFile file : EditorHistoryManager.getInstance(getProject()).getFiles()) {
|
||||
EditorHistoryManager.getInstance(getProject()).removeFile(file);
|
||||
}
|
||||
((FileEditorProviderManagerImpl)FileEditorProviderManager.getInstance()).clearSelectedProviders();
|
||||
}
|
||||
finally {
|
||||
@@ -82,11 +86,6 @@ public abstract class FileEditorManagerTestCase extends LightPlatformCodeInsight
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isWriteActionRequired() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected VirtualFile getFile(String path) {
|
||||
String fullPath = getTestDataPath() + path;
|
||||
VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByPath(fullPath);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.testFramework;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.application.RunResult;
|
||||
@@ -34,6 +35,7 @@ import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryTable;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -247,6 +249,20 @@ public class PsiTestUtil {
|
||||
public static void addLibrary(Module module, String libName, String libPath, String... jarArr) {
|
||||
ModuleRootModificationUtil.updateModel(module, model -> addLibrary(module, model, libName, libPath, jarArr));
|
||||
}
|
||||
public static void addLibrary(@NotNull Disposable parent, Module module, String libName, String libPath, String... jarArr) {
|
||||
Ref<Library> ref = new Ref<>();
|
||||
ModuleRootModificationUtil.updateModel(module, model -> ref.set(addLibrary(module, model, libName, libPath, jarArr)));
|
||||
Disposer.register(parent, () -> {
|
||||
Library library = ref.get();
|
||||
ModuleRootModificationUtil.updateModel(module, model -> model.removeOrderEntry(model.findLibraryOrderEntry(library)));
|
||||
WriteCommandAction.runWriteCommandAction(null, ()-> {
|
||||
LibraryTable table = ProjectLibraryTable.getInstance(module.getProject());
|
||||
LibraryTable.ModifiableModel model = table.getModifiableModel();
|
||||
model.removeLibrary(library);
|
||||
model.commit();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static void addProjectLibrary(Module module, String libName, List<String> classesRootPaths) {
|
||||
List<VirtualFile> roots = ContainerUtil.map(classesRootPaths, path -> VirtualFileManager.getInstance().refreshAndFindFileByUrl(VfsUtil.getUrlForLibraryRoot(new File(path))));
|
||||
@@ -263,6 +279,7 @@ public class PsiTestUtil {
|
||||
return result.get();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Library addProjectLibrary(Module module,
|
||||
ModifiableRootModel model,
|
||||
String libName,
|
||||
@@ -302,11 +319,12 @@ public class PsiTestUtil {
|
||||
return result.getResultObject();
|
||||
}
|
||||
|
||||
public static void addLibrary(Module module,
|
||||
ModifiableRootModel model,
|
||||
String libName,
|
||||
String libPath,
|
||||
String... jarArr) {
|
||||
@NotNull
|
||||
public static Library addLibrary(Module module,
|
||||
ModifiableRootModel model,
|
||||
String libName,
|
||||
String libPath,
|
||||
String... jarArr) {
|
||||
List<VirtualFile> classesRoots = new ArrayList<>();
|
||||
for (String jar : jarArr) {
|
||||
if (!libPath.endsWith("/") && !jar.startsWith("/")) {
|
||||
@@ -323,7 +341,7 @@ public class PsiTestUtil {
|
||||
assert root != null : "Library root folder not found: " + path + "!/";
|
||||
classesRoots.add(root);
|
||||
}
|
||||
addProjectLibrary(module, model, libName, classesRoots, Collections.emptyList());
|
||||
return addProjectLibrary(module, model, libName, classesRoots, Collections.emptyList());
|
||||
}
|
||||
|
||||
public static void addLibrary(Module module,
|
||||
|
||||
@@ -26,6 +26,8 @@ import com.intellij.ide.structureView.newStructureView.StructureViewComponent
|
||||
import com.intellij.ide.util.treeView.AbstractTreeNode
|
||||
import com.intellij.openapi.application.PluginPathManager
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
|
||||
import com.intellij.openapi.fileEditor.impl.EditorHistoryManager
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
@@ -45,6 +47,14 @@ class IdeaDecompilerTest : LightCodeInsightFixtureTestCase() {
|
||||
myFixture.testDataPath = "${PluginPathManager.getPluginHomePath("java-decompiler")}/plugin/testData"
|
||||
}
|
||||
|
||||
override fun tearDown() {
|
||||
FileEditorManagerEx.getInstanceEx(project).closeAllFiles()
|
||||
for (file in EditorHistoryManager.getInstance(project).files) {
|
||||
EditorHistoryManager.getInstance(project).removeFile(file)
|
||||
}
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
fun testSimple() {
|
||||
val file = getTestFile("${PlatformTestUtil.getRtJarPath()}!/java/lang/String.class")
|
||||
val decompiled = IdeaDecompiler().getText(file).toString()
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
package com.jetbrains.python.pyi;
|
||||
|
||||
import com.intellij.codeInspection.LocalInspectionTool;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
@@ -27,6 +29,18 @@ import org.jetbrains.annotations.NotNull;
|
||||
* @author vlan
|
||||
*/
|
||||
public class PyiInspectionsTest extends PyTestCase {
|
||||
|
||||
private Disposable myRootsDisposable;
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
if (myRootsDisposable != null) {
|
||||
Disposer.dispose(myRootsDisposable);
|
||||
myRootsDisposable = null;
|
||||
}
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
private void doTestByExtension(@NotNull Class<? extends LocalInspectionTool> inspectionClass, @NotNull String extension) {
|
||||
doTestByFileName(inspectionClass, getTestName(false) + extension);
|
||||
}
|
||||
@@ -106,7 +120,7 @@ public class PyiInspectionsTest extends PyTestCase {
|
||||
}
|
||||
|
||||
public void testPyiRelativeImports() {
|
||||
PyiTypeTest.addPyiStubsToContentRoot(myFixture);
|
||||
myRootsDisposable = PyiTypeTest.addPyiStubsToContentRoot(myFixture);
|
||||
doTestByFileName(PyUnresolvedReferencesInspection.class, "package_with_stub_in_path/a.pyi");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,11 @@
|
||||
*/
|
||||
package com.jetbrains.python.pyi;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vfs.StandardFileSystems;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
@@ -35,12 +38,23 @@ import org.jetbrains.annotations.Nullable;
|
||||
* @author vlan
|
||||
*/
|
||||
public class PyiTypeTest extends PyTestCase {
|
||||
public static void addPyiStubsToContentRoot(CodeInsightTestFixture fixture) {
|
||||
|
||||
private Disposable myDisposable;
|
||||
|
||||
// return Disposable which undoes configuration
|
||||
public static Disposable addPyiStubsToContentRoot(CodeInsightTestFixture fixture) {
|
||||
final String path = fixture.getTestDataPath() + "/pyi/pyiStubs";
|
||||
final VirtualFile file = StandardFileSystems.local().refreshAndFindFileByPath(path);
|
||||
assertNotNull(file);
|
||||
file.refresh(false, true);
|
||||
ModuleRootModificationUtil.addContentRoot(fixture.getModule(), path);
|
||||
return ()->ModuleRootModificationUtil.updateModel(fixture.getModule(), model -> {
|
||||
for (ContentEntry entry : model.getContentEntries()) {
|
||||
if (file.equals(entry.getFile())) {
|
||||
model.removeContentEntry(entry);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -57,6 +71,10 @@ public class PyiTypeTest extends PyTestCase {
|
||||
|
||||
@Override
|
||||
public void tearDown() throws Exception {
|
||||
if (myDisposable != null) {
|
||||
Disposer.dispose(myDisposable);
|
||||
myDisposable = null;
|
||||
}
|
||||
setLanguageLevel(null);
|
||||
super.tearDown();
|
||||
}
|
||||
@@ -97,7 +115,7 @@ public class PyiTypeTest extends PyTestCase {
|
||||
}
|
||||
|
||||
public void testPyiOnPythonPath() {
|
||||
addPyiStubsToContentRoot(myFixture);
|
||||
myDisposable = addPyiStubsToContentRoot(myFixture);
|
||||
doTest("int");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user