diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java index 770fc0989716..1ff3398a72e9 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java @@ -432,17 +432,17 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { } private Set deleteFiles(final List paths, CompileContext context) { - final Set artifactsToBuild = getAffectedArtifacts(context); final boolean testMode = ApplicationManager.getApplication().isUnitTestMode(); final THashSet deletedJars = new THashSet(); + final THashSet notDeletedJars = new THashSet(); if (LOG.isDebugEnabled()) { LOG.debug("Deleting outdated files..."); } + int notDeletedFilesCount = 0; final Artifact[] allArtifacts = ArtifactManager.getInstance(context.getProject()).getArtifacts(); - List filesToRefresh = new ArrayList(); for (String fullPath : paths) { boolean isUnderOutput = false; @@ -460,23 +460,44 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { if (isUnderOutput && !isInArtifactsToBuild) continue; int end = fullPath.indexOf(JarFileSystem.JAR_SEPARATOR); - String filePath = end != -1 ? fullPath.substring(0, end) : fullPath; - if (end != -1) { - deletedJars.add(filePath); + boolean isJar = end != -1; + String filePath = isJar ? fullPath.substring(0, end) : fullPath; + boolean deleted = false; + if (isJar) { + if (notDeletedJars.contains(filePath)) { + continue; + } + deleted = deletedJars.contains(filePath); } + File file = new File(FileUtil.toSystemDependentName(filePath)); - filesToRefresh.add(file); - boolean deleted = FileUtil.delete(file); - if (!deleted && LOG.isDebugEnabled()) { - LOG.debug("Cannot delete file " + file); + if (!deleted) { + filesToRefresh.add(file); + deleted = FileUtil.delete(file); } if (deleted) { + if (isJar) { + deletedJars.add(filePath); + } if (testMode) { CompilerManagerImpl.addDeletedPath(file.getAbsolutePath()); } getOutputItemsCache(context.getProject()).remove(fullPath); } + else { + if (isJar) { + notDeletedJars.add(filePath); + } + if (notDeletedFilesCount++ > 50) { + context.addMessage(CompilerMessageCategory.WARNING, "Deletion of outdated files stopped because too many files cannot be deleted", null, -1, -1); + break; + } + context.addMessage(CompilerMessageCategory.WARNING, "Cannot delete file '" + filePath + "'", null, -1, -1); + if (LOG.isDebugEnabled()) { + LOG.debug("Cannot delete file " + file); + } + } } CompilerUtil.refreshIOFiles(filesToRefresh); diff --git a/lib/nanoxml-2.2.3.jar b/lib/nanoxml-2.2.3.jar index ac0c46b3323d..237a15828d75 100644 Binary files a/lib/nanoxml-2.2.3.jar and b/lib/nanoxml-2.2.3.jar differ diff --git a/lib/src/nanoxml.zip b/lib/src/nanoxml.zip index 7f120aad7f15..e1d297e4ebd2 100644 Binary files a/lib/src/nanoxml.zip and b/lib/src/nanoxml.zip differ diff --git a/platform/lang-api/src/com/intellij/util/xml/NanoXmlUtil.java b/platform/lang-api/src/com/intellij/util/xml/NanoXmlUtil.java index a4f1a65e099b..64b8a3e9b8d3 100644 --- a/platform/lang-api/src/com/intellij/util/xml/NanoXmlUtil.java +++ b/platform/lang-api/src/com/intellij/util/xml/NanoXmlUtil.java @@ -336,6 +336,10 @@ public class NanoXmlUtil { } public static class ParserStoppedException extends RuntimeException { + @Override + public Throwable fillInStackTrace() { + return this; + } } private static class RootTagInfoBuilder implements IXMLBuilder { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CodeBlockUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CodeBlockUtil.java index cc1fb0cb56d1..9eec9a0cea81 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CodeBlockUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CodeBlockUtil.java @@ -29,6 +29,7 @@ import com.intellij.lang.Language; import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.highlighter.HighlighterIterator; +import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDocumentManager; @@ -50,6 +51,7 @@ public class CodeBlockUtil { PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(document); if (file == null) return; + IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); final IndentGuideDescriptor guide = editor.getIndentsModel().getCaretIndentGuide(); if (guide != null) { editor.getCaretModel().moveToLogicalPosition(new LogicalPosition(guide.endLine, guide.indentLevel)); @@ -73,6 +75,7 @@ public class CodeBlockUtil { int selectionStart = editor.getSelectionModel().getLeadSelectionOffset(); if (file == null) return; + IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); final IndentGuideDescriptor guide = editor.getIndentsModel().getCaretIndentGuide(); if (guide != null) { editor.getCaretModel().moveToLogicalPosition(new LogicalPosition(guide.startLine, guide.indentLevel)); diff --git a/platform/platform-api/src/com/intellij/projectImport/ProjectOpenProcessor.java b/platform/platform-api/src/com/intellij/projectImport/ProjectOpenProcessor.java index 7a90cbd39fc4..909f49481ced 100644 --- a/platform/platform-api/src/com/intellij/projectImport/ProjectOpenProcessor.java +++ b/platform/platform-api/src/com/intellij/projectImport/ProjectOpenProcessor.java @@ -20,6 +20,7 @@ package com.intellij.projectImport; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -39,4 +40,14 @@ public abstract class ProjectOpenProcessor { @Nullable public abstract Project doOpenProject(@NotNull VirtualFile virtualFile, Project projectToClose, boolean forceOpenInNewFrame); + + @Nullable + public static ProjectOpenProcessor getImportProvider(VirtualFile file) { + for (ProjectOpenProcessor provider : Extensions.getExtensions(EXTENSION_POINT_NAME)) { + if (provider.canOpenProject(file)) { + return provider; + } + } + return null; + } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java b/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java index 8248da96c861..70d445aa6998 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java @@ -16,7 +16,6 @@ package com.intellij.ide.actions; import com.intellij.ide.highlighter.ProjectFileType; -import com.intellij.ide.impl.ProjectUtil; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileElement; @@ -59,7 +58,7 @@ public class OpenProjectFileChooserDescriptor extends FileChooserDescriptor { @Nullable public static Icon getImporterIcon(final VirtualFile virtualFile, final boolean open) { - final ProjectOpenProcessor provider = ProjectUtil.getImportProvider(virtualFile); + final ProjectOpenProcessor provider = ProjectOpenProcessor.getImportProvider(virtualFile); if(provider!=null) { return provider.getIcon(); } @@ -73,7 +72,7 @@ public class OpenProjectFileChooserDescriptor extends FileChooserDescriptor { private static boolean isProjectFile(final VirtualFile file) { return (!file.isDirectory() && file.getName().toLowerCase().endsWith(ProjectFileType.DOT_DEFAULT_EXTENSION)) || - (ProjectUtil.getImportProvider(file) != null); + (ProjectOpenProcessor.getImportProvider(file) != null); } private static boolean isProjectDirectory(final VirtualFile virtualFile) { diff --git a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java index d1dcd4b60608..bbae5258b73a 100644 --- a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java @@ -24,7 +24,6 @@ import com.intellij.ide.highlighter.WorkspaceFileType; import com.intellij.openapi.components.StorageScheme; import com.intellij.openapi.components.impl.stores.IProjectStore; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; @@ -110,23 +109,13 @@ public class ProjectUtil { virtualFile.isDirectory() && virtualFile.findChild(DIRECTORY_BASED_PROJECT_DIR) != null) { return openProject(path, projectToClose, forceOpenInNewFrame); } - ProjectOpenProcessor provider = getImportProvider(virtualFile); + ProjectOpenProcessor provider = ProjectOpenProcessor.getImportProvider(virtualFile); if (provider != null) { return provider.doOpenProject(virtualFile, projectToClose, forceOpenInNewFrame); } return null; } - @Nullable - public static ProjectOpenProcessor getImportProvider(VirtualFile file) { - for (ProjectOpenProcessor provider : Extensions.getExtensions(ProjectOpenProcessor.EXTENSION_POINT_NAME)) { - if (provider.canOpenProject(file)) { - return provider; - } - } - return null; - } - @Nullable public static Project openProject(final String path, Project projectToClose, boolean forceOpenInNewFrame) { File file = new File(path); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java index dfd2f1438a3b..3a574acad0f4 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java @@ -36,6 +36,7 @@ import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.projectImport.ProjectOpenProcessor; import com.intellij.ui.ColoredTableCellRenderer; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.table.TableView; @@ -320,7 +321,8 @@ public class MultipleFileMergeDialog extends DialogWrapper { private void checkMarkModifiedProject(final VirtualFile file) { if (file.getFileType() == StdFileTypes.IDEA_MODULE || file.getFileType() == StdFileTypes.IDEA_PROJECT || - file.getFileType() == StdFileTypes.IDEA_WORKSPACE) { + file.getFileType() == StdFileTypes.IDEA_WORKSPACE || + ProjectOpenProcessor.getImportProvider(file) != null) { myProjectManager.saveChangedProjectFile(file, myProject); } } diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsoperations/cvsUpdate/UpdateReceivedFileProcessor.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsoperations/cvsUpdate/UpdateReceivedFileProcessor.java index 75d13422ddf2..c2aaa983dc24 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsoperations/cvsUpdate/UpdateReceivedFileProcessor.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsoperations/cvsUpdate/UpdateReceivedFileProcessor.java @@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.projectImport.ProjectOpenProcessor; import java.io.File; import java.io.IOException; @@ -64,6 +65,7 @@ public class UpdateReceivedFileProcessor implements ReceivedFileProcessor { private static boolean isProjectOrModuleFile(VirtualFile virtualFile) { if (virtualFile == null) return false; + if (ProjectOpenProcessor.getImportProvider(virtualFile) != null) return true; FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(virtualFile); return fileType == StdFileTypes.IDEA_PROJECT diff --git a/plugins/groovy/hotswap/build.xml b/plugins/groovy/hotswap/build.xml index cf1fd28b30e7..67870ab492d4 100644 --- a/plugins/groovy/hotswap/build.xml +++ b/plugins/groovy/hotswap/build.xml @@ -21,7 +21,7 @@ - + diff --git a/plugins/groovy/hotswap/gragent.jar b/plugins/groovy/hotswap/gragent.jar index c41823ca5677..381cf407f248 100644 Binary files a/plugins/groovy/hotswap/gragent.jar and b/plugins/groovy/hotswap/gragent.jar differ diff --git a/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml b/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml index c5a407105d9c..4c16777d60a1 100644 --- a/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml +++ b/plugins/groovy/hotswap/pluginSrc/META-INF/plugin.xml @@ -2,7 +2,7 @@ org.intellij.groovy.hotswap Groovy HotSwap Enables HotSwap functionality in Groovy classes - 0.3 + 0.4 JetBrains Inc. org.intellij.groovy