cdt/cdt_6_0_x/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/executables/ExecutablesManager.java
author timkelly
Thu, 30 Jul 2009 17:06:37 -0500
changeset 45 70f756c14af3
parent 37 c2bce6dd59e7
child 51 49c226a8748e
permissions -rw-r--r--
merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
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
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    14
import java.text.DateFormat;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    15
import java.util.ArrayList;
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;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    19
import java.util.Date;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    20
import java.util.HashMap;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    21
import java.util.List;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    22
import java.util.Map;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    23
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    24
import org.eclipse.cdt.core.model.CoreModel;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    25
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    26
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    27
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    28
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    29
import org.eclipse.cdt.debug.internal.core.executables.StandardExecutableImporter;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    30
import org.eclipse.cdt.debug.internal.core.executables.StandardSourceFileRemapping;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    31
import org.eclipse.cdt.debug.internal.core.executables.StandardSourceFilesProvider;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    32
import org.eclipse.core.resources.IProject;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    33
import org.eclipse.core.resources.IProjectDescription;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    34
import org.eclipse.core.resources.IResource;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    35
import org.eclipse.core.resources.IResourceChangeEvent;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    36
import org.eclipse.core.resources.IResourceChangeListener;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    37
import org.eclipse.core.resources.IResourceDelta;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    38
import org.eclipse.core.resources.IResourceDeltaVisitor;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    39
import org.eclipse.core.resources.ResourcesPlugin;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    40
import org.eclipse.core.runtime.CoreException;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    41
import org.eclipse.core.runtime.IConfigurationElement;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    42
import org.eclipse.core.runtime.IExtension;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    43
import org.eclipse.core.runtime.IExtensionPoint;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    44
import org.eclipse.core.runtime.IExtensionRegistry;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    45
import org.eclipse.core.runtime.IPath;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    46
import org.eclipse.core.runtime.IProgressMonitor;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    47
import org.eclipse.core.runtime.IStatus;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    48
import org.eclipse.core.runtime.MultiStatus;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    49
import org.eclipse.core.runtime.Platform;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    50
import org.eclipse.core.runtime.PlatformObject;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    51
import org.eclipse.core.runtime.Status;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    52
import org.eclipse.core.runtime.SubMonitor;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    53
import org.eclipse.core.runtime.SubProgressMonitor;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    54
import org.eclipse.core.runtime.jobs.Job;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    55
import org.eclipse.osgi.service.debug.DebugOptions;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    56
import org.osgi.framework.BundleContext;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    57
import org.osgi.framework.ServiceReference;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    58
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    59
/**
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    60
 * The Executables Manager maintains a collection of executables built by all of
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    61
 * the projects in the workspace. Executables are contributed by instances of
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    62
 * IExecutablesProvider.
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    63
 * 
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    64
 * @author Ken Ryall
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    65
 * 
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    66
 */
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    67
public class ExecutablesManager extends PlatformObject implements IResourceChangeListener, ICProjectDescriptionListener {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    68
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    69
	private static final String EXECUTABLES_MANAGER_DEBUG_TRACING = CDebugCorePlugin.PLUGIN_ID + "EXECUTABLES_MANAGER_DEBUG_TRACING"; //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    70
		
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    71
	private Map<IProject, IProjectExecutablesProvider> executablesProviderMap = new HashMap<IProject, IProjectExecutablesProvider>();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    72
	private Map<IProject, List<Executable>> executablesMap = new HashMap<IProject, List<Executable>>();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    73
	private List<IExecutablesChangeListener> changeListeners = Collections.synchronizedList(new ArrayList<IExecutablesChangeListener>());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    74
	private List<IProjectExecutablesProvider> executableProviders;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    75
	private List<ISourceFilesProvider> sourceFileProviders;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    76
	private List<ISourceFileRemapping> sourceFileRemappings;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    77
	private List<IExecutableImporter> executableImporters;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    78
	
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    79
	private boolean DEBUG;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    80
	
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    81
	private final Job refreshJob = new Job("Get Executables") {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    82
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    83
		@Override
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
    84
		public IStatus run(IProgressMonitor monitor) {
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    85
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    86
			trace("Get Executables job started at "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    87
					+ getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    88
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    89
			List<IProject> projects = getProjectsToCheck();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    90
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    91
			SubMonitor subMonitor = SubMonitor
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    92
					.convert(monitor, projects.size());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    93
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    94
			for (IProject project : projects) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    95
				if (subMonitor.isCanceled()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    96
					trace("Get Executables job cancelled at "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    97
							+ getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    98
					return Status.CANCEL_STATUS;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
    99
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   100
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   101
				subMonitor.subTask("Checking project: " + project.getName());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   102
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   103
				// get the executables provider for this project
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   104
				IProjectExecutablesProvider provider = getExecutablesProviderForProject(project);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   105
				if (provider != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   106
					trace("Getting executables for project: "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   107
							+ project.getName() + " using "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   108
							+ provider.toString());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   109
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   110
					// store the list of executables for this project
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   111
					synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   112
						executablesMap.put(project, provider.getExecutables(
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   113
								project, subMonitor.newChild(1,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   114
										SubMonitor.SUPPRESS_NONE)));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   115
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   116
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   117
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   118
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   119
			// notify the listeners
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   120
			synchronized (changeListeners) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   121
				for (IExecutablesChangeListener listener : changeListeners) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   122
					listener.executablesListChanged();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   123
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   124
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   125
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   126
			trace("Get Executables job finished at "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   127
					+ getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   128
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   129
			return Status.OK_STATUS;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   130
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   131
	};
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   132
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   133
	private static ExecutablesManager executablesManager = null;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   134
	
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   135
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   136
	* Get the executables manager instance
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   137
	* @return the executables manager
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   138
	*/
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   139
	public static ExecutablesManager getExecutablesManager() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   140
		if (executablesManager == null)
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   141
			executablesManager = new ExecutablesManager();
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   142
		return executablesManager;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   143
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   144
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   145
	public ExecutablesManager() {
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   146
		// check if debugging is enabled
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   147
		BundleContext context = CDebugCorePlugin.getDefault().getBundle()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   148
				.getBundleContext();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   149
		if (context != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   150
			ServiceReference reference = CDebugCorePlugin.getDefault()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   151
					.getBundle().getBundleContext().getServiceReference(
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   152
							DebugOptions.class.getName());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   153
			if (reference != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   154
				DebugOptions service = (DebugOptions) context
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   155
						.getService(reference);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   156
				if (service != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   157
					try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   158
						DEBUG = service.getBooleanOption(
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   159
								EXECUTABLES_MANAGER_DEBUG_TRACING, false);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   160
					} finally {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   161
						// we have what we want - release the service
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   162
						context.ungetService(reference);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   163
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   164
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   165
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   166
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   167
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   168
		refreshJob.setPriority(Job.SHORT);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   169
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   170
		// load the extension points
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   171
		loadExecutableProviderExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   172
		loadSoureFileProviderExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   173
		loadSoureRemappingExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   174
		loadExecutableImporterExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   175
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   176
		// add the standard providers
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   177
		executableProviders.add(0, new StandardExecutableProvider());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   178
		sourceFileProviders.add(0, new StandardSourceFilesProvider());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   179
		sourceFileRemappings.add(0, new StandardSourceFileRemapping());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   180
		executableImporters.add(0, new StandardExecutableImporter());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   181
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   182
		// listen for events we're interested in
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   183
		ResourcesPlugin.getWorkspace().addResourceChangeListener(
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   184
				this,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   185
				IResourceChangeEvent.POST_CHANGE
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   186
						| IResourceChangeEvent.POST_BUILD);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   187
		CoreModel.getDefault().getProjectDescriptionManager()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   188
				.addCProjectDescriptionListener(this,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   189
						CProjectDescriptionEvent.DATA_APPLIED);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   190
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   191
		// schedule a refresh so we get up to date
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   192
		scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   193
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   194
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   195
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   196
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   197
	* Adds an executable listener
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   198
	* @param listener the listener to add
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   199
	*/
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   200
	public void addExecutablesChangeListener(IExecutablesChangeListener listener) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   201
		changeListeners.add(listener);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   202
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   203
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   204
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   205
	* Removes an executable listener
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   206
	* @param listener the listener to remove
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   207
	*/
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   208
	public void removeExecutablesChangeListener(IExecutablesChangeListener listener) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   209
		changeListeners.remove(listener);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   210
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   211
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   212
	
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   213
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   214
	/**
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   215
	* Gets the list of executables in the workspace.
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   216
	* @return the list of executables which may be empty
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   217
	*/
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   218
	public Collection<Executable> getExecutables() {	
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   219
		trace("getExecutables called at " + getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   220
		List<Executable> executables = new ArrayList<Executable>();
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   221
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   222
		synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   223
			for (List<Executable> exes : executablesMap.values()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   224
				for (Executable exe : exes) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   225
					if (!executables.contains(exe)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   226
						executables.add(exe);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   227
					}
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   228
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
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   233
		trace("getExecutables returned at " + getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   234
		
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   235
		return executables;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   236
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   237
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   238
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   239
	/**
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   240
	* Gets the collection of executables for the given project
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   241
	* @param project the project
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   242
	* @return collection of executables which may be empty
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   243
	*/
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   244
	public Collection<Executable> getExecutablesForProject(IProject project) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   245
		List<Executable> executables = new ArrayList<Executable>();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   246
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   247
		synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   248
			List<Executable> exes = executablesMap.get(project);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   249
			if (exes != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   250
				for (Executable exe : exes) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   251
					if (!executables.contains(exe)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   252
						executables.add(exe);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   253
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   254
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   255
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   256
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   257
		return executables;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   258
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   259
			
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   260
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   261
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   262
	* Attempt to remap the path to the given source file in the given executable using
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   263
	* source file mapping extensions
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   264
	* @param executable the executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   265
	* @param filePath the absolute path to the source file
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   266
	* @return the new path to the source file, which was remapped if possible
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   267
	*
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   268
	* @since 6.0
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   269
	*/
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   270
	public String remapSourceFile(Executable executable, String filePath) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   271
		synchronized (sourceFileRemappings) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   272
			for (ISourceFileRemapping remapping : sourceFileRemappings) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   273
				String remappedPath = remapping.remapSourceFile(executable, filePath);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   274
				if (!remappedPath.equals(filePath))
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   275
					return remappedPath;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   276
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   277
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   278
		return filePath;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   279
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   280
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   281
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   282
	* Import the given executables into the manager
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   283
	* @param fileNames the absolute paths of the executables to import
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   284
	* @param monitor progress monitor
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   285
	*/
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   286
	public void importExecutables(final String[] fileNames,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   287
			IProgressMonitor monitor) {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   288
		boolean handled = false;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   289
		monitor.beginTask("Import Executables", executableImporters.size());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   290
		synchronized (executableImporters) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   291
			Collections.sort(executableImporters,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   292
					new Comparator<IExecutableImporter>() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   293
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   294
						public int compare(IExecutableImporter arg0,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   295
								IExecutableImporter arg1) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   296
							int p0 = arg0.getPriority(fileNames);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   297
							int p1 = arg1.getPriority(fileNames);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   298
							if (p0 < p1)
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   299
								return 1;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   300
							if (p0 > p1)
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   301
								return -1;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   302
							return 0;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   303
						}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   304
					});
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   305
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   306
			for (IExecutableImporter importer : executableImporters) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   307
				if (handled || monitor.isCanceled()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   308
					break;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   309
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   310
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   311
		}
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   312
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   313
		scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   314
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   315
							
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   316
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   317
	 * Determines if the given executable is currently known by the manager
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   318
	 * 
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   319
	 * @param exePath
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   320
	 *            the absolute path to the executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   321
	 * @return true if the manager knows about it, false otherwise
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   322
	 */
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   323
	public boolean executableExists(IPath exePath) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   324
		synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   325
			for (List<Executable> exes : executablesMap.values()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   326
				for (Executable exe : exes) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   327
					if (exe.getPath().equals(exePath)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   328
						return true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   329
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   330
					}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   331
				}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   332
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   333
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   334
		}
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   335
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   336
		return false;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   337
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   338
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   339
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   340
	public IExecutableProvider[] getExecutableProviders() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   341
		return executableProviders.toArray(new IExecutableProvider[executableProviders.size()]);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   342
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   343
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   344
	/**
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   345
	 * @since 6.0
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   346
	 */
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   347
	public ISourceFilesProvider[] getSourceFileProviders() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   348
		return sourceFileProviders.toArray(new ISourceFilesProvider[sourceFileProviders.size()]);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   349
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   350
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   351
	/**
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   352
	* Get the list of source files for the given executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   353
	* @param executable the executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   354
	* @param monitor progress monitor
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   355
	* @return an array of source files which may be empty
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   356
	*/
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   357
	public String[] getSourceFiles(final Executable executable, IProgressMonitor monitor) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   358
			String[] result = new String[0];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   359
			trace("getSourceFiles called at " + getStringFromTimestamp(System.currentTimeMillis()) + " for " + executable.getPath().toOSString());
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   360
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   361
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   362
		synchronized (sourceFileProviders) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   363
			Collections.sort(sourceFileProviders, new Comparator<ISourceFilesProvider>() {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   364
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   365
				public int compare(ISourceFilesProvider arg0, ISourceFilesProvider arg1) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   366
					int p0 = arg0.getPriority(executable);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   367
					int p1 = arg1.getPriority(executable);
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   368
					if (p0 < p1)
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   369
						return 1;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   370
					if (p0 > p1)
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   371
						return -1;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   372
					return 0;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   373
				}});
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   374
			
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   375
			monitor.beginTask("Finding source files in " + executable.getName(), sourceFileProviders.size());
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   376
			for (ISourceFilesProvider provider : sourceFileProviders) {
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   377
				String[] sourceFiles = provider.getSourceFiles(executable, new SubProgressMonitor(monitor, 1));
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   378
				if (sourceFiles.length > 0) {
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   379
					result = sourceFiles;
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   380
					trace("getSourceFiles got " + sourceFiles.length + " files from " + provider.toString());
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   381
					break;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   382
				}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   383
			}
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   384
			
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   385
			trace("getSourceFiles returned at " + getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   386
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   387
			monitor.done();
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   388
		}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   389
		return result;
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   390
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   391
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   392
	/**
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   393
	* Removes the given executables
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   394
	* @param executables the array of executables to be removed
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   395
	* @param monitor progress monitor
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   396
	* @return IStatus of the operation
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   397
	* 
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   398
	* @since 6.0
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   399
	*/
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   400
	public IStatus removeExecutables(Executable[] executables,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   401
			IProgressMonitor monitor) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   402
		MultiStatus status = new MultiStatus(CDebugCorePlugin.PLUGIN_ID,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   403
				IStatus.WARNING,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   404
				"Couldn't remove all of the selected executables", null);
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   405
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   406
		monitor.beginTask("Remove Executables", executables.length);
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   407
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   408
		for (Executable executable : executables) {
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   409
			IProjectExecutablesProvider provider = getExecutablesProviderForProject(executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   410
					.getProject());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   411
			if (provider != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   412
				IStatus result = provider.removeExecutable(executable,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   413
						new SubProgressMonitor(monitor, 1));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   414
				if (result.isOK()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   415
					// remove the exe from the list
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   416
					List<Executable> exes = executablesMap.get(executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   417
							.getProject());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   418
					if (exes != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   419
						exes.remove(executable);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   420
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   421
				} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   422
					status.add(result);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   423
				}
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   424
			}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   425
		}
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   426
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   427
		// notify listeners that the list has changed. only do this if at least
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   428
		// one delete succeeded.
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   429
		if (status.getChildren().length != executables.length) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   430
			synchronized (changeListeners) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   431
				for (IExecutablesChangeListener listener : changeListeners) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   432
					listener.executablesListChanged();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   433
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   434
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   435
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   436
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   437
		return status;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   438
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   439
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   440
	/**
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   441
	* Refresh the list of executables for the given projects
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   442
	* @param projects the list of projects, or null.  if null or the list
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   443
	* is empty, all projects will be refreshed.
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   444
	*/
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   445
	public void refresh(List<IProject> projects) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   446
		if (projects == null || projects.size() == 0) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   447
			// clear the entire cache
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   448
			executablesMap.clear();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   449
		} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   450
			for (IProject project : projects) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   451
				executablesMap.remove(project);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   452
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   453
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   454
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   455
		scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   456
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   457
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   458
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   459
	public void resourceChanged(IResourceChangeEvent event) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   460
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   461
		synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   462
			// project needs to be refreshed after a build/clean as the binary
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   463
			// may
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   464
			// be added/removed/renamed etc.
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   465
			if (event.getType() == IResourceChangeEvent.POST_BUILD) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   466
				Object obj = event.getSource();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   467
				if (obj != null && obj instanceof IProject) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   468
					if (executablesMap.containsKey(obj)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   469
						List<Executable> executables = executablesMap
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   470
								.remove(obj);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   471
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   472
						trace("Scheduling refresh because project "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   473
								+ ((IProject) obj).getName()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   474
								+ " built or cleaned");
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   475
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   476
						scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   477
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   478
						// notify the listeners that these executables have
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   479
						// possibly changed
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   480
						if (executables != null && executables.size() > 0) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   481
							synchronized (changeListeners) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   482
								for (IExecutablesChangeListener listener : changeListeners) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   483
									listener.executablesChanged(executables);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   484
								}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   485
							}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   486
						}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   487
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   488
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   489
				return;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   490
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   491
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   492
			// refresh when projects are opened or closed. note that deleted
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   493
			// projects are handled later in this method. new projects are
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   494
			// handled
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   495
			// in handleEvent. resource changed events always start at the
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   496
			// workspace
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   497
			// root, so projects are the next level down
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   498
			boolean refreshNeeded = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   499
			IResourceDelta[] projects = event.getDelta().getAffectedChildren();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   500
			for (IResourceDelta projectDelta : projects) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   501
				if ((projectDelta.getFlags() & IResourceDelta.OPEN) != 0) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   502
					if (projectDelta.getKind() == IResourceDelta.CHANGED) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   503
						// project was opened or closed
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   504
						if (executablesMap.containsKey(projectDelta
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   505
								.getResource())) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   506
							executablesMap.remove(projectDelta.getResource());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   507
						}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   508
						refreshNeeded = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   509
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   510
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   511
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   512
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   513
			if (refreshNeeded) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   514
				trace("Scheduling refresh because project(s) opened or closed");
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   515
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   516
				scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   517
				return;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   518
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   519
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   520
			try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   521
				event.getDelta().accept(new IResourceDeltaVisitor() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   522
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   523
					public boolean visit(IResourceDelta delta)
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   524
							throws CoreException {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   525
						if (delta.getKind() == IResourceDelta.ADDED
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   526
								|| delta.getKind() == IResourceDelta.REMOVED) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   527
							IResource deltaResource = delta.getResource();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   528
							if (deltaResource != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   529
								boolean refresh = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   530
								if (delta.getKind() == IResourceDelta.REMOVED
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   531
										&& deltaResource instanceof IProject) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   532
									// project deleted
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   533
									if (executablesMap
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   534
											.containsKey(deltaResource)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   535
										executablesMap.remove(deltaResource);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   536
										refresh = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   537
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   538
										trace("Scheduling refresh because project "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   539
												+ deltaResource.getName()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   540
												+ " deleted");
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   541
									}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   542
								} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   543
									// see if a binary has been added/removed
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   544
									IPath resourcePath = deltaResource
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   545
											.getLocation();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   546
									if (resourcePath != null
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   547
											&& Executable
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   548
													.isExecutableFile(resourcePath)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   549
										if (executablesMap
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   550
												.containsKey(deltaResource
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   551
														.getProject())) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   552
											executablesMap.remove(deltaResource
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   553
													.getProject());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   554
											refresh = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   555
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   556
											trace("Scheduling refresh because a binary was added/removed");
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   557
										}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   558
									}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   559
								}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   560
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   561
								if (refresh) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   562
									scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   563
									return false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   564
								}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   565
							}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   566
						}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   567
						return true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   568
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   569
				});
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   570
			} catch (CoreException e) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   571
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   572
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   573
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   574
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   575
	public void handleEvent(CProjectDescriptionEvent event) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   576
		// this handles the cases where the active build configuration changes,
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   577
		// and when new projects are created or loaded at startup.
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   578
		boolean refresh = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   579
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   580
		int eventType = event.getEventType();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   581
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   582
		if (eventType == CProjectDescriptionEvent.DATA_APPLIED) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   583
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   584
			synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   585
				// see if the active build config has changed
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   586
				ICProjectDescription newDesc = event
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   587
						.getNewCProjectDescription();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   588
				ICProjectDescription oldDesc = event
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   589
						.getOldCProjectDescription();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   590
				if (oldDesc != null && newDesc != null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   591
					String newConfigName = newDesc.getActiveConfiguration()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   592
							.getName();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   593
					String oldConfigName = oldDesc.getActiveConfiguration()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   594
							.getName();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   595
					if (!newConfigName.equals(oldConfigName)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   596
						if (executablesMap.containsKey(newDesc.getProject())) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   597
							executablesMap.remove(newDesc.getProject());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   598
							refresh = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   599
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   600
							trace("Scheduling refresh because active build configuration changed");
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   601
						}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   602
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   603
				} else if (newDesc != null && oldDesc == null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   604
					// project just created
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   605
					refresh = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   606
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   607
					trace("Scheduling refresh because project "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   608
							+ newDesc.getProject().getName() + " created");
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   609
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   610
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   611
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   612
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   613
		if (refresh) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   614
			scheduleRefresh();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   615
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   616
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   617
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   618
	private List<IProject> getProjectsToCheck() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   619
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   620
		List<IProject> projects = new ArrayList<IProject>();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   621
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   622
		synchronized (executablesMap) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   623
			// look for any CDT projects not in our cache
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   624
			for (IProject project : ResourcesPlugin.getWorkspace().getRoot()
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   625
					.getProjects()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   626
				if (!executablesMap.containsKey(project)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   627
					if (CoreModel.hasCNature(project)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   628
						projects.add(project);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   629
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   630
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   631
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   632
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   633
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   634
		return projects;
37
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   635
	}
c2bce6dd59e7 add cdt_6_0_x
cawthron
parents:
diff changeset
   636
45
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   637
	private void scheduleRefresh() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   638
		trace("scheduleRefresh called at "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   639
				+ getStringFromTimestamp(System.currentTimeMillis()));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   640
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   641
		refreshJob.cancel();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   642
		refreshJob.schedule();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   643
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   644
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   645
	private IProjectExecutablesProvider getExecutablesProviderForProject(
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   646
			IProject project) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   647
		IProjectExecutablesProvider provider = executablesProviderMap
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   648
				.get(project);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   649
		if (provider == null) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   650
			// not cached yet. get the list of project natures from the
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   651
			// providers and
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   652
			// pick the one with the closest match
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   653
			try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   654
				IProjectDescription description = project.getDescription();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   655
				int mostNaturesMatched = 0;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   656
				for (IProjectExecutablesProvider exeProvider : executableProviders) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   657
					List<String> natures = exeProvider.getProjectNatures();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   658
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   659
					int naturesMatched = 0;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   660
					for (String nature : description.getNatureIds()) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   661
						if (natures.contains(nature)) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   662
							naturesMatched++;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   663
						}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   664
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   665
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   666
					if (naturesMatched > mostNaturesMatched) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   667
						provider = exeProvider;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   668
						mostNaturesMatched = naturesMatched;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   669
					}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   670
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   671
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   672
				// cache it
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   673
				executablesProviderMap.put(project, provider);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   674
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   675
			} catch (CoreException e) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   676
				e.printStackTrace();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   677
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   678
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   679
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   680
		return provider;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   681
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   682
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   683
	private void loadExecutableProviderExtensions() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   684
		executableProviders = Collections
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   685
				.synchronizedList(new ArrayList<IProjectExecutablesProvider>());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   686
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   687
		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   688
		IExtensionPoint extensionPoint = extensionRegistry
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   689
				.getExtensionPoint(CDebugCorePlugin.PLUGIN_ID
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   690
						+ ".ExecutablesProvider"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   691
		IExtension[] extensions = extensionPoint.getExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   692
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   693
		for (int i = 0; i < extensions.length; i++) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   694
			IExtension extension = extensions[i];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   695
			IConfigurationElement[] elements = extension
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   696
					.getConfigurationElements();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   697
			IConfigurationElement element = elements[0];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   698
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   699
			boolean failed = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   700
			try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   701
				Object extObject = element.createExecutableExtension("class"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   702
				if (extObject instanceof IProjectExecutablesProvider) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   703
					executableProviders
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   704
							.add((IProjectExecutablesProvider) extObject);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   705
				} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   706
					failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   707
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   708
			} catch (CoreException e) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   709
				failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   710
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   711
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   712
			if (failed) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   713
				CDebugCorePlugin
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   714
						.log("Unable to load ExecutablesProvider extension from "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   715
								+ extension.getContributor().getName());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   716
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   717
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   718
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   719
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   720
	private void loadSoureFileProviderExtensions() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   721
		sourceFileProviders = Collections
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   722
				.synchronizedList(new ArrayList<ISourceFilesProvider>());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   723
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   724
		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   725
		IExtensionPoint extensionPoint = extensionRegistry
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   726
				.getExtensionPoint(CDebugCorePlugin.PLUGIN_ID
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   727
						+ ".SourceFilesProvider"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   728
		IExtension[] extensions = extensionPoint.getExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   729
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   730
		for (int i = 0; i < extensions.length; i++) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   731
			IExtension extension = extensions[i];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   732
			IConfigurationElement[] elements = extension
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   733
					.getConfigurationElements();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   734
			IConfigurationElement element = elements[0];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   735
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   736
			boolean failed = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   737
			try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   738
				Object extObject = element.createExecutableExtension("class"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   739
				if (extObject instanceof ISourceFilesProvider) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   740
					sourceFileProviders.add((ISourceFilesProvider) extObject);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   741
				} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   742
					failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   743
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   744
			} catch (CoreException e) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   745
				failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   746
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   747
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   748
			if (failed) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   749
				CDebugCorePlugin
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   750
						.log("Unable to load SourceFilesProvider extension from "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   751
								+ extension.getContributor().getName());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   752
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   753
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   754
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   755
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   756
	private void loadSoureRemappingExtensions() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   757
		sourceFileRemappings = Collections
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   758
				.synchronizedList(new ArrayList<ISourceFileRemapping>());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   759
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   760
		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   761
		IExtensionPoint extensionPoint = extensionRegistry
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   762
				.getExtensionPoint(CDebugCorePlugin.PLUGIN_ID
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   763
						+ ".SourceRemappingProvider"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   764
		IExtension[] extensions = extensionPoint.getExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   765
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   766
		for (int i = 0; i < extensions.length; i++) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   767
			IExtension extension = extensions[i];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   768
			IConfigurationElement[] elements = extension
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   769
					.getConfigurationElements();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   770
			IConfigurationElement element = elements[0];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   771
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   772
			boolean failed = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   773
			try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   774
				Object extObject = element.createExecutableExtension("class"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   775
				if (extObject instanceof ISourceFileRemapping) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   776
					sourceFileRemappings.add((ISourceFileRemapping) extObject);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   777
				} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   778
					failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   779
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   780
			} catch (CoreException e) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   781
				failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   782
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   783
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   784
			if (failed) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   785
				CDebugCorePlugin
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   786
						.log("Unable to load SourceRemappingProvider extension from "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   787
								+ extension.getContributor().getName());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   788
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   789
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   790
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   791
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   792
	private void loadExecutableImporterExtensions() {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   793
		executableImporters = Collections
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   794
				.synchronizedList(new ArrayList<IExecutableImporter>());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   795
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   796
		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   797
		IExtensionPoint extensionPoint = extensionRegistry
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   798
				.getExtensionPoint(CDebugCorePlugin.PLUGIN_ID
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   799
						+ ".ExecutablesImporter"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   800
		IExtension[] extensions = extensionPoint.getExtensions();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   801
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   802
		for (int i = 0; i < extensions.length; i++) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   803
			IExtension extension = extensions[i];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   804
			IConfigurationElement[] elements = extension
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   805
					.getConfigurationElements();
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   806
			IConfigurationElement element = elements[0];
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   807
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   808
			boolean failed = false;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   809
			try {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   810
				Object extObject = element.createExecutableExtension("class"); //$NON-NLS-1$
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   811
				if (extObject instanceof IExecutableImporter) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   812
					executableImporters.add((IExecutableImporter) extObject);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   813
				} else {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   814
					failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   815
				}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   816
			} catch (CoreException e) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   817
				failed = true;
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   818
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   819
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   820
			if (failed) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   821
				CDebugCorePlugin
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   822
						.log("Unable to load ExecutablesImporter extension from "
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   823
								+ extension.getContributor().getName());
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   824
			}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   825
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   826
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   827
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   828
	private void trace(String msg) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   829
		if (DEBUG) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   830
			// TODO use Logger?
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   831
			System.out.println(msg);
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   832
		}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   833
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   834
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   835
	private String getStringFromTimestamp(long timestamp) {
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   836
		return DateFormat.getTimeInstance(DateFormat.MEDIUM).format(
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   837
				new Date(timestamp));
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   838
	}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   839
}
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   840
70f756c14af3 merge carbide bug 6152 from CDT 5.0 (inernal) for executables performance improvements.
timkelly
parents: 37
diff changeset
   841