1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 02:06:01 +02:00

synchronize the building of the exe's list.

This commit is contained in:
Warren Paul 2008-04-24 20:46:22 +00:00
parent 2044602e4b
commit 0aa67427b4
2 changed files with 44 additions and 39 deletions

View file

@ -101,23 +101,27 @@ public class ExecutablesManager extends PlatformObject {
return Status.OK_STATUS; return Status.OK_STATUS;
} }
ArrayList<Executable> oldList = executables; synchronized (executables) {
executables = new ArrayList<Executable>(); ArrayList<Executable> oldList = new ArrayList<Executable>(executables);
synchronized (executableProviders) { executables.clear();
monitor.beginTask("Refresh Executables", executableProviders.size());
for (IExecutableProvider provider : executableProviders) {
executables.addAll(provider.getExecutables(new SubProgressMonitor(monitor, 1)));
}
monitor.done();
}
refreshNeeded = false;
synchronized (changeListeners) { synchronized (executableProviders) {
for (IExecutablesChangeListener listener : changeListeners) { monitor.beginTask("Refresh Executables", executableProviders.size());
listener.executablesChanged(new ExecutablesChangeEvent(oldList, executables) { for (IExecutableProvider provider : executableProviders) {
}); executables.addAll(provider.getExecutables(new SubProgressMonitor(monitor, 1)));
}
monitor.done();
}
refreshNeeded = false;
synchronized (changeListeners) {
for (IExecutablesChangeListener listener : changeListeners) {
listener.executablesChanged(new ExecutablesChangeEvent(oldList, executables) {
});
}
} }
} }
return monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS; return monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS;
} }

View file

@ -123,43 +123,44 @@ public class StandardExecutableProvider implements IResourceChangeListener, ICPr
} }
public Collection<Executable> getExecutables(IProgressMonitor monitor) { public Collection<Executable> getExecutables(IProgressMonitor monitor) {
executables.clear(); synchronized (executables) {
executables.clear();
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject[] projects = root.getProjects(); IProject[] projects = root.getProjects();
monitor.beginTask("Checking C/C++ Projects", projects.length); monitor.beginTask("Checking C/C++ Projects", projects.length);
for (IProject project : projects) { for (IProject project : projects) {
if (monitor.isCanceled()) if (monitor.isCanceled())
break; break;
try { try {
if (CoreModel.hasCNature(project)) { if (CoreModel.hasCNature(project)) {
CModelManager manager = CModelManager.getDefault(); CModelManager manager = CModelManager.getDefault();
ICProject cproject = manager.create(project); ICProject cproject = manager.create(project);
try { try {
IBinary[] binaries = cproject.getBinaryContainer().getBinaries(); IBinary[] binaries = cproject.getBinaryContainer().getBinaries();
for (IBinary binary : binaries) { for (IBinary binary : binaries) {
if (binary.isExecutable() || binary.isSharedLib()) { if (binary.isExecutable() || binary.isSharedLib()) {
IPath exePath = binary.getResource().getLocation(); IPath exePath = binary.getResource().getLocation();
if (exePath == null) if (exePath == null)
exePath = binary.getPath(); exePath = binary.getPath();
Executable exe = new Executable(exePath, project, binary.getResource()); Executable exe = new Executable(exePath, project, binary.getResource());
executables.add(exe); executables.add(exe);
}
} }
} catch (CModelException e) {
} }
} catch (CModelException e) {
} }
} catch (Exception e) {
e.printStackTrace();
} }
} catch (Exception e) { monitor.worked(1);
e.printStackTrace();
} }
monitor.worked(1); monitor.done();
} }
monitor.done();
return executables; return executables;
} }