# HG changeset patch # User Ed Swartz # Date 1278948621 18000 # Node ID 32971633ac9fcb2df51994d9e3b9ce90e2b8a683 # Parent 92ca7b538bd22e8b7764b6a914276fa379e9e48b Fix bug 11465 diff -r 92ca7b538bd2 -r 32971633ac9f debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/FileTransferTab.java --- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/FileTransferTab.java Wed Jul 07 15:29:48 2010 -0500 +++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ui/FileTransferTab.java Mon Jul 12 10:30:21 2010 -0500 @@ -35,6 +35,7 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.ui.PlatformUI; +import java.io.File; import java.util.*; public class FileTransferTab extends CLaunchConfigurationTab { @@ -127,11 +128,11 @@ */ public void performApply(ILaunchConfigurationWorkingCopy configuration) { FileToTransfer[] files = fFilesBlock.getFiles(); - String filesString = ""; //$NON-NLS-1$ + StringBuilder filesString = new StringBuilder(); for (int i=0; i> fFileInfoCache = new LinkedHashMap>(); + private static long fFileInfoCacheFlushTime = 0; + private static final int CACHE_CHECK_QUANTUM = 60 * 1000; + /** * Content provider to show a list of files to be transferred */ @@ -149,7 +158,7 @@ // add warning icon for any host files that don't exist FileToTransfer file = (FileToTransfer)element; File hostFile = new Path(file.getHostPath()).toFile(); - if (!hostFile.exists()) { + if (!fileExists(hostFile)) { return LaunchPlugin.getImageDescriptor("icons/Launch/etool16/warning_obj.gif").createImage(); } } @@ -160,6 +169,7 @@ FilesBlock(FileTransferTab launchTab) { fLaunchTab = launchTab; + fFileInfoCacheFlushTime = System.currentTimeMillis(); } /** @@ -541,7 +551,7 @@ private void removeFiles() { IStructuredSelection selection= (IStructuredSelection)fFileList.getSelection(); FileToTransfer[] files = new FileToTransfer[selection.size()]; - Iterator iter = selection.iterator(); + Iterator iter = selection.iterator(); int i = 0; while (iter.hasNext()) { files[i] = (FileToTransfer)iter.next(); @@ -633,4 +643,32 @@ Viewer getViewer() { return fFileList; } + + boolean fileExists(File file) { + Pair entry = fFileInfoCache.get(file); + + // recheck the status occasionally, either after time passes or + // whenever the UI is recreated (as in constructor) + if (System.currentTimeMillis() >= fFileInfoCacheFlushTime) { + // remove entries not checked at all in a while + long deadLine = System.currentTimeMillis() - CACHE_CHECK_QUANTUM; + Iterator> iter = fFileInfoCache.values().iterator(); + while (iter.hasNext()) { + Pair ientry = iter.next(); + if (ientry.first < deadLine) { + iter.remove(); + } + } + fFileInfoCacheFlushTime = System.currentTimeMillis() + CACHE_CHECK_QUANTUM; + } + + if (entry == null) { + //System.out.println("Checking " + file); + entry = new Pair(System.currentTimeMillis(), file.exists()); + fFileInfoCache.put(file, entry); + } else { + //System.out.println("Not checking " + file); + } + return entry.second; + } }