diff --git a/build/scripts/utils.gant b/build/scripts/utils.gant index f6156766438a..af7d2f54302e 100644 --- a/build/scripts/utils.gant +++ b/build/scripts/utils.gant @@ -318,6 +318,8 @@ binding.setVariable("wireBuildDate", { String buildNumber, String appInfoFile -> binding.setVariable("commonJvmArgsForTests", { def jdwp = "-Xrunjdwp:transport=dt_socket,server=y,suspend=$debugSuspend" if (debugPort != null) jdwp += ",address=$debugPort" + else jdwp += ",address=5555" + return [ "-ea", "-Dio.netty.leakDetectionLevel=PARANOID", diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 92d1bcd74d89..120b5960190e 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -232,21 +232,23 @@ public class BuildManager implements ApplicationComponent{ return pathname.isDirectory() && !TEMP_DIR_NAME.equals(pathname.getName()); } }); - final Date now = new Date(); - for (File buildDataProjectDir : dirs) { - final File usageFile = getUsageFile(buildDataProjectDir); - if (usageFile.exists()) { - final Pair usageData = readUsageFile(usageFile); - if (usageData != null) { - final File projectFile = usageData.second; - if ((projectFile != null && !projectFile.exists()) || DateFormatUtil.getDifferenceInDays(usageData.first, now) > unusedThresholdDays) { - LOG.info("Clearing project build data because the project does not exist or was not opened for more than " + unusedThresholdDays + " days: " + buildDataProjectDir.getPath()); - FileUtil.delete(buildDataProjectDir); + if (dirs != null) { + final Date now = new Date(); + for (File buildDataProjectDir : dirs) { + final File usageFile = getUsageFile(buildDataProjectDir); + if (usageFile.exists()) { + final Pair usageData = readUsageFile(usageFile); + if (usageData != null) { + final File projectFile = usageData.second; + if ((projectFile != null && !projectFile.exists()) || DateFormatUtil.getDifferenceInDays(usageData.first, now) > unusedThresholdDays) { + LOG.info("Clearing project build data because the project does not exist or was not opened for more than " + unusedThresholdDays + " days: " + buildDataProjectDir.getPath()); + FileUtil.delete(buildDataProjectDir); + } } } - } - else { - updateUsageFile(null, buildDataProjectDir); // set usage stamp to start countdown + else { + updateUsageFile(null, buildDataProjectDir); // set usage stamp to start countdown + } } } } @@ -1443,6 +1445,7 @@ public class BuildManager implements ApplicationComponent{ @Override public void projectOpened(final Project project) { + if (ApplicationManager.getApplication().isUnitTestMode()) return; final MessageBusConnection conn = project.getMessageBus().connect(); myConnections.put(project, conn); conn.subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootAdapter() { diff --git a/java/java-tests/testSrc/com/intellij/navigation/GotoImplementationTest.java b/java/java-tests/testSrc/com/intellij/navigation/GotoImplementationTest.java index 37eac2578997..b9c70c9a0225 100644 --- a/java/java-tests/testSrc/com/intellij/navigation/GotoImplementationTest.java +++ b/java/java-tests/testSrc/com/intellij/navigation/GotoImplementationTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -21,7 +21,6 @@ import com.intellij.codeInsight.navigation.ClassImplementationsSearch; import com.intellij.codeInsight.navigation.MethodImplementationsSearch; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.module.impl.ModuleManagerImpl; import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -58,19 +57,11 @@ public class GotoImplementationTest extends CodeInsightTestCase { VirtualFile projectFile = vfsRoot.findChild("test.ipr"); myProject = ProjectManagerEx.getInstanceEx().loadProject(projectFile.getPath()); - simulateProjectOpen(); ProjectManagerEx.getInstanceEx().openTestProject(myProject); UIUtil.dispatchAllInvocationEvents(); // startup activities } - @Override - protected void tearDown() throws Exception { - ((ModuleManagerImpl)ModuleManager.getInstance(myProject)).projectClosed(); - super.tearDown(); - } - public void test() throws Exception { - ModuleManager moduleManager = ModuleManager.getInstance(getProject()); Module[] modules = moduleManager.getModules(); assertEquals(3, modules.length); diff --git a/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java b/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java index b095f7df0820..c1273eb10eac 100644 --- a/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java @@ -16,6 +16,7 @@ package com.intellij.roots; import com.intellij.ProjectTopics; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -33,6 +34,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.ModuleTestCase; import com.intellij.util.messages.MessageBusConnection; +import com.intellij.util.ui.UIUtil; import java.io.File; import java.io.IOException; @@ -41,21 +43,19 @@ import java.io.IOException; * @author dsl */ public class RootsChangedTest extends ModuleTestCase { - private MessageBusConnection myConnection; private MyModuleRootListener myModuleRootListener; @Override protected void setUp() throws Exception { super.setUp(); - myConnection = myProject.getMessageBus().connect(); + MessageBusConnection connection = myProject.getMessageBus().connect(myTestRootDisposable); myModuleRootListener = new MyModuleRootListener(); - myConnection.subscribe(ProjectTopics.PROJECT_ROOTS, myModuleRootListener); + connection.subscribe(ProjectTopics.PROJECT_ROOTS, myModuleRootListener); } @Override - protected void tearDown() throws Exception { - myConnection.disconnect(); - super.tearDown(); + protected boolean isRunInWriteAction() { + return false; } public void testEventsAfterFileModifications() throws Exception { @@ -70,11 +70,12 @@ public class RootsChangedTest extends ModuleTestCase { myModuleRootListener.reset(); ModuleRootModificationUtil.addContentRoot(moduleA, vDir1.getPath()); + UIUtil.dispatchAllInvocationEvents(); assertEventsCount(1); assertSameElements(ModuleRootManager.getInstance(moduleA).getContentRoots(), vDir1); - vDir1.delete(null); + delete(vDir1); assertEventsCount(1); assertEmpty(ModuleRootManager.getInstance(moduleA).getContentRoots()); @@ -83,12 +84,12 @@ public class RootsChangedTest extends ModuleTestCase { VirtualFile vDir2 = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir2); assertNotNull(vDir2); - vDir2.rename(null, "dir1"); + rename(vDir2, "dir1"); assertEventsCount(1); assertSameElements(ModuleRootManager.getInstance(moduleA).getContentRoots(), vDir2); // when the existing root is renamed, it remains a root - vDir2.rename(null, "dir2"); + rename(vDir2, "dir2"); assertEventsCount(0); assertSameElements(ModuleRootManager.getInstance(moduleA).getContentRoots(), vDir2); @@ -98,7 +99,7 @@ public class RootsChangedTest extends ModuleTestCase { VirtualFile vSubdir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(subdir); assertNotNull(vSubdir); - vDir2.move(null, vSubdir); + move(vDir2, vSubdir); assertEventsCount(0); assertSameElements(ModuleRootManager.getInstance(moduleA).getContentRoots(), vDir2); } @@ -124,85 +125,105 @@ public class RootsChangedTest extends ModuleTestCase { } public void testEditLibraryForModuleLoadFromXml() throws IOException { - File moduleFile = PathManagerEx.findFileUnderProjectHome("java/java-tests/testData/moduleRootManager/rootsChanged/emptyModule/a.iml", getClass()); - Module a = loadModule(moduleFile, true); - assertEventsCount(1); + final File tempDirectory = createTempDirectory(); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + File moduleFile = + PathManagerEx.findFileUnderProjectHome("java/java-tests/testData/moduleRootManager/rootsChanged/emptyModule/a.iml", RootsChangedTest.this.getClass()); + Module a = loadModule(moduleFile, true); + assertEventsCount(1); - final Sdk jdk = IdeaTestUtil.getMockJdk17(); - ProjectJdkTable.getInstance().addJdk(jdk); - assertEventsCount(0); + final Sdk jdk = IdeaTestUtil.getMockJdk17(); + ProjectJdkTable.getInstance().addJdk(jdk); + assertEventsCount(0); - ModuleRootModificationUtil.setModuleSdk(a, jdk); - assertEventsCount(1); + ModuleRootModificationUtil.setModuleSdk(a, jdk); + assertEventsCount(1); + + final SdkModificator sdkModificator = jdk.getSdkModificator(); + sdkModificator.addRoot(getVirtualFile(tempDirectory), OrderRootType.CLASSES); + sdkModificator.commitChanges(); + } + }); - final SdkModificator sdkModificator = jdk.getSdkModificator(); - sdkModificator.addRoot(getVirtualFile(createTempDirectory()), OrderRootType.CLASSES); - sdkModificator.commitChanges(); assertEventsCount(1); } public void testModuleJdkEditing() throws Exception { - final Module moduleA = createModule("a.iml"); - final Module moduleB = createModule("b.iml"); - assertEventsCount(2); + final File tempDirectory = createTempDirectory(); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final Module moduleA = createModule("a.iml"); + final Module moduleB = createModule("b.iml"); + assertEventsCount(2); - final Sdk jdk = IdeaTestUtil.getMockJdk17(); - ProjectJdkTable.getInstance().addJdk(jdk); - assertEventsCount(0); + final Sdk jdk = IdeaTestUtil.getMockJdk17(); + ProjectJdkTable.getInstance().addJdk(jdk); + assertEventsCount(0); - final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); - final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); - rootModelA.setSdk(jdk); - rootModelB.setSdk(jdk); - ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; - ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); - assertEventsCount(1); + final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); + final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); + rootModelA.setSdk(jdk); + rootModelB.setSdk(jdk); + ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; + ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); + assertEventsCount(1); - final SdkModificator sdkModificator = jdk.getSdkModificator(); - sdkModificator.addRoot(getVirtualFile(createTempDirectory()), OrderRootType.CLASSES); - sdkModificator.commitChanges(); - assertEventsCount(1); + final SdkModificator sdkModificator = jdk.getSdkModificator(); + sdkModificator.addRoot(getVirtualFile(tempDirectory), OrderRootType.CLASSES); + sdkModificator.commitChanges(); + assertEventsCount(1); - ProjectJdkTable.getInstance().removeJdk(jdk); - assertEventsCount(1); + ProjectJdkTable.getInstance().removeJdk(jdk); + assertEventsCount(1); + } + }); } public void testInheritedJdkEditing() throws Exception { - final Module moduleA = createModule("a.iml"); - final Module moduleB = createModule("b.iml"); - assertEventsCount(2); + final File tempDirectory = createTempDirectory(); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final Module moduleA = createModule("a.iml"); + final Module moduleB = createModule("b.iml"); + assertEventsCount(2); - final Sdk jdk = IdeaTestUtil.getMockJdk17("AAA"); - ProjectJdkTable.getInstance().addJdk(jdk); - assertEventsCount(0); + final Sdk jdk = IdeaTestUtil.getMockJdk17("AAA"); + ProjectJdkTable.getInstance().addJdk(jdk); + assertEventsCount(0); - final Sdk jdkBBB = IdeaTestUtil.getMockJdk17("BBB"); - ProjectJdkTable.getInstance().addJdk(jdk); - assertEventsCount(0); + final Sdk jdkBBB = IdeaTestUtil.getMockJdk17("BBB"); + ProjectJdkTable.getInstance().addJdk(jdk); + assertEventsCount(0); - ProjectRootManager.getInstance(myProject).setProjectSdk(jdkBBB); - assertEventsCount(0); + ProjectRootManager.getInstance(myProject).setProjectSdk(jdkBBB); + assertEventsCount(0); - final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); - final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); - rootModelA.inheritSdk(); - rootModelB.inheritSdk(); - ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; - if (rootModels.length > 0) { - ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); - } - assertEventsCount(1); + final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); + final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); + rootModelA.inheritSdk(); + rootModelB.inheritSdk(); + ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; + if (rootModels.length > 0) { + ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); + } + assertEventsCount(1); - ProjectRootManager.getInstance(myProject).setProjectSdk(jdk); - assertEventsCount(1); + ProjectRootManager.getInstance(myProject).setProjectSdk(jdk); + assertEventsCount(1); - final SdkModificator sdkModificator = jdk.getSdkModificator(); - sdkModificator.addRoot(getVirtualFile(createTempDirectory()), OrderRootType.CLASSES); - sdkModificator.commitChanges(); - assertEventsCount(1); + final SdkModificator sdkModificator = jdk.getSdkModificator(); + sdkModificator.addRoot(getVirtualFile(tempDirectory), OrderRootType.CLASSES); + sdkModificator.commitChanges(); + assertEventsCount(1); - ProjectJdkTable.getInstance().removeJdk(jdk); - assertEventsCount(1); + ProjectJdkTable.getInstance().removeJdk(jdk); + assertEventsCount(1); + } + }); } private void verifyLibraryTableEditing(final LibraryTable libraryTable) throws IOException { @@ -210,86 +231,103 @@ public class RootsChangedTest extends ModuleTestCase { final Module moduleB = createModule("b.iml"); assertEventsCount(2); - final Library libraryA = libraryTable.createLibrary("A"); - final Library.ModifiableModel libraryModifiableModel = libraryA.getModifiableModel(); - libraryModifiableModel.addRoot("file:///a", OrderRootType.CLASSES); - libraryModifiableModel.commit(); - assertEventsCount(0); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final Library libraryA = libraryTable.createLibrary("A"); + final Library.ModifiableModel libraryModifiableModel = libraryA.getModifiableModel(); + libraryModifiableModel.addRoot("file:///a", OrderRootType.CLASSES); + libraryModifiableModel.commit(); + assertEventsCount(0); - final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); - final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); - rootModelA.addLibraryEntry(libraryA); - rootModelB.addLibraryEntry(libraryA); - rootModelA.addInvalidLibrary("Q", libraryTable.getTableLevel()); - rootModelB.addInvalidLibrary("Q", libraryTable.getTableLevel()); - ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; - if (rootModels.length > 0) { - ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); - } - assertEventsCount(1); + final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); + final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); + rootModelA.addLibraryEntry(libraryA); + rootModelB.addLibraryEntry(libraryA); + rootModelA.addInvalidLibrary("Q", libraryTable.getTableLevel()); + rootModelB.addInvalidLibrary("Q", libraryTable.getTableLevel()); + ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; + if (rootModels.length > 0) { + ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); + } + assertEventsCount(1); - final Library.ModifiableModel libraryModifiableModel2 = libraryA.getModifiableModel(); - final File tmpDir = FileUtil.createTempDirectory(getTestName(true), ""); - try { - final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(tmpDir); - assertNotNull(file); - - libraryModifiableModel2.addRoot(file.getUrl(), OrderRootType.CLASSES); - libraryModifiableModel2.commit(); - assertEventsCount(1); - } - finally { - FileUtil.delete(tmpDir); - } + final Library.ModifiableModel libraryModifiableModel2 = libraryA.getModifiableModel(); + final File tmpDir; + try { + tmpDir = FileUtil.createTempDirectory(getTestName(true), ""); + } + catch (IOException e) { + throw new RuntimeException(e); + } - libraryTable.removeLibrary(libraryA); - assertEventsCount(1); + try { + final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(tmpDir); + assertNotNull(file); - final Library libraryQ = libraryTable.createLibrary("Q"); - assertEventsCount(1); + libraryModifiableModel2.addRoot(file.getUrl(), OrderRootType.CLASSES); + libraryModifiableModel2.commit(); + assertEventsCount(1); + } + finally { + FileUtil.delete(tmpDir); + } - libraryTable.removeLibrary(libraryQ); - assertEventsCount(1); + libraryTable.removeLibrary(libraryA); + assertEventsCount(1); + + final Library libraryQ = libraryTable.createLibrary("Q"); + assertEventsCount(1); + + libraryTable.removeLibrary(libraryQ); + assertEventsCount(1); + } + }); } private void verifyLibraryTableEditingInUncommittedModel(final LibraryTable libraryTable) { - final Module moduleA = createModule("a.iml"); - final Module moduleB = createModule("b.iml"); - assertEventsCount(2); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final Module moduleA = createModule("a.iml"); + final Module moduleB = createModule("b.iml"); + assertEventsCount(2); - final Library libraryA = libraryTable.createLibrary("A"); - final Library.ModifiableModel libraryModifiableModel = libraryA.getModifiableModel(); - libraryModifiableModel.addRoot("file:///a", OrderRootType.CLASSES); - libraryModifiableModel.commit(); - assertEventsCount(0); + final Library libraryA = libraryTable.createLibrary("A"); + final Library.ModifiableModel libraryModifiableModel = libraryA.getModifiableModel(); + libraryModifiableModel.addRoot("file:///a", OrderRootType.CLASSES); + libraryModifiableModel.commit(); + assertEventsCount(0); - final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); - final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); - rootModelA.addLibraryEntry(libraryA); - rootModelB.addLibraryEntry(libraryA); - final Library.ModifiableModel libraryModifiableModel2 = libraryA.getModifiableModel(); - libraryModifiableModel2.addRoot("file:///b", OrderRootType.CLASSES); - libraryModifiableModel2.commit(); - assertEventsCount(0); + final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); + final ModifiableRootModel rootModelB = ModuleRootManager.getInstance(moduleB).getModifiableModel(); + rootModelA.addLibraryEntry(libraryA); + rootModelB.addLibraryEntry(libraryA); + final Library.ModifiableModel libraryModifiableModel2 = libraryA.getModifiableModel(); + libraryModifiableModel2.addRoot("file:///b", OrderRootType.CLASSES); + libraryModifiableModel2.commit(); + assertEventsCount(0); - libraryTable.removeLibrary(libraryA); - assertEventsCount(0); + libraryTable.removeLibrary(libraryA); + assertEventsCount(0); - rootModelA.addInvalidLibrary("Q", libraryTable.getTableLevel()); - rootModelB.addInvalidLibrary("Q", libraryTable.getTableLevel()); - assertEventsCount(0); + rootModelA.addInvalidLibrary("Q", libraryTable.getTableLevel()); + rootModelB.addInvalidLibrary("Q", libraryTable.getTableLevel()); + assertEventsCount(0); - final Library libraryQ = libraryTable.createLibrary("Q"); - assertEventsCount(0); + final Library libraryQ = libraryTable.createLibrary("Q"); + assertEventsCount(0); - ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; - if (rootModels.length > 0) { - ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); - } - assertEventsCount(1); + ModifiableRootModel[] rootModels = new ModifiableRootModel[]{rootModelA, rootModelB}; + if (rootModels.length > 0) { + ModifiableModelCommitter.multiCommit(rootModels, ModuleManager.getInstance(rootModels[0].getProject()).getModifiableModel()); + } + assertEventsCount(1); - libraryTable.removeLibrary(libraryQ); - assertEventsCount(1); + libraryTable.removeLibrary(libraryQ); + assertEventsCount(1); + } + }); } private void assertEventsCount(int count) { diff --git a/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java b/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java index 7124d3b6692b..3c32b92fd013 100644 --- a/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java +++ b/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -29,45 +29,52 @@ import java.io.File; * Date: 4/9/12 */ public class UnscrambleDialogTest extends JavaCodeInsightFixtureTestCase { + private RunContentDescriptor myContent; + + @Override + protected void tearDown() throws Exception { + Disposer.dispose(myContent); + super.tearDown(); + } public void testStacktrace() throws Exception { - RunContentDescriptor content = showText(""); - Icon icon = content.getIcon(); - String name = content.getDisplayName(); + showText(""); + Icon icon = myContent.getIcon(); + String name = myContent.getDisplayName(); assertEquals(null, icon); assertEquals("", name); } public void testException() throws Exception { - RunContentDescriptor content = showText("java.lang.NullPointerException\n" + + showText("java.lang.NullPointerException\n" + "\tat com.intellij.psi.css.resolve.impl.XhtmlFileInfo.findOneStyleSheet(XhtmlFileInfo.java:291)\n" + "\tat com.intellij.psi.css.resolve.impl.XhtmlFileInfo.getStylesheets(XhtmlFileInfo.java:174)\n" + "\tat com.intellij.psi.css.resolve.impl.XhtmlFileInfo.initStylesheets(XhtmlFileInfo.java:119)"); - assertIcon("exception.png", content.getIcon()); - assertEquals("NPE", content.getDisplayName()); + assertIcon("exception.png", myContent.getIcon()); + assertEquals("NPE", myContent.getDisplayName()); } public void testThreadDump() throws Exception { File file = new File(getTestDataPath() + "threaddump.txt"); String s = FileUtil.loadFile(file); - RunContentDescriptor content = showText(s); - assertIcon("threaddump.png", content.getIcon()); - assertEquals("", content.getDisplayName()); + showText(s); + assertIcon("threaddump.png", myContent.getIcon()); + assertEquals("", myContent.getDisplayName()); } public void testDeadlock() throws Exception { File file = new File(getTestDataPath() + "deadlock.txt"); String s = FileUtil.loadFile(file); - RunContentDescriptor content = showText(s); - assertIcon("killProcess.png", content.getIcon()); - assertEquals("", content.getDisplayName()); + showText(s); + assertIcon("killProcess.png", myContent.getIcon()); + assertEquals("", myContent.getDisplayName()); } - private RunContentDescriptor showText(String unscramble) { + private void showText(String unscramble) { RunContentDescriptor descriptor = UnscrambleDialog.showUnscrambledText(null, "foo", getProject(), unscramble); assertNotNull(descriptor); - Disposer.register(myModule, descriptor); - return descriptor; + Disposer.register(getTestRootDisposable(), descriptor); + myContent = descriptor; } private static void assertIcon(String s, Icon icon) { diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java index 0063bf498f3c..886d1220b1d3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java @@ -22,6 +22,7 @@ import com.intellij.ide.AppLifecycleListener; import com.intellij.ide.RecentProjectsManager; import com.intellij.ide.impl.ProjectUtil; import com.intellij.ide.plugins.PluginManager; +import com.intellij.ide.startup.StartupManagerEx; import com.intellij.ide.startup.impl.StartupManagerImpl; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; @@ -91,12 +92,10 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt private Element myDefaultProjectRootElement; // Only used asynchronously in save and dispose, which itself are synchronized. private boolean myDefaultProjectConfigurationChanged; - private final List myOpenProjects = new ArrayList(); - private Project[] myOpenProjectsArrayCache = {}; + private Project[] myOpenProjects = {}; // guarded by lock + private final Object lock = new Object(); private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); - private final Set myTestProjects = new THashSet(); - private final MultiMap> myChangedProjectFiles = MultiMap.createWeakSet(); //guarded by myChangedProjectFiles private final SingleAlarm myChangedFilesAlarm; private final List> myChangedApplicationFiles = new SmartList>(); @@ -413,35 +412,28 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt @Override @NotNull public Project[] getOpenProjects() { - synchronized (myOpenProjects) { - if (myOpenProjectsArrayCache.length != myOpenProjects.size()) { - LOG.error("Open projects: " + myOpenProjects + "; cache: " + Arrays.asList(myOpenProjectsArrayCache)); - } - if (myOpenProjectsArrayCache.length > 0 && myOpenProjectsArrayCache[0] != myOpenProjects.get(0)) { - LOG.error("Open projects cache corrupted. Open projects: " + myOpenProjects + "; cache: " + Arrays.asList(myOpenProjectsArrayCache)); - } - if (ApplicationManager.getApplication().isUnitTestMode()) { - Project[] testProjects = myTestProjects.toArray(new Project[myTestProjects.size()]); - for (Project testProject : testProjects) { - assert !testProject.isDisposed() : testProject; - } - return ArrayUtil.mergeArrays(myOpenProjectsArrayCache, testProjects); - } - return myOpenProjectsArrayCache; + synchronized (lock) { + return myOpenProjects; } } @Override public boolean isProjectOpened(Project project) { - synchronized (myOpenProjects) { - return ApplicationManager.getApplication().isUnitTestMode() && myTestProjects.contains(project) || myOpenProjects.contains(project); + synchronized (lock) { + return ArrayUtil.contains(project, myOpenProjects); } } @Override public boolean openProject(@NotNull final Project project) { if (isLight(project)) { - throw new AssertionError("must not open light project"); + ((ProjectImpl)project).setTemporarilyDisposed(false); + boolean isInitialized = StartupManagerEx.getInstanceEx(project).startupActivityPassed(); + if (isInitialized) { + addToOpened(project); + // events already fired + return true; + } } final Application application = ApplicationManager.getApplication(); @@ -449,13 +441,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt return false; } - synchronized (myOpenProjects) { - if (myOpenProjects.contains(project)) { - return false; - } - myOpenProjects.add(project); - cacheOpenProjects(); - } + if (!addToOpened(project)) return false; fireProjectOpened(project); DumbService.getInstance(project).queueTask(new DumbModeTask() { @@ -521,15 +507,30 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt return true; } + private boolean addToOpened(@NotNull Project project) { + assert !project.isDisposed() : "Must not open already disposed project"; + synchronized (lock) { + if (isProjectOpened(project)) { + return false; + } + myOpenProjects = ArrayUtil.append(myOpenProjects, project); + } + return true; + } + + @NotNull + private Collection removeFromOpened(@NotNull Project project) { + synchronized (lock) { + myOpenProjects = ArrayUtil.remove(myOpenProjects, project); + return Arrays.asList(myOpenProjects); + } + } + private static boolean canCancelProjectLoading() { ProgressIndicator indicator = ProgressIndicatorProvider.getGlobalProgressIndicator(); return !(indicator instanceof NonCancelableSection); } - private void cacheOpenProjects() { - myOpenProjectsArrayCache = myOpenProjects.toArray(new Project[myOpenProjects.size()]); - } - private static void waitForFileWatcher(@NotNull ProgressIndicator indicator) { LocalFileSystem fs = LocalFileSystem.getInstance(); if (!(fs instanceof LocalFileSystemImpl)) return; @@ -727,22 +728,20 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt } @Override + @TestOnly public void openTestProject(@NotNull final Project project) { - synchronized (myOpenProjects) { - assert ApplicationManager.getApplication().isUnitTestMode(); - assert !project.isDisposed() : "Must not open already disposed project"; - myTestProjects.add(project); - } + assert ApplicationManager.getApplication().isUnitTestMode(); + openProject(project); + UIUtil.dispatchAllInvocationEvents(); // post init activities are invokeLatered } @NotNull @Override - public Collection closeTestProject(@NotNull Project project) { - synchronized (myOpenProjects) { - assert ApplicationManager.getApplication().isUnitTestMode(); - myTestProjects.remove(project); - return myTestProjects; - } + @TestOnly + public Collection closeTestProject(@NotNull final Project project) { + assert ApplicationManager.getApplication().isUnitTestMode(); + closeProject(project); + return Arrays.asList(getOpenProjects()); } @Override @@ -821,16 +820,29 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt public boolean closeProject(@NotNull final Project project, final boolean save, final boolean dispose, boolean checkCanClose) { if (isLight(project)) { - throw new AssertionError("must not close light project"); + // if we close project at the end of the test, just mark it closed; if we are shutting down the entire test framework, proceed to full dispose + if (!((ProjectImpl)project).isTemporarilyDisposed()) { + ((ProjectImpl)project).setTemporarilyDisposed(true); + removeFromOpened(project); + return true; + } + ((ProjectImpl)project).setTemporarilyDisposed(false); + } + else { + if (!isProjectOpened(project)) return true; } - if (!isProjectOpened(project)) return true; if (checkCanClose && !canClose(project)) return false; final ShutDownTracker shutDownTracker = ShutDownTracker.getInstance(); shutDownTracker.registerStopperThread(Thread.currentThread()); try { if (save) { - FileDocumentManager.getInstance().saveAllDocuments(); - project.save(); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + FileDocumentManager.getInstance().saveAllDocuments(); + project.save(); + } + }); } if (checkCanClose && !ensureCouldCloseIfUnableToSave(project)) { @@ -842,11 +854,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - synchronized (myOpenProjects) { - myOpenProjects.remove(project); - cacheOpenProjects(); - myTestProjects.remove(project); - } + removeFromOpened(project); synchronized (myChangedProjectFiles) { myChangedProjectFiles.remove(project); diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java index 1ad1edf7ffb7..2eed46ce7ffa 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java @@ -30,6 +30,7 @@ import com.intellij.openapi.module.EmptyModuleType; import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ProjectFileIndex; @@ -55,6 +56,7 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase { EditorNotifications notifications = new EditorNotificationsImpl(getProject()); ((ComponentManagerImpl)getProject()).registerComponentInstance(EditorNotifications.class, notifications); NonProjectFileWritingAccessProvider.enableChecksInTests(getProject(), true); + ProjectManagerEx.getInstanceEx().blockReloadingProjectOnExternalChanges(); } @Override @@ -62,11 +64,7 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase { NonProjectFileWritingAccessProvider.setCustomUnlocker(null); NonProjectFileWritingAccessProvider.enableChecksInTests(getProject(), false); super.tearDown(); - } - - @Override - protected boolean runInDispatchThread() { - return true; + ProjectManagerEx.getInstanceEx().unblockReloadingProjectOnExternalChanges(); // unblock only after project is disposed } public void testBasicAccessCheck() throws Exception { diff --git a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java index 376c024ada53..bb560e16883f 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java @@ -18,7 +18,6 @@ package com.intellij.testFramework; import com.intellij.ProjectTopics; import com.intellij.codeInsight.completion.CompletionProgressIndicator; import com.intellij.codeInsight.daemon.HighlightDisplayKey; -import com.intellij.codeInsight.daemon.impl.EditorTracker; import com.intellij.codeInsight.hint.HintManager; import com.intellij.codeInsight.hint.HintManagerImpl; import com.intellij.codeInsight.lookup.LookupManager; @@ -61,7 +60,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ex.ProjectEx; import com.intellij.openapi.project.ex.ProjectManagerEx; -import com.intellij.openapi.project.impl.ProjectImpl; import com.intellij.openapi.project.impl.ProjectManagerImpl; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.*; @@ -309,18 +307,6 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da descriptor.configureModule(ourModule, model, contentEntry); } }); - - MessageBusConnection connection = ourProject.getMessageBus().connect(); - connection.subscribe(ProjectTopics.MODULES, new ModuleAdapter() { - @Override - public void moduleAdded(@NotNull Project project, @NotNull Module module) { - fail("Adding modules is not permitted in LightIdeaTestCase."); - } - }); - - StartupManagerImpl startupManager = (StartupManagerImpl)StartupManager.getInstance(ourProject); - startupManager.runStartupActivities(); - startupManager.startCacheUpdate(); } private void cleanSourceRoot() throws IOException { @@ -394,13 +380,19 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da ApplicationManager.getApplication().assertIsDispatchThread(); if (ourProject == null || ourProjectDescriptor == null || !ourProjectDescriptor.equals(descriptor)) { initProject(descriptor); - ourProject.getComponent(EditorTracker.class).projectOpened(); } - ((ProjectImpl)ourProject).setTemporarilyDisposed(false); ProjectManagerEx projectManagerEx = ProjectManagerEx.getInstanceEx(); projectManagerEx.openTestProject(ourProject); + MessageBusConnection connection = ourProject.getMessageBus().connect(parentDisposable); + connection.subscribe(ProjectTopics.MODULES, new ModuleAdapter() { + @Override + public void moduleAdded(@NotNull Project project, @NotNull Module module) { + fail("Adding modules is not permitted in LightIdeaTestCase."); + } + }); + clearUncommittedDocuments(getProject()); CodeInsightTestFixtureImpl.configureInspections(localInspectionTools, getProject(), @@ -596,11 +588,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da if (checkForEditors) { checkEditorsReleased(); } - if (isLight(project)) { - // mark temporarily as disposed so that rogue component trying to access it will fail - ((ProjectImpl)project).setTemporarilyDisposed(true); - documentManager.clearUncommittedDocuments(); - } + documentManager.clearUncommittedDocuments(); } public static PsiDocumentManagerImpl clearUncommittedDocuments(@NotNull Project project) { @@ -781,7 +769,6 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da if (ourProject != null) { ApplicationManager.getApplication().assertWriteAccessAllowed(); - ((ProjectImpl)ourProject).setTemporarilyDisposed(false); if (!ourProject.isDisposed()) { VirtualFile projectFile = ((ProjectEx)ourProject).getStateStore().getProjectFile(); File ioFile = projectFile == null ? null : VfsUtilCore.virtualToIoFile(projectFile); @@ -797,8 +784,8 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da } } + ProjectManagerEx.getInstanceEx().closeAndDispose(ourProject); - ProjectManagerEx.getInstanceEx().closeTestProject(ourProject); ourProject = null; ourPathToKeep = null; } diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java index d69754964e65..10d99c68fc64 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java @@ -15,7 +15,6 @@ */ package com.intellij.testFramework; -import com.intellij.codeInsight.daemon.impl.EditorTracker; import com.intellij.ide.highlighter.ModuleFileType; import com.intellij.ide.highlighter.ProjectFileType; import com.intellij.ide.startup.impl.StartupManagerImpl; @@ -40,7 +39,6 @@ import com.intellij.openapi.module.EmptyModuleType; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.module.impl.ModuleManagerImpl; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ex.ProjectManagerEx; @@ -238,9 +236,9 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro myProject = doCreateProject(projectFile); myProjectManager.openTestProject(myProject); - myProject.getComponent(EditorTracker.class).projectOpened(); LocalFileSystem.getInstance().refreshIoFiles(myFilesToDelete); + myProjectManager.openTestProject(myProject); setUpModule(); setUpJdk(); @@ -518,7 +516,6 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - Disposer.dispose(myProject); ProjectManagerEx projectManager = ProjectManagerEx.getInstanceEx(); if (projectManager instanceof ProjectManagerImpl) { Collection projectsStillOpen = projectManager.closeTestProject(myProject); @@ -526,15 +523,15 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro Project project = projectsStillOpen.iterator().next(); String message = "Test project is not disposed: " + project + ";\n created in: " + getCreationPlace(project); try { - projectManager.closeTestProject(project); - Disposer.dispose(project); + projectManager.closeAndDispose(project); } catch (Exception e) { - // ignore, we already have somthing to throw + // ignore, we already have something to throw } throw new AssertionError(message); } } + Disposer.dispose(myProject); } }); } @@ -591,18 +588,6 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro } } - protected void simulateProjectOpen() { - ModuleManagerImpl mm = (ModuleManagerImpl)ModuleManager.getInstance(myProject); - StartupManagerImpl sm = (StartupManagerImpl)StartupManager.getInstance(myProject); - - mm.projectOpened(); - setUpJdk(); - sm.runStartupActivities(); - sm.startCacheUpdate(); - // extra init for libraries - sm.runPostStartupActivities(); - } - protected void setUpJdk() { //final ProjectJdkEx jdk = ProjectJdkUtil.getDefaultJdk("java 1.4"); final Sdk jdk = getTestProjectJdk(); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index e590d2da9b6e..ae4e603f98a8 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -1228,6 +1228,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig public void run() { DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); // return default value to avoid unnecessary save FileEditorManager editorManager = FileEditorManager.getInstance(getProject()); + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); VirtualFile[] openFiles = editorManager.getOpenFiles(); for (VirtualFile openFile : openFiles) { editorManager.closeFile(openFile); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/HeavyIdeaTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/HeavyIdeaTestFixtureImpl.java index b041b2350789..bc8491f285db 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/HeavyIdeaTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/HeavyIdeaTestFixtureImpl.java @@ -18,7 +18,6 @@ package com.intellij.testFramework.fixtures.impl; import com.intellij.ide.IdeView; import com.intellij.ide.highlighter.ProjectFileType; -import com.intellij.ide.startup.impl.StartupManagerImpl; import com.intellij.idea.IdeaTestApplication; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataProvider; @@ -36,7 +35,6 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; @@ -55,10 +53,10 @@ import com.intellij.testFramework.builders.ModuleFixtureBuilder; import com.intellij.testFramework.fixtures.HeavyIdeaTestFixture; import com.intellij.util.PathUtil; import com.intellij.util.ui.UIUtil; -import org.junit.Assert; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.junit.Assert; import java.io.ByteArrayOutputStream; import java.io.File; @@ -143,34 +141,34 @@ class HeavyIdeaTestFixtureImpl extends BaseFixture implements HeavyIdeaTestFixtu private void setUpProject() throws Exception { - new WriteCommandAction.Simple(null) { + UIUtil.invokeAndWaitIfNeeded(new Runnable() { @Override - protected void run() throws Throwable { - File tempDirectory = FileUtil.createTempDirectory(myName, ""); - PlatformTestCase.synchronizeTempDirVfs(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(tempDirectory)); - myFilesToDelete.add(tempDirectory); + public void run() { + try { + File tempDirectory = FileUtil.createTempDirectory(myName, ""); + PlatformTestCase.synchronizeTempDirVfs(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(tempDirectory)); + myFilesToDelete.add(tempDirectory); - File projectFile = new File(tempDirectory, myName + PROJECT_FILE_SUFFIX); + File projectFile = new File(tempDirectory, myName + PROJECT_FILE_SUFFIX); - LocalFileSystem.getInstance().refreshAndFindFileByIoFile(projectFile); - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - new Throwable(projectFile.getPath()).printStackTrace(new PrintStream(buffer)); - myProject = PlatformTestCase.createProject(projectFile, buffer.toString()); + LocalFileSystem.getInstance().refreshAndFindFileByIoFile(projectFile); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + new Throwable(projectFile.getPath()).printStackTrace(new PrintStream(buffer)); + myProject = PlatformTestCase.createProject(projectFile, buffer.toString()); + ProjectManagerEx.getInstanceEx().openTestProject(myProject); - for (ModuleFixtureBuilder moduleFixtureBuilder: myModuleFixtureBuilders) { - moduleFixtureBuilder.getFixture().setUp(); + for (ModuleFixtureBuilder moduleFixtureBuilder: myModuleFixtureBuilders) { + moduleFixtureBuilder.getFixture().setUp(); + } + + LightPlatformTestCase.clearUncommittedDocuments(myProject); + ((FileTypeManagerImpl)FileTypeManager.getInstance()).drainReDetectQueue(); + } + catch (Exception e) { + throw new RuntimeException(e); } - - StartupManagerImpl sm = (StartupManagerImpl)StartupManager.getInstance(myProject); - sm.runStartupActivities(); - sm.startCacheUpdate(); - sm.runPostStartupActivities(); - - ProjectManagerEx.getInstanceEx().openTestProject(myProject); - LightPlatformTestCase.clearUncommittedDocuments(myProject); - ((FileTypeManagerImpl)FileTypeManager.getInstance()).drainReDetectQueue(); } - }.execute().throwException(); + }); } private void initApplication() throws Exception { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java index 014ed013448f..fa4c6b6601a7 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -304,9 +304,9 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec setDefaultChangeList(list); if (myIgnoredIdeaLevel.isEmpty()) { - final String name = myProject.getName(); - myIgnoredIdeaLevel.add(IgnoredBeanFactory.ignoreFile(name + WorkspaceFileType.DOT_DEFAULT_EXTENSION, myProject)); - myIgnoredIdeaLevel.add(IgnoredBeanFactory.ignoreFile(Project.DIRECTORY_STORE_FOLDER + "/workspace.xml", myProject)); + for (String path : predefinedIgnorePaths()) { + myIgnoredIdeaLevel.add(IgnoredBeanFactory.ignoreFile(path, myProject)); + } } } if (!Registry.is("ide.hide.excluded.files") && !myExcludedConvertedToIgnored) { @@ -318,6 +318,15 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec }); } + @NotNull + List predefinedIgnorePaths() { + List myIgnoredIdeaLevel = new ArrayList(); + myIgnoredIdeaLevel.add(myProject.getName() + WorkspaceFileType.DOT_DEFAULT_EXTENSION); + myIgnoredIdeaLevel.add(Project.DIRECTORY_STORE_FOLDER + "/workspace.xml"); + + return myIgnoredIdeaLevel; + } + void convertExcludedToIgnored() { for (DirectoryIndexExcludePolicy policy : DirectoryIndexExcludePolicy.EP_NAME.getExtensions(myProject)) { for (VirtualFile file : policy.getExcludeRootsForProject()) { diff --git a/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/changes/ConvertExcludedToIgnoredTest.java b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/changes/ConvertExcludedToIgnoredTest.java index e2721e3aeb8d..32acd9e1ac80 100644 --- a/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/changes/ConvertExcludedToIgnoredTest.java +++ b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/changes/ConvertExcludedToIgnoredTest.java @@ -1,3 +1,18 @@ +/* + * Copyright 2000-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.openapi.vcs.changes; import com.intellij.openapi.module.ModuleType; @@ -6,6 +21,9 @@ import com.intellij.openapi.roots.CompilerProjectExtension; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestCase; import com.intellij.testFramework.PsiTestUtil; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.ArrayList; @@ -80,21 +98,24 @@ public class ConvertExcludedToIgnoredTest extends PlatformTestCase { assertFalse(getChangeListManager().isIgnoredFile(inner)); } - private void assertIgnored(VirtualFile... ignoredDirs) { + private void assertIgnored(@NotNull VirtualFile... ignoredDirs) { assertIgnoredDirectories(getProject(), ignoredDirs); } - public static void assertIgnoredDirectories(final Project project, VirtualFile... ignoredDirs) { + public static void assertIgnoredDirectories(@NotNull Project project, @NotNull VirtualFile... expectedIgnoredDirs) { List expectedIgnoredPaths = new ArrayList(); - for (VirtualFile dir : ignoredDirs) { - expectedIgnoredPaths.add(dir.getPath() + "/"); + for (VirtualFile dir : expectedIgnoredDirs) { + expectedIgnoredPaths.add(dir.getPath()+"/"); } - List actualIgnoredPaths = new ArrayList(); - for (IgnoredFileBean fileBean : ChangeListManagerImpl.getInstanceImpl(project).getFilesToIgnore()) { - assertEquals("Unexpected ignore: " + fileBean, IgnoreSettingsType.UNDER_DIR, fileBean.getType()); - actualIgnoredPaths.add(fileBean.getPath()); - } - assertSameElements(expectedIgnoredPaths, actualIgnoredPaths); + ChangeListManagerImpl changeListManager = ChangeListManagerImpl.getInstanceImpl(project); + expectedIgnoredPaths.addAll(changeListManager.predefinedIgnorePaths()); + List actualIgnoredPaths = ContainerUtil.map2List(changeListManager.getFilesToIgnore(), new Function() { + @Override + public String fun(IgnoredFileBean bean) { + return bean.getPath(); + } + }); + assertSameElements(actualIgnoredPaths, expectedIgnoredPaths); } private ChangeListManagerImpl getChangeListManager() { diff --git a/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java b/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java index 0025c58ff063..5ce225e487bf 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/DomFileDescriptionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -15,10 +15,12 @@ */ package com.intellij.util.xml; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Disposer; import com.intellij.psi.PsiFile; import com.intellij.psi.xml.XmlFile; import com.intellij.util.xml.impl.DomFileElementImpl; @@ -35,45 +37,36 @@ import java.util.Set; public class DomFileDescriptionTest extends DomHardCoreTestCase { private XmlFile myFooElementFile; private XmlFile myBarElementFile; + private Disposable myDisposable = Disposer.newDisposable(); @Override protected void setUp() throws Exception { super.setUp(); - myFooElementFile = new WriteCommandAction(getProject()) { - @Override - protected void run(@NotNull Result result) throws Throwable { - result.setResult((XmlFile)createFile("a.xml", "")); - } - }.execute().getResultObject(); + myFooElementFile = (XmlFile)createFile("a.xml", ""); - getDomManager().registerFileDescription(new MockDomFileDescription(FooElement.class, "a", myFooElementFile), getTestRootDisposable()); + getDomManager().registerFileDescription(new MockDomFileDescription(FooElement.class, "a", myFooElementFile), myDisposable); - myBarElementFile = new WriteCommandAction(getProject()) { - @Override - protected void run(@NotNull Result result) throws Throwable { - result.setResult((XmlFile)createFile("b.xml", "")); - } - }.execute().getResultObject(); + myBarElementFile = (XmlFile)createFile("b.xml", ""); getDomManager().registerFileDescription(new DomFileDescription(BarElement.class, "b") { - @Override public boolean isMyFile(@NotNull final XmlFile file, final Module module) { - return myFooElementFile.getText().contains("239"); + String text = myFooElementFile.getText(); + return text.contains("239"); } - @Override public boolean isAutomaticHighlightingEnabled() { return false; } - }, getTestRootDisposable()); + }, myDisposable); assertResultsAndClear(); } @Override public void tearDown() throws Exception { + Disposer.dispose(myDisposable); myFooElementFile = null; myBarElementFile = null; @@ -93,7 +86,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { public boolean isMyFile(@NotNull final XmlFile file, final Module module) { return /*super.isMyFile(file, module) && */file.getText().contains("239"); } - }, getTestRootDisposable()); + }, myDisposable); assertFalse(getDomManager().isDomFile(file)); @@ -127,7 +120,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { public void testCopyFileDescriptionFromOriginalFile() throws Throwable { final XmlFile file = (XmlFile)createFile("a.xml", "42"); - getDomManager().registerFileDescription(new MockDomFileDescription(MyElement.class, "b", file), getTestRootDisposable()); + getDomManager().registerFileDescription(new MockDomFileDescription(MyElement.class, "b", file), myDisposable); file.setName("b.xml"); assertTrue(getDomManager().isDomFile(file)); final XmlFile copy = (XmlFile)file.copy(); @@ -138,7 +131,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { public void testDependantFileDescriptionCauseStackOverflow() throws Throwable { final XmlFile interestingFile = (XmlFile)createFile("a.xml", "42"); - getDomManager().registerFileDescription(new MockDomFileDescription(MyElement.class, "b", (XmlFile)null), getTestRootDisposable()); + getDomManager().registerFileDescription(new MockDomFileDescription(MyElement.class, "b", (XmlFile)null), myDisposable); for (int i = 0; i < 239; i++) { getDomManager().registerFileDescription(new MockDomFileDescription(AbstractElement.class, "b", (XmlFile)null) { @Override @@ -147,7 +140,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { getDomManager().isDomFile(interestingFile); return super.getDependencyItems(file); } - }, getTestRootDisposable()); + }, myDisposable); } getDomManager().isDomFile(interestingFile); @@ -160,7 +153,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { protected void initializeFileDescription() { registerNamespacePolicy("foo", "bar"); } - }, getTestRootDisposable()); + }, myDisposable); final PsiFile file = createFile("xxx.xml", ""); assertFalse(getDomManager().isDomFile(file)); @@ -182,7 +175,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { protected void initializeFileDescription() { registerNamespacePolicy("foo", "bar"); } - }, getTestRootDisposable()); + }, myDisposable); final PsiFile file = createFile("xxx.xml", ""); assertFalse(getDomManager().isDomFile(file)); @@ -205,7 +198,7 @@ public class DomFileDescriptionTest extends DomHardCoreTestCase { public boolean isMyFile(@NotNull final XmlFile file, @Nullable final Module module) { return file.getText().contains("foo"); } - }, getTestRootDisposable()); + }, myDisposable); final XmlFile file = (XmlFile)createFile("xxx.xml", ""); final MyElement boy = getDomManager().getFileElement(file, MyElement.class).getRootElement().getBoys().get(0); new WriteCommandAction(getProject()) {