From 52bbedc9046a0e59aec6a450eb8769d111f1dcd5 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 10 Feb 2009 19:00:18 +0300 Subject: [PATCH] 1. do not index files which are out of project content 2. Faster Ant internal structures cleanup on VirtualFile deletion --- .../FileIndexRefreshCacheUpdater.java | 12 +++---- .../ant/config/impl/AntConfigurationImpl.java | 35 +++++++++++-------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java b/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java index 459d359708fb..59186547059f 100644 --- a/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java +++ b/lang-impl/src/com/intellij/util/fileIndex/FileIndexRefreshCacheUpdater.java @@ -8,13 +8,13 @@ import com.intellij.ide.startup.CacheUpdater; import com.intellij.ide.startup.FileContent; import com.intellij.openapi.Disposable; import com.intellij.openapi.vfs.*; -import com.intellij.openapi.vfs.newvfs.NewVirtualFile; import com.intellij.openapi.vfs.ex.VirtualFileManagerEx; +import com.intellij.openapi.vfs.newvfs.NewVirtualFile; +import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.Set; -import java.util.Collection; -import java.util.Arrays; /** * @author nik @@ -88,10 +88,10 @@ public class FileIndexRefreshCacheUpdater extends VirtualFileAdapter implements } private void handleCreateDeleteFile(final VirtualFile file, final boolean fromRefresh, final boolean create) { + if (!myFileIndex.getProjectFileIndex().isInContent(file)) { + return; + } if (file.isDirectory()) { - if (!myFileIndex.getProjectFileIndex().isInContent(file)) { - return; - } final Collection children = create ? Arrays.asList(file.getChildren()) : ((NewVirtualFile)file).getCachedChildren(); for (VirtualFile child : children) { handleCreateDeleteFile(child, fromRefresh, create); diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java index 03aa05d6ee99..180008d2462f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java @@ -98,6 +98,7 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis private final Map> myEventToTargetMap = new HashMap>(); private final List myBuildFiles = new ArrayList(); + private AntBuildFile[] myBuildFilesArray = null; // cached result of call to myBuildFiles.toArray() private final Map myModelToBuildFileMap = new HashMap(); private final Map myAntFileToContextFileMap = new java.util.HashMap(); private final EventDispatcher myEventDispatcher = EventDispatcher.create(AntConfigurationListener.class); @@ -144,20 +145,17 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis VirtualFileManager.getInstance().addVirtualFileListener(new VirtualFileAdapter() { public void beforeFileDeletion(final VirtualFileEvent event) { final VirtualFile vFile = event.getFile(); - final AntFile antFile = AntSupport.toAntFile(vFile, AntConfigurationImpl.this.getProject()); - if (antFile != null) { - // cleanup - for (AntBuildFile file : getBuildFiles()) { - if (antFile.equals(file.getAntFile())) { - removeBuildFile(file); - break; - } + // cleanup + for (AntBuildFile file : getBuildFiles()) { + if (vFile.equals(file.getVirtualFile())) { + removeBuildFile(file); + break; } - for (Iterator it = myAntFileToContextFileMap.keySet().iterator(); it.hasNext();) { - final VirtualFile file = it.next(); - if (vFile.equals(file) || vFile.equals(myAntFileToContextFileMap.get(file))) { - it.remove(); - } + } + for (Iterator> it = myAntFileToContextFileMap.entrySet().iterator(); it.hasNext();) { + final Map.Entry entry = it.next(); + if (vFile.equals(entry.getKey()) || vFile.equals(entry.getValue())) { + it.remove(); } } } @@ -195,7 +193,10 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis public AntBuildFile[] getBuildFiles() { synchronized (myBuildFiles) { - return myBuildFiles.toArray(new AntBuildFile[myBuildFiles.size()]); + if (myBuildFilesArray == null) { + myBuildFilesArray = myBuildFiles.toArray(new AntBuildFile[myBuildFiles.size()]); + } + return myBuildFilesArray; } } @@ -362,7 +363,9 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis @Nullable public AntBuildModel getModelIfRegistered(final AntBuildFile buildFile) { synchronized (myBuildFiles) { - if (!myBuildFiles.contains(buildFile)) return null; + if (!myBuildFiles.contains(buildFile)) { + return null; + } } return getModel(buildFile); } @@ -535,6 +538,7 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis final AntBuildFileImpl buildFile = new AntBuildFileImpl(antFile, this); antFile.getSourceElement().putCopyableUserData(AntFileImpl.ANT_BUILD_FILE, buildFile); synchronized (myBuildFiles) { + myBuildFilesArray = null; myBuildFiles.add(buildFile); } return buildFile; @@ -596,6 +600,7 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis xmlFile.putCopyableUserData(AntFileImpl.ANT_BUILD_FILE, null); AntSupport.markFileAsAntFile(xmlFile.getVirtualFile(), xmlFile.getViewProvider(), false); synchronized (myBuildFiles) { + myBuildFilesArray = null; myBuildFiles.remove(buildFile); } myModelToBuildFileMap.remove(buildFile);