From ae70c82d4da78577825a7f7086f35838ba3819a8 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 13 Nov 2009 16:59:07 +0300 Subject: [PATCH] cleanup: toArray -> toVirtualFileArray() --- .../thumbnail/impl/ThumbnailViewUI.java | 2 +- .../compiler/actions/CompileAction.java | 3 +- .../actions/GenerateAntBuildAction.java | 2 +- .../compiler/ant/ModuleChunkSourcepath.java | 4 +- .../compiler/impl/CompileContextImpl.java | 2 +- .../intellij/compiler/impl/CompileDriver.java | 7 +- .../compiler/impl/CompositeScope.java | 3 +- .../compiler/impl/FileIndexCompileScope.java | 3 +- .../compiler/impl/FileSetCompileScope.java | 3 +- .../impl/OneProjectItemCompileScope.java | 3 +- .../javaCompiler/BackendCompilerWrapper.java | 2 +- .../impl/javaCompiler/ModuleChunk.java | 5 +- .../IncrementalArtifactsCompiler.java | 2 +- .../impl/ui/actions/PackageFileAction.java | 3 +- .../openapi/compiler/ex/CompilerPathsEx.java | 3 +- .../debugger/impl/HotSwapManager.java | 3 +- .../autodetecting/DetectedFacetManager.java | 3 +- .../ImplicitFacetsTreeComponent.java | 3 +- .../FacetLibrariesValidatorImpl.java | 3 +- .../LibraryCompositionOptionsPanel.java | 3 +- .../libraries/LibraryCompositionSettings.java | 5 +- .../impl/ui/libraries/LibraryDownloader.java | 2 +- .../openapi/projectRoots/ui/PathEditor.java | 3 +- .../ui/configuration/ClasspathPanel.java | 3 +- .../roots/ui/configuration/PathUIUtils.java | 3 +- .../libraryEditor/LibraryTableEditor.java | 7 +- .../method/OverrideImplementMethodAction.java | 3 +- .../projectRoots/impl/JavaSdkImpl.java | 7 +- .../impl/CompilerModuleExtensionImpl.java | 3 +- .../psi/impl/file/PsiPackageImpl.java | 3 +- .../roots/AnnotationOrderRootType.java | 3 +- .../openapi/command/WriteCommandAction.java | 3 +- .../openapi/roots/libraries/LibraryUtil.java | 3 +- .../util/CommonRefactoringUtil.java | 3 +- .../codeInsight/CodeInsightUtilBase.java | 3 +- .../codeInspection/ex/QuickFixAction.java | 5 +- .../ReplaceInProjectManager.java | 5 +- .../impl/FileTemplateManagerImpl.java | 2 +- .../impl/dataRules/VirtualFileArrayRule.java | 7 +- .../ide/navigationToolbar/NavBarPanel.java | 2 +- .../ide/projectView/impl/ProjectViewImpl.java | 3 +- .../impl/CompositeProjectRoot.java | 3 +- .../projectRoots/impl/ProjectJdkImpl.java | 3 +- .../roots/impl/DirectoryIndexImpl.java | 383 +++++++++++++----- .../roots/impl/libraries/LibraryImpl.java | 7 +- .../psi/impl/cache/impl/VfsIndexer.java | 5 +- .../impl/include/FileIncludeManagerImpl.java | 5 +- .../util/fileIndex/AbstractFileIndex.java | 3 +- .../FileIndexRefreshCacheUpdater.java | 2 +- .../FileBasedIndexProjectHandler.java | 3 +- .../util/indexing/UnindexedFilesUpdater.java | 3 +- .../integration/CacheUpdaterProcessor.java | 3 +- .../integration/LocalHistoryCacheUpdater.java | 2 +- .../openapi/vfs/ReadonlyStatusHandler.java | 2 +- .../src/com/intellij/openapi/vfs/VfsUtil.java | 9 +- .../ToggleReadOnlyAttributeAction.java | 3 +- .../openapi/command/impl/UndoRedo.java | 3 +- .../fileChooser/ex/FileChooserDialogImpl.java | 3 +- .../fileChooser/ex/FileSystemTreeImpl.java | 2 +- .../fileChooser/impl/FileTreeStructure.java | 3 +- .../fileEditor/impl/EditorsSplitters.java | 5 +- .../impl/IdeDocumentHistoryImpl.java | 2 +- .../ReadonlyStatusHandlerImpl.java | 8 +- .../ex/dummy/VirtualFileDirectoryImpl.java | 3 +- .../impl/VirtualFilePointerContainerImpl.java | 5 +- .../vfs/impl/jar/JarFileSystemImpl.java | 2 +- .../vfs/impl/local/LocalFileSystemBase.java | 4 +- .../vfs/newvfs/persistent/PersistentFS.java | 6 +- .../impl/CodeInsightTestFixtureImpl.java | 2 +- .../intellij/usages/impl/UsageViewImpl.java | 5 +- .../openapi/vcs/changes/ChangesUtil.java | 3 +- .../src/com/intellij/vcsUtil/VcsUtil.java | 3 +- .../diff/impl/patch/formove/PatchApplier.java | 3 +- .../vcs/actions/VcsContextWrapper.java | 3 +- .../vcs/changes/ChangeListManagerImpl.java | 5 +- .../vcs/changes/actions/EditAction.java | 3 +- .../vcs/changes/ui/ChangesListView.java | 3 +- .../changes/ui/IgnoreUnversionedDialog.java | 2 +- .../vcs/impl/ProjectLevelVcsManagerImpl.java | 3 +- .../impl/projectlevelman/MappingsToRoots.java | 3 +- .../vcs/readOnlyHandler/VcsHandleType.java | 3 +- .../openapi/vcs/update/UpdateInfoTree.java | 4 +- .../lang/ant/config/explorer/AntExplorer.java | 3 +- .../actions/AbstractFileProcessor.java | 3 +- .../cvsSupport2/CvsUpdateEnvironment.java | 3 +- .../cvsSupport2/actions/IgnoreFileAction.java | 2 +- .../cvsSupport2/actions/merge/MergeInfo.java | 3 +- .../cvsSupport2/application/AddHandler.java | 3 +- .../checkinProject/CvsCheckinEnvironment.java | 3 +- .../cvshandlers/AnyProcessedFiles.java | 3 +- .../cvshandlers/CommandCvsHandler.java | 4 +- .../quickfix/CreateHtmlDescriptionFix.java | 5 +- plugins/devkit/src/projectRoots/IdeaJdk.java | 7 +- .../src/git4idea/actions/BasicAction.java | 3 +- .../checkin/GitConvertFilesDialog.java | 3 +- .../groovy/compiler/GroovyCompilerBase.java | 2 +- .../generator/GroovyToJavaGenerator.java | 5 +- .../generator/GroovycStubGenerator.java | 2 +- .../MavenProjectsNavigatorPanel.java | 3 +- .../properties/PropertiesFilesManager.java | 3 +- .../jetbrains/idea/svn/SvnChangeProvider.java | 3 +- .../svn/SvnChangesCorrectlyRefreshedTest.java | 8 +- 102 files changed, 488 insertions(+), 250 deletions(-) diff --git a/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewUI.java b/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewUI.java index 338d4b5aa11a..490e742fe47f 100644 --- a/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewUI.java +++ b/images/src/org/intellij/images/thumbnail/impl/ThumbnailViewUI.java @@ -164,7 +164,7 @@ final class ThumbnailViewUI extends JPanel implements DataProvider, Disposable { VirtualFile root = thumbnailView.getRoot(); if (root != null && root.isValid() && root.isDirectory()) { Set files = findFiles(root.getChildren()); - VirtualFile[] virtualFiles = files.toArray(VirtualFile.EMPTY_ARRAY); + VirtualFile[] virtualFiles = VfsUtil.toVirtualFileArray(files); Arrays.sort(virtualFiles, VIRTUAL_FILE_COMPARATOR); model.ensureCapacity(model.size() + virtualFiles.length + 1); diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java index 98110132c837..98de5796cef4 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java @@ -30,6 +30,7 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -188,7 +189,7 @@ public class CompileAction extends CompileActionBase { } filesToCompile.add(file); } - return filesToCompile.size() > 0 ? filesToCompile.toArray(new VirtualFile[filesToCompile.size()]) : VirtualFile.EMPTY_ARRAY; + return VfsUtil.toVirtualFileArray(filesToCompile); } private boolean isCompilableResourceFile(final Project project, final CompilerConfiguration compilerConfiguration, final VirtualFile file) { diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java index f1cb28a9d51b..2429e5996174 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java @@ -279,7 +279,7 @@ public class GenerateAntBuildAction extends CompileActionBase { } } final ReadonlyStatusHandler.OperationStatus status = - ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(toCheck.toArray(new VirtualFile[toCheck.size()])); + ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(VfsUtil.toVirtualFileArray(toCheck)); if (status.hasReadonlyFiles()) { throw new IOException(status.getReadonlyFilesMessage()); } diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkSourcepath.java b/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkSourcepath.java index 8ca8780b2ea6..2c76877d43ec 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkSourcepath.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkSourcepath.java @@ -107,8 +107,8 @@ public class ModuleChunkSourcepath extends CompositeGenerator{ } } - mySourceRoots = sourceRootFiles.toArray(new VirtualFile[sourceRootFiles.size()]); - myTestSourceRoots = testSourceRootFiles.toArray(new VirtualFile[testSourceRootFiles.size()]); + mySourceRoots = VfsUtil.toVirtualFileArray(sourceRootFiles); + myTestSourceRoots = VfsUtil.toVirtualFileArray(testSourceRootFiles); if (excludedFromCompilation.getGeneratorCount() > 0) { add(excludedFromCompilation, 1); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileContextImpl.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileContextImpl.java index a08a677b80b2..c4b7ea5ebe66 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileContextImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileContextImpl.java @@ -112,7 +112,7 @@ public class CompileContextImpl extends UserDataHolderBase implements CompileCon testOutputDirs.add(testsOutput); } } - myOutputDirectories = allDirs.toArray(new VirtualFile[allDirs.size()]); + myOutputDirectories = VfsUtil.toVirtualFileArray(allDirs); // need this to ensure that the sent contains only _dedicated_ test output dirs // Directories that are configured for both test and production classes must not be added in the resulting set testOutputDirs.removeAll(productionOutputDirs); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index 05f5a90c39cc..5a062c1a913a 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -939,7 +939,8 @@ public class CompileDriver { try { final Collection deps = CacheUtils.findDependentFiles(context, Collections.emptySet(), null, null); if (deps.size() > 0) { - TranslatingCompilerFilesMonitor.getInstance().update(context, null, Collections.emptyList(), deps.toArray(new VirtualFile[deps.size()])); + TranslatingCompilerFilesMonitor.getInstance().update(context, null, Collections.emptyList(), + VfsUtil.toVirtualFileArray(deps)); } } catch (IOException ignored) { @@ -1432,7 +1433,7 @@ public class CompileDriver { // todo: drop this? final FileTypeManager fileTypeManager = FileTypeManager.getInstance(); final PsiManager psiManager = PsiManager.getInstance(myProject); - for (final VirtualFile file : toCompile.toArray(new VirtualFile[toCompile.size()])) { + for (final VirtualFile file : VfsUtil.toVirtualFileArray(toCompile)) { if (fileTypeManager.getFileTypeByFile(file) == StdFileTypes.JAVA) { final PsiFile psiFile = psiManager.findFile(file); if (psiFile != null) { @@ -1470,7 +1471,7 @@ public class CompileDriver { } if ((wereFilesDeleted[0] || !toCompile.isEmpty()) && context.getMessageCount(CompilerMessageCategory.ERROR) == 0) { - compiler.compile(context, moduleChunk, toCompile.toArray(new VirtualFile[toCompile.size()]), sink); + compiler.compile(context, moduleChunk, VfsUtil.toVirtualFileArray(toCompile), sink); } } finally { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java index f3dce9529cc8..3f15c8af5ab3 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java @@ -26,6 +26,7 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.UserDataHolderBase; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; @@ -67,7 +68,7 @@ public class CompositeScope extends UserDataHolderBase implements CompileScope{ allFiles.addAll(Arrays.asList(files)); } } - return allFiles.toArray(new VirtualFile[allFiles.size()]); + return VfsUtil.toVirtualFileArray(allFiles); } public boolean belongs(String url) { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/FileIndexCompileScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/FileIndexCompileScope.java index 7d33e2431f61..9b6058469279 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/FileIndexCompileScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/FileIndexCompileScope.java @@ -19,6 +19,7 @@ import com.intellij.openapi.compiler.CompileScope; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.roots.FileIndex; import com.intellij.openapi.util.UserDataHolderBase; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -40,6 +41,6 @@ public abstract class FileIndexCompileScope extends UserDataHolderBase implement for (final FileIndex fileIndex : fileIndices) { fileIndex.iterateContent(new CompilerContentIterator(fileType, fileIndex, inSourceOnly, files)); } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java index 7032ef8f87f4..c29bf5ec1f31 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java @@ -28,6 +28,7 @@ import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -77,7 +78,7 @@ public class FileSetCompileScope extends UserDataHolderBase implements CompileSc } } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public boolean belongs(String url) { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/OneProjectItemCompileScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/OneProjectItemCompileScope.java index c1602fa9bd63..c815ecde5e45 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/OneProjectItemCompileScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/OneProjectItemCompileScope.java @@ -26,6 +26,7 @@ import com.intellij.openapi.roots.FileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -56,7 +57,7 @@ public class OneProjectItemCompileScope extends UserDataHolderBase implements Co else{ iterator.processFile(myFile); } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public boolean belongs(String url) { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompilerWrapper.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompilerWrapper.java index 137b51e7d445..aa32160eda0d 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompilerWrapper.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompilerWrapper.java @@ -181,7 +181,7 @@ public class BackendCompilerWrapper { } final List outputs = processPackageInfoFiles(); if (myFilesToRecompile.size() > 0 || outputs.size() > 0) { - mySink.add(null, outputs, myFilesToRecompile.toArray(new VirtualFile[myFilesToRecompile.size()])); + mySink.add(null, outputs, VfsUtil.toVirtualFileArray(myFilesToRecompile)); } } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java index 9c6286ed4723..acc9b1e49f87 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java @@ -28,6 +28,7 @@ import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.OrderEntry; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.util.Chunk; @@ -167,7 +168,7 @@ public class ModuleChunk extends Chunk { } filteredRoots.add(root); } - return filteredRoots.toArray(new VirtualFile[filteredRoots.size()]); + return VfsUtil.toVirtualFileArray(filteredRoots); } private VirtualFile[] getAllSourceRoots() { @@ -176,7 +177,7 @@ public class ModuleChunk extends Chunk { for (final Module module : modules) { roots.addAll(Arrays.asList(myContext.getSourceRoots(module))); } - return roots.toArray(new VirtualFile[roots.size()]); + return VfsUtil.toVirtualFileArray(roots); } public String getCompilationClasspath() { 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 d69002ac1c8f..c3cfc7ebd99b 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 @@ -393,7 +393,7 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { for (ArtifactPackagingProcessingItem item : processedItems) { files.add(item.getFile()); } - RefreshQueue.getInstance().refresh(false, false, null, files.toArray(new VirtualFile[files.size()])); + RefreshQueue.getInstance().refresh(false, false, null, VfsUtil.toVirtualFileArray(files)); final Iterator iterator = processedItems.iterator(); while (iterator.hasNext()) { diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/ui/actions/PackageFileAction.java b/java/compiler/impl/src/com/intellij/packaging/impl/ui/actions/PackageFileAction.java index 0f4560abbd29..ba1312d806c7 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/ui/actions/PackageFileAction.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/ui/actions/PackageFileAction.java @@ -15,6 +15,7 @@ import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.WindowManager; import com.intellij.packaging.artifacts.Artifact; @@ -79,7 +80,7 @@ public class PackageFileAction extends AnAction { for (VirtualFile file : files) { PackageFileWorker.packageFile(file, project); } - setStatusText(project, files.toArray(new VirtualFile[files.size()])); + setStatusText(project, VfsUtil.toVirtualFileArray(files)); } catch (IOException e) { Messages.showErrorDialog(CompilerBundle.message("message.tect.package.file.io.error", e), CommonBundle.getErrorTitle()); diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java index b96062b8dd21..3017682409c6 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java @@ -21,6 +21,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.CompilerModuleExtension; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.ArrayUtil; @@ -114,6 +115,6 @@ public class CompilerPathsEx extends CompilerPaths { dirs.add(testsOutputDir); } } - return dirs.toArray(new VirtualFile[dirs.size()]); + return VfsUtil.toVirtualFileArray(dirs); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java index 886f6c8a4ba7..f7289ea7ad7e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java @@ -31,6 +31,7 @@ import com.intellij.openapi.roots.ProjectRootsTraversing; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.HashMap; import org.jetbrains.annotations.NotNull; @@ -80,7 +81,7 @@ public class HotSwapManager extends AbstractProjectComponent { public void run() { final List allClasses = ProjectRootsTraversing.collectRoots(myProject, ProjectClasspathTraversing.FULL_CLASSPATH_RECURSIVE).getRootDirs(); - final VirtualFile[] allDirs = allClasses.toArray(new VirtualFile[allClasses.size()]); + final VirtualFile[] allDirs = VfsUtil.toVirtualFileArray(allClasses); final FileTypeManager fileTypeManager = FileTypeManager.getInstance(); CompilerPathsEx.visitFiles(allDirs, new CompilerPathsEx.FileVisitor() { diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/DetectedFacetManager.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/DetectedFacetManager.java index 8b4b0e49194f..5e10b6d25a6d 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/DetectedFacetManager.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/DetectedFacetManager.java @@ -44,6 +44,7 @@ import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.MultiValuesMap; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.Alarm; @@ -161,7 +162,7 @@ public class DetectedFacetManager implements Disposable { if (filesMap.size() == 1) { final DetectedFacetInfo facetInfo = detectedFacetInfos.iterator().next(); final List files = filesMap.get(facetInfo); - notification = createSingleFacetDetectedNotification(facetInfo, files.toArray(new VirtualFile[files.size()])); + notification = createSingleFacetDetectedNotification(facetInfo, VfsUtil.toVirtualFileArray(files)); } else { notification = createSeveralFacetsDetectedNotification(filesMap.keySet()); diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/facetsTree/ImplicitFacetsTreeComponent.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/facetsTree/ImplicitFacetsTreeComponent.java index 2ca94d7a2027..b297ea5b6d68 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/facetsTree/ImplicitFacetsTreeComponent.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/facetsTree/ImplicitFacetsTreeComponent.java @@ -23,6 +23,7 @@ import com.intellij.facet.impl.autodetecting.model.DetectedFacetInfo; import com.intellij.facet.impl.autodetecting.model.FacetInfo2; import com.intellij.facet.impl.autodetecting.model.FacetInfoBackedByFacet; import com.intellij.openapi.module.Module; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; @@ -149,7 +150,7 @@ public class ImplicitFacetsTreeComponent { private FacetNodeImpl(@NotNull DetectedFacetInfo detectedFacet, VirtualFile projectRoot, @Nullable final DetectedFacetsTree.FacetNode parent, final @NotNull List files) { - super(detectedFacet, detectedFacet.getFacetType(), projectRoot, files.toArray(new VirtualFile[files.size()]), parent); + super(detectedFacet, detectedFacet.getFacetType(), projectRoot, VfsUtil.toVirtualFileArray(files), parent); myDetectedFacetInfo = detectedFacet; } diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java index 56e49cb9e3fa..448e7f9db761 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java @@ -27,6 +27,7 @@ import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.application.Result; @@ -75,7 +76,7 @@ public class FacetLibrariesValidatorImpl extends FacetLibrariesValidator { ModuleRootModel rootModel = myContext.getRootModel(); List roots = collectRoots(rootModel); - RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = myRequiredLibraries.checkLibraries(roots.toArray(new VirtualFile[roots.size()])); + RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = myRequiredLibraries.checkLibraries(VfsUtil.toVirtualFileArray(roots)); if (info == null) { return ValidationResult.OK; } diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java index 94c15c9f84c4..651c8336f945 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java @@ -31,6 +31,7 @@ import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.openapi.util.MutualMap; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.IdeBorderFactory; import com.intellij.util.ui.UIUtil; @@ -198,7 +199,7 @@ public class LibraryCompositionOptionsPanel { roots.addAll(Arrays.asList(myLibrariesContainer.getLibraryFiles(library, OrderRootType.CLASSES))); } RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = new RequiredLibrariesInfo(myLibraryCompositionSettings.getLibraryInfos()).checkLibraries( - roots.toArray(new VirtualFile[roots.size()])); + VfsUtil.toVirtualFileArray(roots)); if (info != null) { missingJarsText = ProjectBundle.message("label.text.libraries.are.missing", info.getMissingJarsText()); } diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java index ee28d78aecfc..1a5c4d4d0fb9 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java @@ -22,6 +22,7 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -121,7 +122,7 @@ public class LibraryCompositionSettings { for (Library library : myUsedLibraries) { roots.addAll(Arrays.asList(librariesContainer.getLibraryFiles(library, OrderRootType.CLASSES))); } - VirtualFile[] jars = roots.toArray(new VirtualFile[roots.size()]); + VirtualFile[] jars = VfsUtil.toVirtualFileArray(roots); RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = requiredLibraries.checkLibraries(jars); if (info != null) { LibraryDownloadInfo[] downloadingInfos = LibraryDownloader.getDownloadingInfos(info.getLibraryInfos()); @@ -143,7 +144,7 @@ public class LibraryCompositionSettings { @Nullable private Library createLibrary(final ModifiableRootModel rootModel, @Nullable LibrariesContainer additionalContainer) { if (!myAddedJars.isEmpty()) { - VirtualFile[] roots = myAddedJars.toArray(new VirtualFile[myAddedJars.size()]); + VirtualFile[] roots = VfsUtil.toVirtualFileArray(myAddedJars); return LibrariesContainerFactory.createLibrary(additionalContainer, LibrariesContainerFactory.createContainer(rootModel), myLibraryName, myLibraryLevel, roots, VirtualFile.EMPTY_ARRAY); } diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryDownloader.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryDownloader.java index f4c799c51f53..78fd324c8109 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryDownloader.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryDownloader.java @@ -230,7 +230,7 @@ public class LibraryDownloader { } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } private static String getExpectedFileName(LibraryDownloadInfo info) { diff --git a/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/PathEditor.java b/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/PathEditor.java index e87441e3cb0c..3fe0236751a6 100644 --- a/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/PathEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/PathEditor.java @@ -28,6 +28,7 @@ import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.ex.http.HttpFileSystem; import com.intellij.ui.ListUtil; @@ -201,7 +202,7 @@ public abstract class PathEditor { added.add(vFile); } } - return added.toArray(new VirtualFile[added.size()]); + return VfsUtil.toVirtualFileArray(added); } /** diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java index a6fe96046cad..60341f0b1df2 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java @@ -50,6 +50,7 @@ import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.*; @@ -1100,7 +1101,7 @@ public class ClasspathPanel extends JPanel { alreadyAdded.addAll(Arrays.asList(library.getFiles(OrderRootType.CLASSES))); } chosenFilesSet.removeAll(alreadyAdded); - return chosenFilesSet.toArray(new VirtualFile[chosenFilesSet.size()]); + return VfsUtil.toVirtualFileArray(chosenFilesSet); } public void doChoose() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java index d9ed93ac20a0..6127aae93b61 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java @@ -18,6 +18,7 @@ package com.intellij.openapi.roots.ui.configuration; import com.intellij.ide.util.JavaUtilForVfs; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.roots.ui.configuration.libraryEditor.DetectedSourceRootsDialog; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.awt.*; @@ -68,6 +69,6 @@ public class PathUIUtils { result.clear(); } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java index 2e12307d4bd5..449b4cc56244 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java @@ -49,10 +49,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.ex.http.HttpFileSystem; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.TreeSpeedSearch; @@ -623,7 +620,7 @@ public class LibraryTableEditor implements Disposable { alreadyAdded.addAll(Arrays.asList(libraryFiles)); } chosenFilesSet.removeAll(alreadyAdded); - return chosenFilesSet.toArray(new VirtualFile[chosenFilesSet.size()]); + return VfsUtil.toVirtualFileArray(chosenFilesSet); } private class AttachClassesAction extends AttachItemAction { diff --git a/java/java-impl/src/com/intellij/ide/hierarchy/method/OverrideImplementMethodAction.java b/java/java-impl/src/com/intellij/ide/hierarchy/method/OverrideImplementMethodAction.java index 55b606463eec..b2148fadb7de 100644 --- a/java/java-impl/src/com/intellij/ide/hierarchy/method/OverrideImplementMethodAction.java +++ b/java/java-impl/src/com/intellij/ide/hierarchy/method/OverrideImplementMethodAction.java @@ -25,6 +25,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.psi.PsiClass; @@ -68,7 +69,7 @@ abstract class OverrideImplementMethodAction extends AnAction { } } } - final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(files.toArray(new VirtualFile[files.size()])); + final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(VfsUtil.toVirtualFileArray(files)); if (!status.hasReadonlyFiles()) { for (HierarchyNodeDescriptor selectedDescriptor : selectedDescriptors) { OverrideImplementUtil.overrideOrImplement(((MethodHierarchyNodeDescriptor)selectedDescriptor).getPsiClass(), methodHierarchyBrowser.getBaseMethod()); diff --git a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java index bd7d84816a9d..a4527887c4b5 100644 --- a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java +++ b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java @@ -22,10 +22,7 @@ import com.intellij.openapi.roots.JavadocOrderRootType; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.vfs.*; import com.intellij.util.containers.HashMap; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -372,7 +369,7 @@ public class JavaSdkImpl extends JavaSdk { } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } private static void addSources(File file, SdkModificator sdkModificator) { diff --git a/java/java-impl/src/com/intellij/openapi/roots/impl/CompilerModuleExtensionImpl.java b/java/java-impl/src/com/intellij/openapi/roots/impl/CompilerModuleExtensionImpl.java index 48567f41cc0d..c2942aefeae0 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/impl/CompilerModuleExtensionImpl.java +++ b/java/java-impl/src/com/intellij/openapi/roots/impl/CompilerModuleExtensionImpl.java @@ -29,6 +29,7 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.pointers.VirtualFilePointer; import com.intellij.openapi.vfs.pointers.VirtualFilePointerListener; @@ -307,7 +308,7 @@ public class CompilerModuleExtensionImpl extends CompilerModuleExtension { result.add(outputPathForTests); } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } return null; } diff --git a/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java index 7d00c952f9c5..d07867db765d 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java @@ -34,6 +34,7 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.roots.*; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; @@ -262,7 +263,7 @@ public class PsiPackageImpl extends PsiElementBase implements PsiPackage { } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } public PsiPackage getParentPackage() { diff --git a/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java b/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java index 9d8e7bc17209..8b463194a59b 100644 --- a/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java +++ b/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.roots; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; @@ -61,7 +62,7 @@ public class AnnotationOrderRootType extends PersistentOrderRootType { } }; entry.accept(policy, result); - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } public static String[] getUrls(OrderEntry entry) { diff --git a/platform/lang-api/src/com/intellij/openapi/command/WriteCommandAction.java b/platform/lang-api/src/com/intellij/openapi/command/WriteCommandAction.java index ac368238052a..96c67825b315 100644 --- a/platform/lang-api/src/com/intellij/openapi/command/WriteCommandAction.java +++ b/platform/lang-api/src/com/intellij/openapi/command/WriteCommandAction.java @@ -18,6 +18,7 @@ package com.intellij.openapi.command; import com.intellij.openapi.application.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.ui.GuiUtils; @@ -99,7 +100,7 @@ public abstract class WriteCommandAction extends BaseActionRunnable { } } if (!list.isEmpty()) { - if (ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(list.toArray(new VirtualFile[list.size()])).hasReadonlyFiles()) { + if (ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(VfsUtil.toVirtualFileArray(list)).hasReadonlyFiles()) { return false; } } diff --git a/platform/lang-api/src/com/intellij/openapi/roots/libraries/LibraryUtil.java b/platform/lang-api/src/com/intellij/openapi/roots/libraries/LibraryUtil.java index b5942bd0c1a9..ad2cca57742a 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/libraries/LibraryUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/libraries/LibraryUtil.java @@ -23,6 +23,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.HashSet; import com.intellij.util.text.StringTokenizer; @@ -122,7 +123,7 @@ public class LibraryUtil { } } } - return roots.toArray(new VirtualFile[roots.size()]); + return VfsUtil.toVirtualFileArray(roots); } public static Library findLibrary(Module module, final String name) { diff --git a/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java b/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java index d3f07d037db8..e77aa66413ca 100644 --- a/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java +++ b/platform/lang-api/src/com/intellij/refactoring/util/CommonRefactoringUtil.java @@ -21,6 +21,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; @@ -175,7 +176,7 @@ public class CommonRefactoringUtil { } final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project) - .ensureFilesWritable(readonly.toArray(new VirtualFile[readonly.size()])); + .ensureFilesWritable(VfsUtil.toVirtualFileArray(readonly)); failed.addAll(Arrays.asList(status.getReadonlyFiles())); if (notifyOnFail && (!failed.isEmpty() || seenNonWritablePsiFilesWithoutVirtualFile && readonly.isEmpty())) { StringBuilder message = new StringBuilder(messagePrefix); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java index eb0019c31ab2..d50115e426bf 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java @@ -26,6 +26,7 @@ import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; @@ -129,7 +130,7 @@ public class CodeInsightUtilBase { files.add(virtualFile); } if (!files.isEmpty()) { - VirtualFile[] virtualFiles = files.toArray(new VirtualFile[files.size()]); + VirtualFile[] virtualFiles = VfsUtil.toVirtualFileArray(files); ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(virtualFiles); return !status.hasReadonlyFiles(); } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java index b6cd42dadcc0..5cc7598cf2f7 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/QuickFixAction.java @@ -35,6 +35,7 @@ import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; @@ -124,7 +125,7 @@ public class QuickFixAction extends AnAction { } if (!readOnlyFiles.isEmpty()) { - final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(readOnlyFiles.toArray(new VirtualFile[readOnlyFiles.size()])); + final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(VfsUtil.toVirtualFileArray(readOnlyFiles)); if (operationStatus.hasReadonlyFiles()) return; } @@ -298,7 +299,7 @@ public class QuickFixAction extends AnAction { Set readOnlyFiles = getReadOnlyFiles(refElements); if (!readOnlyFiles.isEmpty()) { final Project project = refElements[0].getRefManager().getProject(); - final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(readOnlyFiles.toArray(new VirtualFile[readOnlyFiles.size()])); + final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(VfsUtil.toVirtualFileArray(readOnlyFiles)); if (operationStatus.hasReadonlyFiles()) return false; } return true; diff --git a/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java b/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java index eaa4571ab318..06b5d969a8ba 100644 --- a/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java +++ b/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java @@ -36,6 +36,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Factory; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.WindowManager; import com.intellij.psi.PsiDirectory; @@ -371,9 +372,7 @@ public class ReplaceInProjectManager { } if (readOnlyFiles != null) { - ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable( - readOnlyFiles.toArray(new VirtualFile[readOnlyFiles.size()] ) - ); + ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(VfsUtil.toVirtualFileArray(readOnlyFiles)); } if (FindInProjectUtil.hasReadOnlyUsages(selectedUsages)){ diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateManagerImpl.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateManagerImpl.java index aa1d51fab9bd..2e07f4d5290e 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateManagerImpl.java @@ -781,7 +781,7 @@ public class FileTemplateManagerImpl extends FileTemplateManager implements Expo appendDefaultTemplatesDirFromClassloader(plugin.getPluginClassLoader(), dirList); } - ourTopDirs = dirList.toArray(new VirtualFile[dirList.size()]); + ourTopDirs = VfsUtil.toVirtualFileArray(dirList); for (VirtualFile topDir : ourTopDirs) { topDir.refresh(true,true); } diff --git a/platform/lang-impl/src/com/intellij/ide/impl/dataRules/VirtualFileArrayRule.java b/platform/lang-impl/src/com/intellij/ide/impl/dataRules/VirtualFileArrayRule.java index 665b4a084085..e37cb5dc9351 100644 --- a/platform/lang-impl/src/com/intellij/ide/impl/dataRules/VirtualFileArrayRule.java +++ b/platform/lang-impl/src/com/intellij/ide/impl/dataRules/VirtualFileArrayRule.java @@ -22,6 +22,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.usages.Usage; @@ -115,7 +116,7 @@ public class VirtualFileArrayRule implements GetDataRule { } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } private static Object getFilesFromPsiElement(PsiElement elem) { @@ -160,7 +161,7 @@ public class VirtualFileArrayRule implements GetDataRule { } } } - VirtualFile[] result = files.toArray(new VirtualFile[files.size()]); + VirtualFile[] result = VfsUtil.toVirtualFileArray(files); files.clear(); return result; } @@ -170,6 +171,6 @@ public class VirtualFileArrayRule implements GetDataRule { for (Module selectedModule : selectedModules) { result.addAll(Arrays.asList(ModuleRootManager.getInstance(selectedModule).getContentRoots())); } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } } diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java index 1b330965e1ef..a93266fcf866 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java @@ -657,7 +657,7 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner { files.add(((PsiFileSystemItem)element).getVirtualFile()); } } - return files.size() > 0 ? files.toArray(new VirtualFile[files.size()]) : null; + return files.size() > 0 ? VfsUtil.toVirtualFileArray(files) : null; } if (dataId.equals(DataConstants.CONTEXT_COMPONENT)) { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java index ab5586a11604..ee0a03cb463e 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java @@ -62,6 +62,7 @@ import com.intellij.openapi.ui.popup.PopupChooserBuilder; import com.intellij.openapi.util.*; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; @@ -995,7 +996,7 @@ public final class ProjectViewImpl extends ProjectView implements PersistentStat files.add(((PsiFileSystemItem)element).getVirtualFile()); } } - return files.size() > 0 ? files.toArray(new VirtualFile[files.size()]) : null; + return files.size() > 0 ? VfsUtil.toVirtualFileArray(files) : null; } if (DataConstantsEx.TARGET_PSI_ELEMENT.equals(dataId)) { return null; diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/CompositeProjectRoot.java b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/CompositeProjectRoot.java index 4ce414db5291..0d08f0701195 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/CompositeProjectRoot.java +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/CompositeProjectRoot.java @@ -19,6 +19,7 @@ package com.intellij.openapi.projectRoots.impl; import com.intellij.openapi.projectRoots.ex.ProjectRoot; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import org.jdom.Element; @@ -48,7 +49,7 @@ class CompositeProjectRoot implements ProjectRoot { result.addAll(Arrays.asList(root.getVirtualFiles())); } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } public String[] getUrls() { diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java index 1cfeac4ce88a..e8aedada4b0b 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/ProjectJdkImpl.java @@ -30,6 +30,7 @@ import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizable; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.ArrayUtil; @@ -325,7 +326,7 @@ public class ProjectJdkImpl implements JDOMExternalizable, Sdk, SdkModificator { for (ProjectRoot root : roots) { files.addAll(Arrays.asList(root.getVirtualFiles())); } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public void addRoot(VirtualFile root, OrderRootType rootType) { diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java index f4d725ae7e18..a6701ecd222a 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java @@ -18,6 +18,7 @@ package com.intellij.openapi.roots.impl; import com.intellij.AppTopics; import com.intellij.ProjectTopics; +import com.intellij.ide.startup.StartupManagerEx; import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; @@ -38,8 +39,9 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter; import com.intellij.openapi.vfs.newvfs.NewVirtualFile; +import com.intellij.psi.impl.PsiManagerConfiguration; import com.intellij.util.*; -import com.intellij.util.containers.ConcurrentHashMap; +import com.intellij.util.containers.*; import com.intellij.util.containers.HashMap; import com.intellij.util.messages.MessageBusConnection; import gnu.trove.THashMap; @@ -48,6 +50,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import java.util.*; +import java.util.HashSet; public class DirectoryIndexImpl extends DirectoryIndex implements ProjectComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.roots.impl.DirectoryIndexImpl"); @@ -57,20 +60,22 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone private volatile boolean myInitialized = false; private volatile boolean myDisposed = false; + private final boolean myIsLasyMode; + private Map> myExcludeRootsMap; private Set myProjectExcludeRoots; private Map myDirToInfoMap = new ConcurrentHashMap(); - private Map> myPackageNameToDirsMap = new ConcurrentHashMap>(); - private Map myDirToPackageName = new ConcurrentHashMap(); + private Map myPackageNameToDirsMap = new ConcurrentHashMap(); private final DirectoryIndexExcludePolicy[] myExcludePolicies; private final MessageBusConnection myConnection; - public DirectoryIndexImpl(Project project, StartupManager startupManager) { + public DirectoryIndexImpl(Project project, PsiManagerConfiguration psiManagerConfiguration, StartupManager startupManager) { myProject = project; myConnection = project.getMessageBus().connect(project); - startupManager.registerPreStartupActivity(new Runnable() { + myIsLasyMode = !psiManagerConfiguration.REPOSITORY_ENABLED; + ((StartupManagerEx)startupManager).registerPreStartupActivity(new Runnable() { public void run() { initialize(); } @@ -110,10 +115,25 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone Map oldDirToInfoMap = myDirToInfoMap; myDirToInfoMap = new THashMap(); - Map> oldPackageNameToDirsMap = myPackageNameToDirsMap; - myPackageNameToDirsMap = new THashMap>(); + Map oldPackageNameToDirsMap = myPackageNameToDirsMap; + myPackageNameToDirsMap = new THashMap(); - doInitialize(reverseAllSets); + doInitialize(reverseAllSets, null); + + if (myIsLasyMode) { + Map newDirToInfoMap = myDirToInfoMap; + Map newPackageNameToDirsMap = myPackageNameToDirsMap; + myDirToInfoMap = oldDirToInfoMap; + myPackageNameToDirsMap = oldPackageNameToDirsMap; + + Set allDirsSet = newDirToInfoMap.keySet(); + for (VirtualFile dir : allDirsSet) { + getInfoForDirectory(dir); + } + + myDirToInfoMap = newDirToInfoMap; + myPackageNameToDirsMap = newPackageNameToDirsMap; + } Set keySet = myDirToInfoMap.keySet(); assert keySet.size() == oldDirToInfoMap.keySet().size(); @@ -124,15 +144,15 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } assert myPackageNameToDirsMap.keySet().size() == oldPackageNameToDirsMap.keySet().size(); - for (Map.Entry> entry : myPackageNameToDirsMap.entrySet()) { + for (Map.Entry entry : myPackageNameToDirsMap.entrySet()) { String packageName = entry.getKey(); - List dirs = entry.getValue(); - List dirs1 = oldPackageNameToDirsMap.get(packageName); + VirtualFile[] dirs = entry.getValue(); + VirtualFile[] dirs1 = oldPackageNameToDirsMap.get(packageName); HashSet set1 = new HashSet(); - set1.addAll(dirs); + set1.addAll(Arrays.asList(dirs)); HashSet set2 = new HashSet(); - set2.addAll(dirs1); + set2.addAll(Arrays.asList(dirs1)); assert set1.equals(set2); } } @@ -148,7 +168,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } if (myDisposed) { - LOG.error("Directory index is already disposed for this project"); + LOG.error("Directory index is aleady disposed for this project"); return; } @@ -181,10 +201,15 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } private void doInitialize() { - doInitialize(false); + if (myIsLasyMode) { + cleapAllMaps(); + } + else { + doInitialize(false, null); + } } - private void doInitialize(boolean reverseAllSets/* for testing order independence*/) { + private void doInitialize(boolean reverseAllSets/* for testing order independence*/, VirtualFile forDir/* in LAZY_MODE only*/) { ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator(); if (progress == null) progress = new EmptyProgressIndicator(); @@ -193,7 +218,8 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone progress.checkCanceled(); progress.setText(ProjectBundle.message("project.index.scanning.files.progress")); - cleanAllMaps(); + if (forDir == null) cleapAllMaps(); + else createMapsFor(forDir); Module[] modules = ModuleManager.getInstance(myProject).getModules(); if (reverseAllSets) modules = ArrayUtil.reverseArray(modules); @@ -201,28 +227,36 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone initExcludedDirMap(modules, progress); for (Module module : modules) { - initModuleContents(module, reverseAllSets, progress); - initModuleSources(module, reverseAllSets, progress); - initLibrarySources(module, progress); - initLibraryClasses(module, progress); + initModuleContents(module, forDir, reverseAllSets, progress); + initModuleSources(module, forDir, reverseAllSets, progress); + initLibrarySources(module, forDir, progress); + initLibraryClasses(module, forDir, progress); } progress.checkCanceled(); progress.setText2(""); for (Module module : modules) { - initOrderEntries(module); + initOrderEntries(module, forDir); } progress.popState(); } - private void cleanAllMaps() { + private void cleapAllMaps() { myDirToInfoMap.clear(); myPackageNameToDirsMap.clear(); - myDirToPackageName.clear(); } + private void createMapsFor(VirtualFile forDir) { + // clear map for all ancestors to not interfer with previous results + VirtualFile dir = forDir; + do { + myDirToInfoMap.remove(dir); + dir = dir.getParent(); + } + while (dir != null); + } private void initExcludedDirMap(Module[] modules, ProgressIndicator progress) { progress.checkCanceled(); @@ -254,8 +288,8 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } } - for (DirectoryIndexExcludePolicy policy : myExcludePolicies) { - for (VirtualFile file : policy.getExcludeRootsForProject()) { + for(DirectoryIndexExcludePolicy policy: myExcludePolicies) { + for(VirtualFile file: policy.getExcludeRootsForProject()) { putForFileAndAllAncestors(result, file, file.getUrl()); projectExcludeRoots.add(file); } @@ -280,7 +314,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } private boolean isExcludeRootForModule(Module module, VirtualFile excludeRoot) { - for (DirectoryIndexExcludePolicy policy : myExcludePolicies) { + for(DirectoryIndexExcludePolicy policy: myExcludePolicies) { if (policy.isExcludeRootForModule(module, excludeRoot)) return true; } return false; @@ -294,7 +328,10 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone return ModuleRootManager.getInstance(module).getOrderEntries(); } - private void initModuleContents(Module module, boolean reverseAllSets, ProgressIndicator progress) { + private void initModuleContents(Module module, + VirtualFile forDir, + boolean reverseAllSets, + ProgressIndicator progress) { progress.checkCanceled(); progress.setText2(ProjectBundle.message("project.index.processing.module.content.progress", module.getName())); @@ -305,14 +342,21 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } for (final VirtualFile contentRoot : contentRoots) { - fillMapWithModuleContent(contentRoot, module, contentRoot); + fillMapWithModuleContent(contentRoot, module, contentRoot, forDir); } } - private void fillMapWithModuleContent(VirtualFile dir, Module module, VirtualFile contentRoot) { + private void fillMapWithModuleContent(VirtualFile dir, + Module module, + VirtualFile contentRoot, + VirtualFile forDir) { if (isExcluded(contentRoot, dir)) return; if (isIgnored(dir)) return; + if (forDir != null) { + if (!VfsUtil.isAncestor(dir, forDir, false)) return; + } + DirectoryInfo info = getOrCreateDirInfo(dir); if (info.module != null) { // module contents overlap @@ -323,7 +367,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone VirtualFile[] children = dir.getChildren(); for (VirtualFile child : children) { if (child.isDirectory()) { - fillMapWithModuleContent(child, module, contentRoot); + fillMapWithModuleContent(child, module, contentRoot, forDir); } } @@ -337,12 +381,15 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone return excludes != null && excludes.contains(dir.getUrl()); } - private void initModuleSources(Module module, boolean reverseAllSets, ProgressIndicator progress) { + private void initModuleSources(Module module, + VirtualFile forDir, + boolean reverseAllSets, + ProgressIndicator progress) { progress.checkCanceled(); progress.setText2(ProjectBundle.message("project.index.processing.module.sources.progress", module.getName())); ContentEntry[] contentEntries = getContentEntries(module); - + if (reverseAllSets) { contentEntries = ArrayUtil.reverseArray(contentEntries); } @@ -355,37 +402,45 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone for (SourceFolder sourceFolder : sourceFolders) { VirtualFile dir = sourceFolder.getFile(); if (dir != null) { - fillMapWithModuleSource(dir, module, sourceFolder.getPackagePrefix(), dir, sourceFolder.isTestSource()); + fillMapWithModuleSource(dir, module, sourceFolder.getPackagePrefix(), dir, sourceFolder.isTestSource(), forDir); } } } } - private void fillMapWithModuleSource(VirtualFile dir, Module module, String packageName, VirtualFile sourceRoot, boolean isTestSource) { + private void fillMapWithModuleSource(VirtualFile dir, + Module module, + String packageName, + VirtualFile sourceRoot, + boolean isTestSource, + VirtualFile forDir) { DirectoryInfo info = myDirToInfoMap.get(dir); if (info == null) return; if (!module.equals(info.module)) return; + if (forDir != null) { + if (!VfsUtil.isAncestor(dir, forDir, false)) return; + } + if (info.isInModuleSource) { // module sources overlap - String definedPackage = myDirToPackageName.get(dir); - if (definedPackage != null && definedPackage.length() == 0) return; // another source root starts here + if (info.packageName != null && info.packageName.length() == 0) return; // another source root starts here } info.isInModuleSource = true; info.isTestSource = isTestSource; info.sourceRoot = sourceRoot; - setPackageName(dir, packageName); + setPackageName(dir, info, packageName); VirtualFile[] children = dir.getChildren(); for (VirtualFile child : children) { if (child.isDirectory()) { String childPackageName = getPackageNameForSubdir(packageName, child.getName()); - fillMapWithModuleSource(child, module, childPackageName, sourceRoot, isTestSource); + fillMapWithModuleSource(child, module, childPackageName, sourceRoot, isTestSource, forDir); } } } - private void initLibrarySources(Module module, ProgressIndicator progress) { + private void initLibrarySources(Module module, VirtualFile forDir, ProgressIndicator progress) { progress.checkCanceled(); progress.setText2(ProjectBundle.message("project.index.processing.library.sources.progress", module.getName())); @@ -394,37 +449,43 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone if (isLibrary) { VirtualFile[] sourceRoots = orderEntry.getFiles(OrderRootType.SOURCES); for (final VirtualFile sourceRoot : sourceRoots) { - fillMapWithLibrarySources(sourceRoot, "", sourceRoot); + fillMapWithLibrarySources(sourceRoot, "", sourceRoot, forDir); } } } } - private void fillMapWithLibrarySources(VirtualFile dir, String packageName, VirtualFile sourceRoot) { + private void fillMapWithLibrarySources(VirtualFile dir, + String packageName, + VirtualFile sourceRoot, + VirtualFile forDir) { if (isIgnored(dir)) return; + if (forDir != null) { + if (!VfsUtil.isAncestor(dir, forDir, false)) return; + } + DirectoryInfo info = getOrCreateDirInfo(dir); if (info.isInLibrarySource) { // library sources overlap - String definedPackage = myDirToPackageName.get(dir); - if (definedPackage != null && definedPackage.length() == 0) return; // another library source root starts here + if (info.packageName != null && info.packageName.length() == 0) return; // another library source root starts here } info.isInModuleSource = false; info.isInLibrarySource = true; info.sourceRoot = sourceRoot; - setPackageName(dir, packageName); + setPackageName(dir, info, packageName); VirtualFile[] children = dir.getChildren(); for (VirtualFile child : children) { if (child.isDirectory()) { String childPackageName = getPackageNameForSubdir(packageName, child.getName()); - fillMapWithLibrarySources(child, childPackageName, sourceRoot); + fillMapWithLibrarySources(child, childPackageName, sourceRoot, forDir); } } } - private void initLibraryClasses(Module module, ProgressIndicator progress) { + private void initLibraryClasses(Module module, VirtualFile forDir, ProgressIndicator progress) { progress.checkCanceled(); progress.setText2(ProjectBundle.message("project.index.processing.library.classes.progress", module.getName())); @@ -433,38 +494,41 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone if (isLibrary) { VirtualFile[] classRoots = orderEntry.getFiles(OrderRootType.CLASSES); for (final VirtualFile classRoot : classRoots) { - fillMapWithLibraryClasses(classRoot, "", classRoot); + fillMapWithLibraryClasses(classRoot, "", classRoot, forDir); } } } } - private void fillMapWithLibraryClasses(VirtualFile dir, String packageName, VirtualFile classRoot) { + private void fillMapWithLibraryClasses(VirtualFile dir, String packageName, VirtualFile classRoot, VirtualFile forDir) { if (isIgnored(dir)) return; + if (forDir != null) { + if (!VfsUtil.isAncestor(dir, forDir, false)) return; + } + DirectoryInfo info = getOrCreateDirInfo(dir); if (info.libraryClassRoot != null) { // library classes overlap - String definedPackage = myDirToPackageName.get(dir); - if (definedPackage != null && definedPackage.length() == 0) return; // another library root starts here + if (info.packageName != null && info.packageName.length() == 0) return; // another library root starts here } info.libraryClassRoot = classRoot; if (!info.isInModuleSource && !info.isInLibrarySource) { - setPackageName(dir, packageName); + setPackageName(dir, info, packageName); } VirtualFile[] children = dir.getChildren(); for (VirtualFile child : children) { if (child.isDirectory()) { String childPackageName = getPackageNameForSubdir(packageName, child.getName()); - fillMapWithLibraryClasses(child, childPackageName, classRoot); + fillMapWithLibraryClasses(child, childPackageName, classRoot, forDir); } } } - private void initOrderEntries(Module module) { + private void initOrderEntries(Module module, VirtualFile forDir) { Map> depEntries = new HashMap>(); Map> libClassRootEntries = new HashMap>(); Map> libSourceRootEntries = new HashMap>(); @@ -486,7 +550,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone VirtualFile[] sourceRoots = orderEntry.getFiles(OrderRootType.SOURCES); for (VirtualFile sourceRoot : sourceRoots) { - fillMapWithOrderEntries(sourceRoot, oneEntryList, entryModule, null, null, null, null); + fillMapWithOrderEntries(sourceRoot, oneEntryList, entryModule, null, null, forDir, null, null); } } else if (orderEntry instanceof LibraryOrderEntry || orderEntry instanceof JdkOrderEntry) { @@ -504,19 +568,19 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone for (Map.Entry> mapEntry : depEntries.entrySet()) { final VirtualFile vRoot = mapEntry.getKey(); final List entries = mapEntry.getValue(); - fillMapWithOrderEntries(vRoot, entries, null, null, null, null, null); + fillMapWithOrderEntries(vRoot, entries, null, null, null, forDir, null, null); } for (Map.Entry> mapEntry : libClassRootEntries.entrySet()) { final VirtualFile vRoot = mapEntry.getKey(); final List entries = mapEntry.getValue(); - fillMapWithOrderEntries(vRoot, entries, null, vRoot, null, null, null); + fillMapWithOrderEntries(vRoot, entries, null, vRoot, null, forDir, null, null); } for (Map.Entry> mapEntry : libSourceRootEntries.entrySet()) { final VirtualFile vRoot = mapEntry.getKey(); final List entries = mapEntry.getValue(); - fillMapWithOrderEntries(vRoot, entries, null, null, vRoot, null, null); + fillMapWithOrderEntries(vRoot, entries, null, null, vRoot, forDir, null, null); } } @@ -534,10 +598,15 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone Module module, VirtualFile libraryClassRoot, VirtualFile librarySourceRoot, + VirtualFile forDir, DirectoryInfo parentInfo, final List oldParentEntries) { if (isIgnored(dir)) return; + if (forDir != null) { + if (!VfsUtil.isAncestor(dir, forDir, false)) return; + } + DirectoryInfo info = myDirToInfoMap.get(dir); // do not create it here! if (info == null) return; @@ -561,7 +630,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone final VirtualFile[] children = dir.getChildren(); for (VirtualFile child : children) { if (child.isDirectory()) { - fillMapWithOrderEntries(child, orderEntries, module, libraryClassRoot, librarySourceRoot, info, oldEntries); + fillMapWithOrderEntries(child, orderEntries, module, libraryClassRoot, librarySourceRoot, forDir, info, oldEntries); } } } @@ -574,6 +643,12 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone checkAvailability(); dispatchPendingEvents(); + if (myIsLasyMode) { + DirectoryInfo info = myDirToInfoMap.get(dir); + if (info != null) return info; + doInitialize(false, dir); + } + return myDirToInfoMap.get(dir); } @@ -591,10 +666,10 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } }; - private class PackageSink extends QueryFactory> { + private class PackageSink extends QueryFactory { private PackageSink() { - registerExecutor(new QueryExecutor>() { - public boolean execute(final List allDirs, final Processor consumer) { + registerExecutor(new QueryExecutor() { + public boolean execute(final VirtualFile[] allDirs, final Processor consumer) { for (VirtualFile dir : allDirs) { DirectoryInfo info = getInfoForDirectory(dir); assert info != null; @@ -609,8 +684,8 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone } public Query search(@NotNull String packageName, boolean includeLibrarySources) { - List allDirs = doGetDirectoriesByPackageName(packageName); - return new FilteredQuery(includeLibrarySources ? new CollectionQuery(allDirs) : createQuery(allDirs), IS_VALID); + VirtualFile[] allDirs = doGetDirectoriesByPackageName(packageName); + return new FilteredQuery(includeLibrarySources ? new ArrayQuery(allDirs) : createQuery(allDirs), IS_VALID); } } @@ -620,17 +695,87 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone return mySink.search(packageName, includeLibrarySources); } - @Override - public String getPackageName(VirtualFile dir) { - return myDirToPackageName.get(dir); + @NotNull + private VirtualFile[] doGetDirectoriesByPackageName(@NotNull String packageName) { + dispatchPendingEvents(); + + if (!myIsLasyMode) { + VirtualFile[] dirs = myPackageNameToDirsMap.get(packageName); + return dirs != null ? dirs : VirtualFile.EMPTY_ARRAY; + } + else { + VirtualFile[] dirs = myPackageNameToDirsMap.get(packageName); + if (dirs != null) return dirs; + dirs = doGetDirectoriesByPackageNameInLazyMode(packageName); + myPackageNameToDirsMap.put(packageName, dirs); + return dirs; + } } @NotNull - private List doGetDirectoriesByPackageName(@NotNull String packageName) { - dispatchPendingEvents(); + private VirtualFile[] doGetDirectoriesByPackageNameInLazyMode(@NotNull String packageName) { + ArrayList list = new ArrayList(); - List dirs = myPackageNameToDirsMap.get(packageName); - return dirs != null ? dirs : Collections.emptyList(); + Module[] modules = ModuleManager.getInstance(myProject).getModules(); + for (Module module : modules) { + for (ContentEntry contentEntry : getContentEntries(module)) { + SourceFolder[] sourceFolders = contentEntry.getSourceFolders(); + for (SourceFolder sourceFolder : sourceFolders) { + VirtualFile sourceRoot = sourceFolder.getFile(); + if (sourceRoot != null) { + findAndAddDirByPackageName(list, sourceRoot, packageName); + } + } + } + + for (OrderEntry orderEntry : getOrderEntries(module)) { + if (orderEntry instanceof LibraryOrderEntry || orderEntry instanceof JdkOrderEntry) { + VirtualFile[] libRoots = orderEntry.getFiles(OrderRootType.CLASSES); + for (VirtualFile libRoot : libRoots) { + findAndAddDirByPackageName(list, libRoot, packageName); + } + + VirtualFile[] libSourceRoots = orderEntry.getFiles(OrderRootType.SOURCES); + for (VirtualFile libSourceRoot : libSourceRoots) { + findAndAddDirByPackageName(list, libSourceRoot, packageName); + } + } + } + } + + return VfsUtil.toVirtualFileArray(list); + } + + private void findAndAddDirByPackageName(ArrayList list, VirtualFile root, @NotNull String packageName) { + VirtualFile dir = findDirByPackageName(root, packageName); + if (dir == null) return; + DirectoryInfo info = getInfoForDirectory(dir); + if (info == null) return; + if (!packageName.equals(info.packageName)) return; + if (!list.contains(dir)) { + list.add(dir); + } + } + + private static VirtualFile findDirByPackageName(VirtualFile root, @NotNull String packageName) { + if (packageName.length() == 0) { + return root; + } + else { + int index = packageName.indexOf('.'); + if (index < 0) { + VirtualFile child = root.findChild(packageName); + if (child == null || !child.isDirectory()) return null; + return child; + } + else { + String name = packageName.substring(0, index); + String restName = packageName.substring(index + 1); + VirtualFile child = root.findChild(name); + if (child == null || !child.isDirectory()) return null; + return findDirByPackageName(child, restName); + } + } } private void dispatchPendingEvents() { @@ -639,50 +784,80 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone private void checkAvailability() { if (!myInitialized) { - LOG.error("Directory index is not initialized yet for " + myProject); + LOG.error("Directory index is not initialized yet for "+myProject); } if (myDisposed) { - LOG.error("Directory index is already disposed for " + myProject); + LOG.error("Directory index is aleady disposed for "+myProject); } } private DirectoryInfo getOrCreateDirInfo(VirtualFile dir) { DirectoryInfo info = myDirToInfoMap.get(dir); if (info == null) { - info = new DirectoryInfo(); + info = new DirectoryInfo(dir); myDirToInfoMap.put(dir, info); } return info; } - private void setPackageName(VirtualFile dir, String newPackageName) { + private void setPackageName(VirtualFile dir, DirectoryInfo info, String newPackageName) { assert dir != null; - String oldPackageName = myDirToPackageName.get(dir); - if (oldPackageName != null) { - List oldPackageDirs = myPackageNameToDirsMap.get(oldPackageName); - final boolean removed = oldPackageDirs.remove(dir); - assert removed; + if (!myIsLasyMode) { + String oldPackageName = info.packageName; + if (oldPackageName != null) { + VirtualFile[] oldPackageDirs = myPackageNameToDirsMap.get(oldPackageName); + assert oldPackageDirs != null; + assert oldPackageDirs.length > 0; + if (oldPackageDirs.length != 1) { + VirtualFile[] dirs = new VirtualFile[oldPackageDirs.length - 1]; + + boolean found = false; + for (int i = 0; i < oldPackageDirs.length; i++) { + VirtualFile oldDir = oldPackageDirs[i]; + if (oldDir.equals(dir)) { + found = true; + continue; + } + dirs[found ? i - 1 : i] = oldDir; + } + + assert found; + + myPackageNameToDirsMap.put(oldPackageName, dirs); + } + else { + assert dir.equals(oldPackageDirs[0]); + myPackageNameToDirsMap.remove(oldPackageName); + } - if (oldPackageDirs.size() == 0) { - myPackageNameToDirsMap.remove(oldPackageName); } - } - if (newPackageName != null) { - List newPackageDirs = myPackageNameToDirsMap.get(newPackageName); - if (newPackageDirs == null) { - newPackageDirs = new SmartList(); - myPackageNameToDirsMap.put(newPackageName, newPackageDirs); + if (newPackageName != null) { + VirtualFile[] newPackageDirs = myPackageNameToDirsMap.get(newPackageName); + VirtualFile[] dirs; + if (newPackageDirs == null) { + dirs = new VirtualFile[]{dir}; + } + else { + dirs = new VirtualFile[newPackageDirs.length + 1]; + System.arraycopy(newPackageDirs, 0, dirs, 0, newPackageDirs.length); + dirs[newPackageDirs.length] = dir; + } + myPackageNameToDirsMap.put(newPackageName, dirs); } - newPackageDirs.add(dir); - - myDirToPackageName.put(dir, newPackageName); } else { - myDirToPackageName.remove(dir); + if (info.packageName != null) { + myPackageNameToDirsMap.remove(info.packageName); + } + if (newPackageName != null) { + myPackageNameToDirsMap.remove(newPackageName); + } } + + info.packageName = newPackageName; } @Nullable @@ -695,6 +870,8 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone private final Key> FILES_TO_RELEASE_KEY = Key.create("DirectoryIndexImpl.MyVirtualFileListener.FILES_TO_RELEASE_KEY"); public void fileCreated(VirtualFileEvent event) { + if (myIsLasyMode) return; + VirtualFile file = event.getFile(); if (!file.isDirectory()) return; @@ -709,33 +886,31 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone Module module = parentInfo.module; - for (DirectoryIndexExcludePolicy policy : myExcludePolicies) { + for(DirectoryIndexExcludePolicy policy: myExcludePolicies) { if (policy.isExcludeRoot(file)) return; } - fillMapWithModuleContent(file, module, parentInfo.contentRoot); - - String parentPackage = myDirToPackageName.get(parent); + fillMapWithModuleContent(file, module, parentInfo.contentRoot, null); if (module != null) { if (parentInfo.isInModuleSource) { - String newDirPackageName = getPackageNameForSubdir(parentPackage, file.getName()); - fillMapWithModuleSource(file, module, newDirPackageName, parentInfo.sourceRoot, parentInfo.isTestSource); + String newDirPackageName = getPackageNameForSubdir(parentInfo.packageName, file.getName()); + fillMapWithModuleSource(file, module, newDirPackageName, parentInfo.sourceRoot, parentInfo.isTestSource, null); } } if (parentInfo.libraryClassRoot != null) { - String newDirPackageName = getPackageNameForSubdir(parentPackage, file.getName()); - fillMapWithLibraryClasses(file, newDirPackageName, parentInfo.libraryClassRoot); + String newDirPackageName = getPackageNameForSubdir(parentInfo.packageName, file.getName()); + fillMapWithLibraryClasses(file, newDirPackageName, parentInfo.libraryClassRoot, null); } if (parentInfo.isInLibrarySource) { - String newDirPackageName = getPackageNameForSubdir(parentPackage, file.getName()); - fillMapWithLibrarySources(file, newDirPackageName, parentInfo.sourceRoot); + String newDirPackageName = getPackageNameForSubdir(parentInfo.packageName, file.getName()); + fillMapWithLibrarySources(file, newDirPackageName, parentInfo.sourceRoot, null); } if (!parentInfo.getOrderEntries().isEmpty()) { - fillMapWithOrderEntries(file, parentInfo.getOrderEntries(), null, null, null, parentInfo, null); + fillMapWithOrderEntries(file, parentInfo.getOrderEntries(), null, null, null, null, parentInfo, null); } } @@ -769,7 +944,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone for (VirtualFile dir : list) { DirectoryInfo info = myDirToInfoMap.remove(dir); if (info != null) { - setPackageName(dir, null); + setPackageName(dir, info, null); } } } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java index cc56b5f5d031..f328aff08a82 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java @@ -32,10 +32,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.newvfs.BulkFileListener; import com.intellij.openapi.vfs.newvfs.events.*; import com.intellij.openapi.vfs.pointers.VirtualFilePointer; @@ -154,7 +151,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx { } expanded.add(file); } - return expanded.toArray(new VirtualFile[expanded.size()]); + return VfsUtil.toVirtualFileArray(expanded); } private static void addChildren(final VirtualFile dir, final List container, final boolean recursively) { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/VfsIndexer.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/VfsIndexer.java index 45abc954b6e6..a0bf1e3a792b 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/VfsIndexer.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/VfsIndexer.java @@ -19,6 +19,7 @@ package com.intellij.psi.impl.cache.impl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileFilter; import com.intellij.psi.PsiBundle; @@ -50,7 +51,7 @@ public class VfsIndexer { out.flush(); } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } private static void _writeFileIndex(DataOutputStream out, VirtualFile file, VirtualFileFilter filter, List result) throws IOException { @@ -97,7 +98,7 @@ public class VfsIndexer { LOG.assertTrue(root.getName().equals(rootName)); _readFileIndex(in, root, filter, result); - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } private static void _readFileIndex(DataInputStream in, VirtualFile file, VirtualFileFilter filter, List result) throws IOException { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java index 47be896ec884..87e2fc582049 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java @@ -19,6 +19,7 @@ package com.intellij.psi.impl.include; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; @@ -68,7 +69,7 @@ public class FileIncludeManagerImpl extends FileIncludeManager { } } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } }; @@ -87,7 +88,7 @@ public class FileIncludeManagerImpl extends FileIncludeManager { } } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } }; diff --git a/platform/lang-impl/src/com/intellij/util/fileIndex/AbstractFileIndex.java b/platform/lang-impl/src/com/intellij/util/fileIndex/AbstractFileIndex.java index 7a046811355f..ab91bfbb14c4 100644 --- a/platform/lang-impl/src/com/intellij/util/fileIndex/AbstractFileIndex.java +++ b/platform/lang-impl/src/com/intellij/util/fileIndex/AbstractFileIndex.java @@ -33,6 +33,7 @@ import com.intellij.openapi.roots.ex.ProjectRootManagerEx; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -327,7 +328,7 @@ public abstract class AbstractFileIndex imple removeIndexEntry(url); } - return toUpdate.toArray(new VirtualFile[toUpdate.size()]); + return VfsUtil.toVirtualFileArray(toUpdate); } private class FileIndexCacheUpdater implements CacheUpdater { diff --git a/platform/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java b/platform/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java index 2d07812bbd62..e9c5350a9c80 100644 --- a/platform/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java +++ b/platform/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java @@ -67,7 +67,7 @@ public class FileIndexRefreshCacheUpdater extends VirtualFileAdapter implements } public VirtualFile[] queryNeededFiles() { - return myChangedFiles.toArray(new VirtualFile[myChangedFiles.size()]); + return VfsUtil.toVirtualFileArray(myChangedFiles); } public void processFile(FileContent fileContent) { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java index 066b63c2a020..c377c472dd5a 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexProjectHandler.java @@ -31,6 +31,7 @@ import com.intellij.openapi.roots.ContentIterator; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ex.ProjectRootManagerEx; import com.intellij.openapi.startup.StartupManager; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.util.Collection; @@ -98,7 +99,7 @@ public class FileBasedIndexProjectHandler extends AbstractProjectComponent imple private class RefreshCacheUpdater implements CacheUpdater { public VirtualFile[] queryNeededFiles() { Collection files = myIndex.getFilesToUpdate(myProject); - return files.isEmpty() ? VirtualFile.EMPTY_ARRAY : files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public void processFile(FileContent fileContent) { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java b/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java index 05c027e4aeca..262eb0336a3c 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java @@ -25,6 +25,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.containers.HashSet; @@ -52,7 +53,7 @@ public class UnindexedFilesUpdater implements CacheUpdater { CollectingContentIterator finder = myIndex.createContentIterator(); iterateIndexableFiles(finder); List files = finder.getFiles(); - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public void processFile(final FileContent fileContent) { diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/CacheUpdaterProcessor.java b/platform/lvcs-impl/src/com/intellij/history/integration/CacheUpdaterProcessor.java index e6ffec6b27a4..e6e95ce05ff4 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/CacheUpdaterProcessor.java +++ b/platform/lvcs-impl/src/com/intellij/history/integration/CacheUpdaterProcessor.java @@ -19,6 +19,7 @@ package com.intellij.history.integration; import com.intellij.history.core.ContentFactory; import com.intellij.history.core.LocalVcs; import com.intellij.ide.caches.FileContent; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.io.IOException; @@ -51,7 +52,7 @@ public class CacheUpdaterProcessor { public VirtualFile[] queryNeededFiles() { List result = new ArrayList(myFilesToCreate); result.addAll(myFilesToUpdate); - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } public void processFile(FileContent c) { diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/LocalHistoryCacheUpdater.java b/platform/lvcs-impl/src/com/intellij/history/integration/LocalHistoryCacheUpdater.java index f932fc2bafe0..41e15a368b47 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/LocalHistoryCacheUpdater.java +++ b/platform/lvcs-impl/src/com/intellij/history/integration/LocalHistoryCacheUpdater.java @@ -61,7 +61,7 @@ public class LocalHistoryCacheUpdater implements CacheUpdater { } ContainerUtil.removeDuplicates(result); sortRoots(result); - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } private static void sortRoots(List roots) { diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java b/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java index 63237aeeb0b4..53c8c5b651be 100644 --- a/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java @@ -39,7 +39,7 @@ public abstract class ReadonlyStatusHandler { public abstract OperationStatus ensureFilesWritable(@NotNull VirtualFile... files); public OperationStatus ensureFilesWritable(@NotNull Collection files) { - return ensureFilesWritable(files.toArray(new VirtualFile[files.size()])); + return ensureFilesWritable(VfsUtil.toVirtualFileArray(files)); } public static ReadonlyStatusHandler getInstance(Project project) { diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java b/platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java index 3047b332bee7..d723560bb545 100644 --- a/platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java @@ -243,7 +243,7 @@ public class VfsUtil { ancestorsList.add(ancestor); filesSet.clear(); } - return ancestorsList.toArray(new VirtualFile[ancestorsList.size()]); + return VfsUtil.toVirtualFileArray(ancestorsList); } /** @@ -721,4 +721,11 @@ public class VfsUtil { } return null; } + + @NotNull + public static VirtualFile[] toVirtualFileArray(@NotNull Collection files) { + int size = files.size(); + if (size == 0) return VirtualFile.EMPTY_ARRAY; + return files.toArray(new VirtualFile[size]); + } } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java index 72e8706425ec..adb23555b31e 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ToggleReadOnlyAttributeAction.java @@ -29,6 +29,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.io.ReadOnlyAttributeUtil; @@ -45,7 +46,7 @@ public class ToggleReadOnlyAttributeAction extends AnAction implements DumbAware filesList.add(file); } } - return filesList.toArray(new VirtualFile[filesList.size()]); + return VfsUtil.toVirtualFileArray(filesList); } public void update(AnActionEvent e){ diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java index b23fe509905e..ca60c3595819 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java @@ -16,6 +16,7 @@ package com.intellij.openapi.command.impl; import com.intellij.CommonBundle; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.util.Function; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.undo.DocumentReference; @@ -121,7 +122,7 @@ abstract class UndoRedo { Collection readOnlyFiles = collectReadOnlyAffectedFiles(); if (!readOnlyFiles.isEmpty()) { final Project project = myManager.getProject(); - final VirtualFile[] files = readOnlyFiles.toArray(new VirtualFile[readOnlyFiles.size()]); + final VirtualFile[] files = VfsUtil.toVirtualFileArray(readOnlyFiles); if (project == null) { VirtualFileManager.getInstance().fireReadOnlyModificationAttempt(files); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileChooserDialogImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileChooserDialogImpl.java index 737802158fd6..a4780f156292 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileChooserDialogImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileChooserDialogImpl.java @@ -32,6 +32,7 @@ import com.intellij.openapi.ui.TitlePanel; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.UIBundle; import com.intellij.ui.components.labels.LinkLabel; @@ -294,7 +295,7 @@ public class FileChooserDialogImpl extends DialogWrapper implements FileChooserD if (!myChooserDescriptor.isChooseMultiple() && files.size() > 0) { selectInTree(new VirtualFile[] {files.get(0)}, true); } else { - selectInTree(files.toArray(new VirtualFile[files.size()]), true); + selectInTree(VfsUtil.toVirtualFileArray(files), true); } } }); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java index a17fc4352091..6a3c4d44247f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java @@ -377,7 +377,7 @@ public class FileSystemTreeImpl implements FileSystemTree { VirtualFile file = fileConvertor.convert(descriptor.getElement().getFile()); if (file != null && file.isValid()) files.add(file); } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public boolean selectionExists() { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/impl/FileTreeStructure.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/impl/FileTreeStructure.java index d0c59ce3b590..26e6354d3e33 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/impl/FileTreeStructure.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/impl/FileTreeStructure.java @@ -30,6 +30,7 @@ import com.intellij.openapi.fileChooser.ex.RootFileElement; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; @@ -49,7 +50,7 @@ public class FileTreeStructure extends AbstractTreeStructure { public FileTreeStructure(Project project, FileChooserDescriptor chooserDescriptor) { myProject = project; List roots = chooserDescriptor.getRoots(); - final VirtualFile[] rootFiles = roots.toArray(new VirtualFile[roots.size()]); + final VirtualFile[] rootFiles = VfsUtil.toVirtualFileArray(roots); VirtualFile rootFile = rootFiles.length == 1 ? rootFiles[0] : null; myRootElement = new RootFileElement(rootFiles, rootFile != null? rootFile.getPresentableUrl() : chooserDescriptor.getTitle(), chooserDescriptor.isShowFileSystemRoots()); myChooserDescriptor = chooserDescriptor; diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java index 54efde68dce3..0953b839cf6d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java @@ -27,6 +27,7 @@ import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.FocusWatcher; import com.intellij.openapi.wm.IdeFocusManager; @@ -285,7 +286,7 @@ public final class EditorsSplitters extends JPanel { files.add(editor.getFile()); } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } @NotNull public VirtualFile[] getSelectedFiles() { @@ -296,7 +297,7 @@ public final class EditorsSplitters extends JPanel { files.add(file); } } - final VirtualFile[] virtualFiles = files.toArray(new VirtualFile[files.size()]); + final VirtualFile[] virtualFiles = VfsUtil.toVirtualFileArray(files); final VirtualFile currentFile = getCurrentFile(); if (currentFile != null) { for (int i = 0; i != virtualFiles.length; ++i) { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java index 6b68886be326..1ae169871a18 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java @@ -316,7 +316,7 @@ public class IdeDocumentHistoryImpl extends IdeDocumentHistory implements Projec } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public final void clearHistory() { diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java index ff765f80532f..0368dd5ca87b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java @@ -26,6 +26,7 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.MultiValuesMap; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; @@ -76,12 +77,12 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements realFiles.add(file); } } - files = realFiles.toArray(new VirtualFile[realFiles.size()]); + files = VfsUtil.toVirtualFileArray(realFiles); for (WritingAccessProvider accessProvider : myAccessProviders) { Collection denied = accessProvider.requestWriting(files); if (!denied.isEmpty()) { - return new OperationStatusImpl(denied.toArray(new VirtualFile[denied.size()])); + return new OperationStatusImpl(VfsUtil.toVirtualFileArray(denied)); } } @@ -118,8 +119,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements } } - return new OperationStatusImpl( - readOnlyFiles.isEmpty() ? VirtualFile.EMPTY_ARRAY : readOnlyFiles.toArray(new VirtualFile[readOnlyFiles.size()])); + return new OperationStatusImpl(VfsUtil.toVirtualFileArray(readOnlyFiles)); } private FileInfo[] createFileInfos(VirtualFile[] files) { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/ex/dummy/VirtualFileDirectoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/ex/dummy/VirtualFileDirectoryImpl.java index cf2fa2dd6bc0..0f901ec0afa6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/ex/dummy/VirtualFileDirectoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/ex/dummy/VirtualFileDirectoryImpl.java @@ -17,6 +17,7 @@ package com.intellij.openapi.vfs.ex.dummy; import com.intellij.openapi.vfs.VfsBundle; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -44,7 +45,7 @@ class VirtualFileDirectoryImpl extends VirtualFileImpl { } public VirtualFile[] getChildren() { - return myChildren.isEmpty() ? EMPTY_ARRAY : myChildren.toArray(new VirtualFile[myChildren.size()]); + return VfsUtil.toVirtualFileArray(myChildren); } public InputStream getInputStream() throws IOException { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java index fe92039d329b..9a3525cd1a6b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java @@ -18,6 +18,7 @@ package com.intellij.openapi.vfs.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.pointers.VirtualFilePointer; import com.intellij.openapi.vfs.pointers.VirtualFilePointerContainer; @@ -182,7 +183,7 @@ public class VirtualFilePointerContainerImpl implements VirtualFilePointerContai result.add(file); } } - return result.isEmpty() ? VirtualFile.EMPTY_ARRAY : result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } @NotNull @@ -204,7 +205,7 @@ public class VirtualFilePointerContainerImpl implements VirtualFilePointerContai result.add(file); } } - return result.isEmpty() ? VirtualFile.EMPTY_ARRAY : result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } @Nullable diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java index e40e18166395..16fc1478e02d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java @@ -92,7 +92,7 @@ public class JarFileSystemImpl extends JarFileSystem implements ApplicationCompo } } - VirtualFile[] roots = rootsToRefresh.toArray(new VirtualFile[rootsToRefresh.size()]); + VirtualFile[] roots = VfsUtil.toVirtualFileArray(rootsToRefresh); RefreshQueue.getInstance().refresh(false, true, null, roots); } }; diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java index 8db3f6d03261..315e70202c50 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java @@ -215,7 +215,7 @@ public abstract class LocalFileSystemBase extends LocalFileSystem { } } - RefreshQueue.getInstance().refresh(false, false, null, filesToRefresh.toArray(new VirtualFile[filesToRefresh.size()])); + RefreshQueue.getInstance().refresh(false, false, null, VfsUtil.toVirtualFileArray(filesToRefresh)); } finally { if (fireCommonRefreshSession) manager.fireAfterRefreshFinish(false); @@ -232,7 +232,7 @@ public abstract class LocalFileSystemBase extends LocalFileSystem { list.add(file); } - RefreshQueue.getInstance().refresh(async, recursive, null, list.toArray(new VirtualFile[list.size()])); + RefreshQueue.getInstance().refresh(async, recursive, null, VfsUtil.toVirtualFileArray(list)); } public byte[] physicalContentsToByteArray(final VirtualFile virtualFile) throws IOException { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java index c5485df7a5b5..935450e6fd28 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java @@ -633,7 +633,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { } } - return roots.toArray(new VirtualFile[roots.size()]); + return VfsUtil.toVirtualFileArray(roots); } //guarded by dirCacheReadLock/dirCacheWriteLock @@ -704,7 +704,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { public VirtualFile[] getRoots() { synchronized (LOCK) { final Collection roots = myRoots.values(); - return roots.toArray(new VirtualFile[roots.size()]); + return VfsUtil.toVirtualFileArray(roots); } } @@ -718,7 +718,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { } } - return roots.toArray(new VirtualFile[roots.size()]); + return VfsUtil.toVirtualFileArray(roots); } private void applyEvent(final VFileEvent event) { 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 af0e7cf89ce0..f7b99cb485c6 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -284,7 +284,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig for (String path : filePaths) { files.add(copyFileToProject(path)); } - return testHighlightingAllFiles(checkWarnings, checkInfos, checkWeakWarnings, files.toArray(new VirtualFile[files.size()])); + return testHighlightingAllFiles(checkWarnings, checkInfos, checkWeakWarnings, VfsUtil.toVirtualFileArray(files)); } public long testHighlightingAllFiles(final boolean checkWarnings, diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java index 6197fb15eb8d..22ecc990aacb 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java @@ -33,6 +33,7 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Factory; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.Navigatable; import com.intellij.psi.PsiDocumentManager; @@ -870,7 +871,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra if (!readOnlyUsages.isEmpty()) { return - !ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(readOnlyUsages.toArray(new VirtualFile[readOnlyUsages.size()])).hasReadonlyFiles(); + !ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(VfsUtil.toVirtualFileArray(readOnlyUsages)).hasReadonlyFiles(); } return true; } @@ -1184,7 +1185,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } } diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java index 73ba6d148d26..267c1e9afc70 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java @@ -28,6 +28,7 @@ import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.actions.VcsContextFactory; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.Navigatable; import org.jetbrains.annotations.NotNull; @@ -140,7 +141,7 @@ public class ChangesUtil { } } } - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } public static Navigatable[] getNavigatableArray(final Project project, final VirtualFile[] selectedFiles) { diff --git a/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java b/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java index c8204edca677..244f716e5995 100644 --- a/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java +++ b/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java @@ -37,6 +37,7 @@ import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ContentRevision; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.RefreshQueue; import com.intellij.openapi.wm.WindowManager; @@ -210,7 +211,7 @@ public class VcsUtil { } private static void refreshFiles(final List filesToRefresh, final Runnable runnable) { - RefreshQueue.getInstance().refresh(true, true, runnable, filesToRefresh.toArray(new VirtualFile[filesToRefresh.size()])); + RefreshQueue.getInstance().refresh(true, true, runnable, VfsUtil.toVirtualFileArray(filesToRefresh)); } private static List collectFilesToRefresh(final File[] roots) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/patch/formove/PatchApplier.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/patch/formove/PatchApplier.java index 47a2c014d58b..eaa713eb261b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/patch/formove/PatchApplier.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/patch/formove/PatchApplier.java @@ -36,6 +36,7 @@ import com.intellij.openapi.vcs.changes.*; import com.intellij.openapi.vcs.changes.patch.ApplyPatchAction; import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.RefreshQueue; import com.intellij.openapi.vfs.newvfs.RefreshSession; @@ -253,7 +254,7 @@ public class PatchApplier { } private boolean makeWritable(final List filesToMakeWritable) { - final VirtualFile[] fileArray = filesToMakeWritable.toArray(new VirtualFile[filesToMakeWritable.size()]); + final VirtualFile[] fileArray = VfsUtil.toVirtualFileArray(filesToMakeWritable); final ReadonlyStatusHandler.OperationStatus readonlyStatus = ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(fileArray); return (! readonlyStatus.hasReadonlyFiles()); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsContextWrapper.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsContextWrapper.java index 8e2c3a658e51..020912ae33af 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsContextWrapper.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsContextWrapper.java @@ -27,6 +27,7 @@ import com.intellij.openapi.vcs.VcsDataKeys; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ChangeList; import com.intellij.openapi.vcs.ui.Refreshable; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.Nullable; @@ -91,7 +92,7 @@ public class VcsContextWrapper implements VcsContext { result.add(virtualFile); } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } public Editor getEditor() { 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 4202c568ba11..64988d952cb0 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 @@ -39,6 +39,7 @@ import com.intellij.openapi.vcs.changes.conflicts.ChangelistConflictTracker; import com.intellij.openapi.vcs.checkin.CheckinEnvironment; import com.intellij.openapi.vcs.checkin.CheckinHandler; import com.intellij.openapi.vcs.readOnlyHandler.ReadonlyStatusHandlerImpl; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ConcurrencyUtil; import com.intellij.util.Consumer; @@ -902,8 +903,8 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec result.add(path.getVirtualFile()); } } - - return result.toArray(new VirtualFile[result.size()]); + + return VfsUtil.toVirtualFileArray(result); } public boolean setReadOnly(final String name, final boolean value) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/EditAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/EditAction.java index 6b2a86fbab16..101ba139c5f5 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/EditAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/EditAction.java @@ -29,6 +29,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.changes.ChangesUtil; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.util.ArrayList; @@ -51,7 +52,7 @@ public class EditAction extends AnAction { final EditFileProvider provider = vcs.getEditFileProvider(); if (provider != null) { try { - provider.editFiles(items.toArray(new VirtualFile[items.size()])); + provider.editFiles(VfsUtil.toVirtualFileArray(items)); } catch (VcsException e1) { exceptions.add(e1); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesListView.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesListView.java index 4bb8140639ae..962e3e1c3122 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesListView.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesListView.java @@ -28,6 +28,7 @@ import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.changes.*; import com.intellij.openapi.vcs.changes.issueLinks.TreeLinkMouseListener; import com.intellij.openapi.vcs.diff.DiffProvider; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.ui.treeStructure.Tree; @@ -266,7 +267,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan files.addAll(getSelectedVirtualFiles(null)); - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } private Change[] getLeadSelection() { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java index 37600d93fda3..5cc0fd1fb11f 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java @@ -153,7 +153,7 @@ public class IgnoreUnversionedDialog extends DialogWrapper { } updateControls(); - final VirtualFile[] ancestors = VfsUtil.getCommonAncestors(virtualFiles.toArray(new VirtualFile[virtualFiles.size()])); + final VirtualFile[] ancestors = VfsUtil.getCommonAncestors(VfsUtil.toVirtualFileArray(virtualFiles)); if (dirCount > 1) { myIgnoreDirectoryTextField.setText(VcsBundle.message("ignored.edit.multiple.directories", dirCount)); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java index 0309615276a5..4d42e6d20f2d 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java @@ -41,6 +41,7 @@ import com.intellij.openapi.vcs.update.ActionInfo; import com.intellij.openapi.vcs.update.UpdateInfoTree; import com.intellij.openapi.vcs.update.UpdatedFiles; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; @@ -497,7 +498,7 @@ public class ProjectLevelVcsManagerImpl extends ProjectLevelVcsManagerEx impleme for (AbstractVcs vcs : vcses) { Collections.addAll(vFiles, getRootsUnderVcs(vcs)); } - return vFiles.toArray(new VirtualFile[vFiles.size()]); + return VfsUtil.toVirtualFileArray(vFiles); } @NotNull diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java index ce89eeee22f6..e0088ca7f946 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java @@ -19,6 +19,7 @@ import com.intellij.openapi.diff.impl.patch.formove.FilePathComparator; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.impl.ExcludedFileIndex; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.util.Collections; @@ -53,6 +54,6 @@ public class MappingsToRoots { } } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/readOnlyHandler/VcsHandleType.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/readOnlyHandler/VcsHandleType.java index 5a624a1e856f..b65155584b16 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/readOnlyHandler/VcsHandleType.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/readOnlyHandler/VcsHandleType.java @@ -18,6 +18,7 @@ package com.intellij.openapi.vcs.readOnlyHandler; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.VcsException; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.application.ApplicationManager; @@ -37,7 +38,7 @@ public class VcsHandleType extends HandleType { public void processFiles(final Collection files) { try { - myVcs.getEditFileProvider().editFiles(files.toArray(new VirtualFile[files.size()])); + myVcs.getEditFileProvider().editFiles(VfsUtil.toVirtualFileArray(files)); } catch (VcsException e) { Messages.showErrorDialog(VcsBundle.message("message.text.cannot.edit.file", e.getLocalizedMessage()), diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java index 87918032c246..421a2997dd73 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java @@ -35,6 +35,7 @@ import com.intellij.openapi.vcs.changes.committed.CommittedChangesCache; import com.intellij.openapi.vcs.changes.committed.CommittedChangesTreeBrowser; import com.intellij.openapi.vcs.changes.committed.RefreshIncomingChangesAction; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.pointers.VirtualFilePointer; import com.intellij.ui.*; @@ -300,8 +301,7 @@ public class UpdateInfoTree extends PanelWithActionsAndCloseButton implements Di result.addAll(treeNode.getVirtualFiles()); } } - if (result.isEmpty()) return VirtualFile.EMPTY_ARRAY; - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } @Nullable diff --git a/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java b/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java index 0f40cbb45dda..0363276d6933 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java @@ -44,6 +44,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.util.ArrayUtil; @@ -456,7 +457,7 @@ public class AntExplorer extends JPanel implements DataProvider { if (result.size() == 0) { return null; } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } return null; } diff --git a/plugins/copyright/src/com/maddyhome/idea/copyright/actions/AbstractFileProcessor.java b/plugins/copyright/src/com/maddyhome/idea/copyright/actions/AbstractFileProcessor.java index 6ed8b280e975..b91159277029 100644 --- a/plugins/copyright/src/com/maddyhome/idea/copyright/actions/AbstractFileProcessor.java +++ b/plugins/copyright/src/com/maddyhome/idea/copyright/actions/AbstractFileProcessor.java @@ -28,6 +28,7 @@ import com.intellij.openapi.roots.ContentIterator; import com.intellij.openapi.roots.ModuleFileIndex; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; @@ -295,7 +296,7 @@ public abstract class AbstractFileProcessor { for (PsiFile psiFile : files) { vFiles.add(psiFile.getVirtualFile()); } - if (!ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(vFiles.toArray(new VirtualFile[vFiles.size()])) + if (!ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(VfsUtil.toVirtualFileArray(vFiles)) .hasReadonlyFiles()) { if (!files.isEmpty()) { final Runnable[] resultRunnable = new Runnable[1]; diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/CvsUpdateEnvironment.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/CvsUpdateEnvironment.java index 54cbff0b2e18..da81dd3da214 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/CvsUpdateEnvironment.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/CvsUpdateEnvironment.java @@ -39,6 +39,7 @@ import com.intellij.openapi.vcs.AbstractVcsHelper; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.VcsKey; import com.intellij.openapi.vcs.update.*; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -177,7 +178,7 @@ public class CvsUpdateEnvironment implements UpdateEnvironment { } if (readOnlyFiles.size() > 0) { - final CvsHandler editHandler = CommandCvsHandler.createEditHandler(readOnlyFiles.toArray(new VirtualFile[readOnlyFiles.size()]), + final CvsHandler editHandler = CommandCvsHandler.createEditHandler(VfsUtil.toVirtualFileArray(readOnlyFiles), CvsConfiguration.getInstance(project).RESERVED_EDIT); new CvsOperationExecutor(true, project, ModalityState.current()).performActionSync(editHandler, CvsOperationExecutorCallback.EMPTY); ApplicationManager.getApplication().runWriteAction(new Runnable() { diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/IgnoreFileAction.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/IgnoreFileAction.java index e4095d763974..a16592798c9c 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/IgnoreFileAction.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/IgnoreFileAction.java @@ -163,7 +163,7 @@ public class IgnoreFileAction extends AnAction { final CvsContext context) { return new CvsContextAdapter() { public VirtualFile[] getSelectedFiles() { - return createdCvsIgnoreFiles.toArray(new VirtualFile[createdCvsIgnoreFiles.size()]); + return VfsUtil.toVirtualFileArray(createdCvsIgnoreFiles); } public Refreshable getRefreshableDialog() { diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/merge/MergeInfo.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/merge/MergeInfo.java index 93118cf53e4f..069fd3d95689 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/merge/MergeInfo.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/merge/MergeInfo.java @@ -31,6 +31,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.SelectFromListDialog; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.merge.MergeData; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -104,7 +105,7 @@ class MergeInfo implements MergeDataProvider{ } } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/AddHandler.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/AddHandler.java index c70a99aa74de..62839dae11f5 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/AddHandler.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/AddHandler.java @@ -23,6 +23,7 @@ import com.intellij.cvsSupport2.actions.cvsContext.CvsContextAdapter; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.VcsShowConfirmationOption; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -116,7 +117,7 @@ class AddHandler { } public VirtualFile[] getSelectedFiles() { - return files.toArray(new VirtualFile[files.size()]); + return VfsUtil.toVirtualFileArray(files); } }; } diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/checkinProject/CvsCheckinEnvironment.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/checkinProject/CvsCheckinEnvironment.java index bb7f71409afe..3dab5803b447 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/checkinProject/CvsCheckinEnvironment.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/checkinProject/CvsCheckinEnvironment.java @@ -34,6 +34,7 @@ import com.intellij.openapi.vcs.changes.ContentRevision; import com.intellij.openapi.vcs.changes.ChangeList; import com.intellij.openapi.vcs.checkin.CheckinEnvironment; import com.intellij.openapi.vcs.ui.RefreshableOnComponent; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.io.File; @@ -123,7 +124,7 @@ public class CvsCheckinEnvironment implements CheckinEnvironment { } public List scheduleUnversionedFilesForAddition(List files) { - final CvsHandler handler = AddFileOrDirectoryAction.getDefaultHandler(myProject, files.toArray(new VirtualFile[files.size()])); + final CvsHandler handler = AddFileOrDirectoryAction.getDefaultHandler(myProject, VfsUtil.toVirtualFileArray(files)); final CvsOperationExecutor executor = new CvsOperationExecutor(myProject); executor.performActionSync(handler, CvsOperationExecutorCallback.EMPTY); return Collections.emptyList(); diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/AnyProcessedFiles.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/AnyProcessedFiles.java index a0ad23cb7efb..694fbf76b6c1 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/AnyProcessedFiles.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/AnyProcessedFiles.java @@ -16,6 +16,7 @@ package com.intellij.cvsSupport2.cvshandlers; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import java.util.Collection; @@ -30,7 +31,7 @@ public abstract class AnyProcessedFiles extends FileSetToBeUpdated { public void refreshFilesAsync(final Runnable postRunnable) { - final VirtualFile[] files = getFiles().toArray(VirtualFile.EMPTY_ARRAY); + final VirtualFile[] files = VfsUtil.toVirtualFileArray(getFiles()); final int[] index = new int[]{0}; LOG.info("files.length=" + files.length); Runnable runnable = new Runnable() { diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/CommandCvsHandler.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/CommandCvsHandler.java index 64f0c35953f7..e1f5e071fab8 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/CommandCvsHandler.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvshandlers/CommandCvsHandler.java @@ -220,7 +220,7 @@ public class CommandCvsHandler extends AbstractCvsHandler { operation.addFile(info.getFile(), info.getKeywordSubstitution()); } return new CommandCvsHandler(CvsBundle.message("action.name.add"), operation, - FileSetToBeUpdated.selectedFiles(addedFiles.toArray(new VirtualFile[addedFiles.size()])), + FileSetToBeUpdated.selectedFiles(VfsUtil.toVirtualFileArray(addedFiles)), VcsConfiguration.getInstance(project).getAddRemoveOption()); } @@ -241,7 +241,7 @@ public class CommandCvsHandler extends AbstractCvsHandler { VirtualFile cvsAdminDirectory = CvsVfsUtil.findFileByIoFile(new File(parentFile, CvsUtil.CVS)); if (cvsAdminDirectory != null) result.add(cvsAdminDirectory); } - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } public static CvsHandler createRestoreFileHandler(final VirtualFile parent, diff --git a/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java b/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java index 4853ac231fbe..27129660b9ae 100644 --- a/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java +++ b/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java @@ -31,6 +31,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.PopupChooserBuilder; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.Iconable; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; @@ -74,7 +75,7 @@ public class CreateHtmlDescriptionFix implements LocalQuickFix, Iconable { public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final List virtualFiles = DescriptionNotFoundInspection.getPotentialRoots(myModule); - final VirtualFile[] roots = prepare(virtualFiles.toArray(new VirtualFile[virtualFiles.size()])); + final VirtualFile[] roots = prepare(VfsUtil.toVirtualFileArray(virtualFiles)); if (roots.length == 1) { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { @@ -147,7 +148,7 @@ public class CreateHtmlDescriptionFix implements LocalQuickFix, Iconable { found.add(root); } } - return found.size() > 0 ? found.toArray(new VirtualFile[found.size()]) : roots; + return found.size() > 0 ? VfsUtil.toVirtualFileArray(found) : roots; } private static boolean containsDescriptionDir(VirtualFile root) { diff --git a/plugins/devkit/src/projectRoots/IdeaJdk.java b/plugins/devkit/src/projectRoots/IdeaJdk.java index 3a20c535ca63..85ae47525e6f 100644 --- a/plugins/devkit/src/projectRoots/IdeaJdk.java +++ b/plugins/devkit/src/projectRoots/IdeaJdk.java @@ -27,10 +27,7 @@ import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.vfs.*; import com.intellij.util.ArrayUtil; import com.intellij.util.cls.BytePointer; import com.intellij.util.cls.ClsFormatException; @@ -173,7 +170,7 @@ public class IdeaJdk extends SdkType implements JavaSdkType { appendIdeaLibrary(home + File.separator + PLUGINS_DIR + File.separator + PERSISTENCE_SUPPORT + File.separator + LIB_DIR_NAME, "persistence-impl.jar", result); appendIdeaLibrary(home + File.separator + PLUGINS_DIR + File.separator + DATABASE_DIR + File.separator + LIB_DIR_NAME, "database-impl.jar", result); appendIdeaLibrary(home + File.separator + PLUGINS_DIR + File.separator + CSS_DIR + File.separator + LIB_DIR_NAME, "css.jar", result); - return result.toArray(new VirtualFile[result.size()]); + return VfsUtil.toVirtualFileArray(result); } private static void appendIdeaLibrary(final String path, @NonNls final String forbidden, final ArrayList result) { diff --git a/plugins/git4idea/src/git4idea/actions/BasicAction.java b/plugins/git4idea/src/git4idea/actions/BasicAction.java index d1e08530b11a..ece00757b5da 100644 --- a/plugins/git4idea/src/git4idea/actions/BasicAction.java +++ b/plugins/git4idea/src/git4idea/actions/BasicAction.java @@ -27,6 +27,7 @@ import com.intellij.openapi.vcs.AbstractVcsHelper; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.TransactionRunnable; import com.intellij.openapi.vcs.VcsException; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitUtil; import git4idea.GitVcs; @@ -107,7 +108,7 @@ public abstract class BasicAction extends DumbAwareAction { } } - return affectedFiles.toArray(new VirtualFile[affectedFiles.size()]); + return VfsUtil.toVirtualFileArray(affectedFiles); } /** diff --git a/plugins/git4idea/src/git4idea/checkin/GitConvertFilesDialog.java b/plugins/git4idea/src/git4idea/checkin/GitConvertFilesDialog.java index 65e6d1b403b1..9198194033cc 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitConvertFilesDialog.java +++ b/plugins/git4idea/src/git4idea/checkin/GitConvertFilesDialog.java @@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.util.Processor; @@ -223,7 +224,7 @@ public class GitConvertFilesDialog extends DialogWrapper { for (Set fileSet : files.values()) { fileList.addAll(fileSet); } - selectedFiles = fileList.toArray(new VirtualFile[fileList.size()]); + selectedFiles = VfsUtil.toVirtualFileArray(fileList); } if (selectedFiles != null) { for (VirtualFile f : selectedFiles) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java index bc213555900b..16cc3970e105 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerBase.java @@ -199,7 +199,7 @@ public abstract class GroovyCompilerBase implements TranslatingCompiler { outputItems = Collections.emptyList(); } - sink.add(outputDir.getPath(), outputItems, toRecompile.toArray(new VirtualFile[toRecompile.size()])); + sink.add(outputDir.getPath(), outputItems, VfsUtil.toVirtualFileArray(toRecompile)); } catch (ExecutionException e) { LOG.error(e); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java index c150b819ac4e..8241a74a4773 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovyToJavaGenerator.java @@ -27,6 +27,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.util.MethodSignature; @@ -172,8 +173,8 @@ public class GroovyToJavaGenerator implements SourceGeneratingCompiler, Compilat set.addAll(Arrays.asList(context.getProjectCompileScope().getFiles(GroovyFileType.GROOVY_FILE_TYPE, true))); } }); - - return set.toArray(new VirtualFile[set.size()]); + + return VfsUtil.toVirtualFileArray(set); } public GenerationItem[] generate(CompileContext context, GenerationItem[] itemsToGenerate, VirtualFile outputRootDirectory) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java index b44e9462b2d8..1eda5cea10d0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/generator/GroovycStubGenerator.java @@ -76,7 +76,7 @@ public class GroovycStubGenerator extends GroovyCompilerBase { return; } - super.compile(compileContext, moduleChunk, total.toArray(new VirtualFile[total.size()]), sink); + super.compile(compileContext, moduleChunk, VfsUtil.toVirtualFileArray(total), sink); } @Override diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigatorPanel.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigatorPanel.java index 5c64487b5990..3dab39617a4a 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigatorPanel.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigatorPanel.java @@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.Navigatable; import com.intellij.ui.PopupHandler; @@ -138,7 +139,7 @@ public class MavenProjectsNavigatorPanel extends SimpleToolWindowPanel implement files.add(file); } } - return files.isEmpty() ? null : files.toArray(new VirtualFile[files.size()]); + return files.isEmpty() ? null : VfsUtil.toVirtualFileArray(files); } private Object extractLocation() { diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java b/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java index 46c461112a1e..eac3ab47bf6c 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java +++ b/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java @@ -22,6 +22,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.intellij.psi.search.GlobalSearchScope; @@ -57,7 +58,7 @@ public class PropertiesFilesManager extends AbstractProjectComponent { public void run() { if (myProject.isDisposed()) return; Collection filesToRefresh = getAllPropertiesFiles(); - VirtualFile[] virtualFiles = filesToRefresh.toArray(new VirtualFile[filesToRefresh.size()]); + VirtualFile[] virtualFiles = VfsUtil.toVirtualFileArray(filesToRefresh); FileDocumentManager.getInstance().saveAllDocuments(); //force to re-detect encoding diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java index 47bae2c2ed1f..3e067f8b6a63 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnChangeProvider.java @@ -27,6 +27,7 @@ import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.actions.VcsContextFactory; import com.intellij.openapi.vcs.changes.*; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.EventDispatcher; import org.jetbrains.annotations.NotNull; @@ -281,6 +282,6 @@ public class SvnChangeProvider implements ChangeProvider { } public void doCleanup(final List files) { - new CleanupWorker(files.toArray(new VirtualFile[files.size()]), myVcs.getProject(), "action.Subversion.cleanup.progress.title").execute(); + new CleanupWorker(VfsUtil.toVirtualFileArray(files), myVcs.getProject(), "action.Subversion.cleanup.progress.title").execute(); } } diff --git a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java index 43162926ee8a..44b2c5e919aa 100644 --- a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java +++ b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnChangesCorrectlyRefreshedTest.java @@ -10,6 +10,7 @@ import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vcs.changes.pending.DuringChangeListManagerUpdateTestScheme; import com.intellij.openapi.vcs.changes.ui.RollbackWorker; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.junit.Assert; import org.junit.Test; @@ -236,8 +237,7 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { clManager.ensureUpToDate(false); final List files = getAllFiles(subTree); - DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(files.toArray(new VirtualFile[files.size()]), - clManager.getDefaultListName(), clManager); + DuringChangeListManagerUpdateTestScheme.checkFilesAreInList(VfsUtil.toVirtualFileArray(files), clManager.getDefaultListName(), clManager); final Collection changes = clManager.getDefaultChangeList().getChanges(); @@ -274,8 +274,8 @@ public class SvnChangesCorrectlyRefreshedTest extends SvnTestCase { VcsDirtyScopeManager.getInstance(myProject).markEverythingDirty(); clManager.ensureUpToDate(false); final List files = getAllFiles(subTree); - DuringChangeListManagerUpdateTestScheme.checkDeletedFilesAreInList(files.toArray(new VirtualFile[files.size()]), - clManager.getDefaultListName(), clManager); + DuringChangeListManagerUpdateTestScheme.checkDeletedFilesAreInList(VfsUtil.toVirtualFileArray(files), clManager.getDefaultListName(), + clManager); final Collection changes = clManager.getDefaultChangeList().getChanges();