cdt/cdt_6_0_x/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/ExecutablesManager.java
author timkelly
Wed, 05 Aug 2009 17:35:39 -0500
changeset 51 49c226a8748e
parent 45 70f756c14af3
child 52 42077b7eab6e
permissions -rw-r--r--
CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     1
/*******************************************************************************
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     2
 * Copyright (c) 2008 Nokia and others.
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     3
 * All rights reserved. This program and the accompanying materials
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     4
 * are made available under the terms of the Eclipse Public License v1.0
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     5
 * which accompanies this distribution, and is available at
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     6
 * http://www.eclipse.org/legal/epl-v10.html
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     7
 *
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     8
 * Contributors:
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
     9
 * Nokia - Initial API and implementation
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    10
 *******************************************************************************/
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    11
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    12
package org.eclipse.cdt.debug.core.executables;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    13
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    14
import java.util.ArrayList;
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    15
import java.util.Arrays;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    16
import java.util.Collection;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    17
import java.util.Collections;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    18
import java.util.Comparator;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    19
import java.util.HashMap;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    20
import java.util.List;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    21
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    22
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    23
import org.eclipse.cdt.debug.internal.core.executables.ExecutablesChangeEvent;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    24
import org.eclipse.cdt.debug.internal.core.executables.StandardExecutableImporter;
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    25
import org.eclipse.cdt.debug.internal.core.executables.StandardExecutableProvider;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    26
import org.eclipse.cdt.debug.internal.core.executables.StandardSourceFileRemapping;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    27
import org.eclipse.cdt.debug.internal.core.executables.StandardSourceFilesProvider;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    28
import org.eclipse.core.runtime.IPath;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    29
import org.eclipse.core.runtime.IProgressMonitor;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    30
import org.eclipse.core.runtime.IStatus;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    31
import org.eclipse.core.runtime.MultiStatus;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    32
import org.eclipse.core.runtime.PlatformObject;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    33
import org.eclipse.core.runtime.Status;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    34
import org.eclipse.core.runtime.SubProgressMonitor;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    35
import org.eclipse.core.runtime.jobs.Job;
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    36
import org.eclipse.debug.core.DebugPlugin;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    38
/**
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    39
 * The Executables Manager maintains a collection of executables built by all of
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    40
 * the projects in the workspace. Executables are contributed by instances of
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    41
 * IExecutablesProvider.
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    42
 * 
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    43
 * @author Ken Ryall
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    44
 * 
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    45
 */
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    46
public class ExecutablesManager extends PlatformObject {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    47
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    48
	private final HashMap<String, Executable> executables = new HashMap<String, Executable>();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    49
	private final List<IExecutablesChangeListener> changeListeners = Collections.synchronizedList(new ArrayList<IExecutablesChangeListener>());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    50
	private final List<ISourceFileRemapping> sourceFileRemappings = Collections.synchronizedList(new ArrayList<ISourceFileRemapping>());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    51
	private final List<IExecutableProvider> executableProviders = Collections.synchronizedList(new ArrayList<IExecutableProvider>());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    52
	private final List<ISourceFilesProvider> sourceFileProviders = Collections.synchronizedList(new ArrayList<ISourceFilesProvider>());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    53
	private final List<IExecutableImporter> executableImporters = Collections.synchronizedList(new ArrayList<IExecutableImporter>());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    54
	private boolean refreshNeeded = true;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    55
	private boolean tempDisableRefresh = false;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    56
	
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    57
	private final Job refreshJob = new Job("Get Executables") {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    58
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    59
		@Override
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    60
		public IStatus run(IProgressMonitor monitor) {
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    61
			refreshExecutables(monitor);
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    62
			return Status.OK_STATUS;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    63
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    64
	};
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    65
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    66
	private static ExecutablesManager executablesManager = null;
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    67
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    68
	public static ExecutablesManager getExecutablesManager() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    69
		if (executablesManager == null)
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    70
			executablesManager = new ExecutablesManager();
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    71
		return executablesManager;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    72
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    73
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    74
	public ExecutablesManager() {
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    75
		addSourceFileRemapping(new StandardSourceFileRemapping());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    76
		addExecutableImporter(new StandardExecutableImporter());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    77
		addExecutablesProvider(new StandardExecutableProvider());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    78
		addSourceFilesProvider(new StandardSourceFilesProvider());
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    79
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    80
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    81
	public void addExecutablesChangeListener(IExecutablesChangeListener listener) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    82
		changeListeners.add(listener);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    83
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    84
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    85
	public void removeExecutablesChangeListener(IExecutablesChangeListener listener) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    86
		changeListeners.remove(listener);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    87
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    88
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    89
	public void addSourceFileRemapping(ISourceFileRemapping remapping) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    90
		sourceFileRemappings.add(remapping);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    91
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    92
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    93
	public void removeSourceFileRemapping(ISourceFileRemapping remapping) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    94
		sourceFileRemappings.remove(remapping);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    95
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    96
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    97
	public void addExecutableImporter(IExecutableImporter importer) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    98
		executableImporters.add(importer);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
    99
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   100
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   101
	public void removeExecutableImporter(IExecutableImporter importer) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   102
		executableImporters.remove(importer);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   103
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   104
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   105
	public void addExecutablesProvider(IExecutableProvider provider) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   106
		executableProviders.add(provider);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   107
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   108
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   109
	/**
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   110
	 * @since 6.0
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   111
	 */
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   112
	public void addSourceFilesProvider(ISourceFilesProvider provider) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   113
		sourceFileProviders.add(provider);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   114
	}
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   115
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   116
	/**
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   117
	 * @since 6.0
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   118
	 */
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   119
	public void removeSourceFilesProvider(ISourceFilesProvider provider) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   120
		sourceFileProviders.remove(provider);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   121
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   122
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   123
	public void removeExecutablesProvider(IExecutableProvider provider) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   124
		executableProviders.remove(provider);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   125
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   126
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   127
	public IStatus refreshExecutables(IProgressMonitor monitor) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   128
		if (tempDisableRefresh) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   129
			return Status.OK_STATUS;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   130
		}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   131
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   132
		
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   133
		synchronized (executables) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   134
			HashMap<String, Executable> oldList = new HashMap<String, Executable>(executables);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   135
			executables.clear();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   136
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   137
			IExecutableProvider[] exeProviders = getExecutableProviders();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   138
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   139
			Arrays.sort(exeProviders, new Comparator<IExecutableProvider>() {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   140
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   141
				public int compare(IExecutableProvider arg0, IExecutableProvider arg1) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   142
					int p0 = arg0.getPriority();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   143
					int p1 = arg1.getPriority();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   144
					if (p0 > p1)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   145
						return 1;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   146
					if (p0 < p1)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   147
						return -1;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   148
					return 0;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   149
				}});
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   150
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   151
			refreshNeeded = false;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   152
			monitor.beginTask("Refresh Executables", exeProviders.length);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   153
			for (IExecutableProvider provider : exeProviders) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   154
				Executable[] exes = provider.getExecutables(new SubProgressMonitor(monitor, 1));
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   155
				for (Executable executable : exes) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   156
					executables.put(executable.getPath().toOSString(), executable);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   157
				}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   158
			}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   159
			monitor.done();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   160
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   161
			synchronized (changeListeners) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   162
				Collection<Executable> newExes = executables.values();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   163
				Executable[] exeArray = newExes.toArray(new Executable[newExes.size()]);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   164
				Collection<Executable> oldExes = oldList.values();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   165
				Executable[] oldArray = oldExes.toArray(new Executable[oldExes.size()]);				
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   166
				for (IExecutablesChangeListener listener : changeListeners) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   167
					listener.executablesChanged(new ExecutablesChangeEvent(oldArray, exeArray));
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   168
				}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   169
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   170
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   171
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   172
		return monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   173
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   174
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   175
	public Executable[] getExecutables() {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   176
		if (refreshNeeded) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   177
			try {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   178
				refreshJob.schedule();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   179
				refreshJob.join();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   180
			} catch (InterruptedException e) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   181
				DebugPlugin.log( e );
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   182
			}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   183
		}
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   184
		
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   185
		synchronized (executables)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   186
		{
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   187
			Collection<Executable> exes = executables.values();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   188
			return exes.toArray(new Executable[exes.size()]);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   189
		}
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   190
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   191
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   192
	/**
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   193
	 * @since 6.0
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   194
	 */
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   195
	public String remapSourceFile(Executable executable, String filePath) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   196
		synchronized (sourceFileRemappings) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   197
			for (ISourceFileRemapping remapping : sourceFileRemappings) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   198
				String remappedPath = remapping.remapSourceFile(executable, filePath);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   199
				if (!remappedPath.equals(filePath))
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   200
					return remappedPath;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   201
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   202
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   203
		return filePath;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   204
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   205
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   206
	public void importExecutables(final String[] fileNames, IProgressMonitor monitor) {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   207
		boolean handled = false;
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   208
		try {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   209
			
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   210
			tempDisableRefresh = true;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   211
			monitor.beginTask("Import Executables", executableImporters.size());
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   212
			synchronized (executableImporters) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   213
				Collections.sort(executableImporters, new Comparator<IExecutableImporter>() {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   214
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   215
					public int compare(IExecutableImporter arg0, IExecutableImporter arg1) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   216
						int p0 = arg0.getPriority(fileNames);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   217
						int p1 = arg1.getPriority(fileNames);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   218
						if (p0 < p1)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   219
							return 1;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   220
						if (p0 > p1)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   221
							return -1;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   222
						return 0;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   223
					}});
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   224
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   225
				for (IExecutableImporter importer : executableImporters) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   226
					handled = importer.importExecutables(fileNames, new SubProgressMonitor(monitor, 1));
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   227
					if (handled || monitor.isCanceled()) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   228
						break;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   229
					}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   230
				}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   231
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   232
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   233
		} finally {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   234
			tempDisableRefresh = false;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   235
		}
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   236
		
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   237
		if (handled)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   238
			refreshExecutables(monitor);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   239
		monitor.done();
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   240
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   241
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   242
	public ISourceFileRemapping[] getSourceFileRemappings() {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   243
		return sourceFileRemappings.toArray(new ISourceFileRemapping[sourceFileRemappings.size()]);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   244
	}
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   245
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   246
	public IExecutableProvider[] getExecutableProviders() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   247
		return executableProviders.toArray(new IExecutableProvider[executableProviders.size()]);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   248
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   249
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   250
	/**
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   251
	 * @since 6.0
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   252
	 */
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   253
	public ISourceFilesProvider[] getSourceFileProviders() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   254
		return sourceFileProviders.toArray(new ISourceFilesProvider[sourceFileProviders.size()]);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   255
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   256
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   257
	public IExecutableImporter[] getExecutableImporters() {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   258
		return executableImporters.toArray(new IExecutableImporter[executableImporters.size()]);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   259
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   260
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   261
	public void scheduleRefresh(IExecutableProvider provider, long delay) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   262
		refreshNeeded = true;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   263
		refreshJob.schedule(delay);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   264
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   265
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   266
	public boolean refreshNeeded() {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   267
		return refreshNeeded;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   268
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   269
	
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   270
	public boolean executableExists(IPath exePath) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   271
		synchronized (executables) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   272
			return executables.containsKey(exePath.toOSString());			
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   273
		}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   274
	}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   275
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   276
	/**
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   277
	 * @since 6.0
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   278
	 */
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   279
	public String[] getSourceFiles(final Executable executable,
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   280
			IProgressMonitor monitor) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   281
		String[] result = new String[0];
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   282
		synchronized (sourceFileProviders) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   283
			Collections.sort(sourceFileProviders, new Comparator<ISourceFilesProvider>() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   284
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   285
				public int compare(ISourceFilesProvider arg0, ISourceFilesProvider arg1) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   286
					int p0 = arg0.getPriority(executable);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   287
					int p1 = arg1.getPriority(executable);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   288
					if (p0 < p1)
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   289
						return 1;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   290
					if (p0 > p1)
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   291
						return -1;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   292
					return 0;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   293
				}});
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   294
			
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   295
			monitor.beginTask("Finding source files in " + executable.getName(), sourceFileProviders.size());
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   296
			for (ISourceFilesProvider provider : sourceFileProviders) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   297
				String[] sourceFiles = provider.getSourceFiles(executable, new SubProgressMonitor(monitor, 1));
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   298
				if (sourceFiles.length > 0)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   299
				{
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   300
					result = sourceFiles;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   301
					break;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   302
				}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   303
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   304
			monitor.done();
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   305
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   306
		return result;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   307
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   308
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   309
	/**
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   310
	 * @since 6.0
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   311
	 */
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   312
	public IStatus removeExecutables(Executable[] executables, IProgressMonitor monitor) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   313
		IExecutableProvider[] exeProviders = getExecutableProviders();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   314
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   315
		IStatus result = Status.OK_STATUS;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   316
		
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   317
		Arrays.sort(exeProviders, new Comparator<IExecutableProvider>() {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   318
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   319
			public int compare(IExecutableProvider arg0, IExecutableProvider arg1) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   320
				int p0 = arg0.getPriority();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   321
				int p1 = arg1.getPriority();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   322
				if (p0 > p1)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   323
					return 1;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   324
				if (p0 < p1)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   325
					return -1;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   326
				return 0;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   327
			}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   328
		});
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   329
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   330
		MultiStatus combinedStatus = new MultiStatus(CDebugCorePlugin.PLUGIN_ID, IStatus.WARNING, "Couldn't remove all of the selected executables", null);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   331
		refreshNeeded = false;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   332
		monitor.beginTask("Remove Executables", exeProviders.length);
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   333
		for (Executable executable : executables) {
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   334
			boolean handled = false;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   335
			IStatus rmvStatus = Status.OK_STATUS;;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   336
			for (IExecutableProvider provider : exeProviders) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   337
				if (!handled)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   338
				{
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   339
					rmvStatus = provider.removeExecutable(executable, new SubProgressMonitor(monitor, 1));
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   340
					handled = rmvStatus.getSeverity() == IStatus.OK;
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   341
				}				
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   342
			}
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   343
			if (!handled)
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   344
			{
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   345
				combinedStatus.add(rmvStatus);
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   346
				result = combinedStatus;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   347
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   348
		}
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   349
		monitor.done();
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   350
		
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   351
		return result;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   352
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   353
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   354
	/**
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   355
	 * @since 6.0
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   356
	 */
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   357
	public void setRefreshNeeded(boolean refresh) {
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   358
		refreshNeeded = true;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   359
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   360
51
49c226a8748e CDT 6.0 from cdt_6_0 branch (eclipse.org cvs repository). This overwrites previous CDT 6.0 merges.
timkelly
parents: 45
diff changeset
   361
}