1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +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

@ -100,24 +100,28 @@ public class ExecutablesManager extends PlatformObject {
if (tempDisableRefresh) {
return Status.OK_STATUS;
}
synchronized (executables) {
ArrayList<Executable> oldList = new ArrayList<Executable>(executables);
executables.clear();
ArrayList<Executable> oldList = executables;
executables = new ArrayList<Executable>();
synchronized (executableProviders) {
monitor.beginTask("Refresh Executables", executableProviders.size());
for (IExecutableProvider provider : executableProviders) {
executables.addAll(provider.getExecutables(new SubProgressMonitor(monitor, 1)));
synchronized (executableProviders) {
monitor.beginTask("Refresh Executables", executableProviders.size());
for (IExecutableProvider provider : executableProviders) {
executables.addAll(provider.getExecutables(new SubProgressMonitor(monitor, 1)));
}
monitor.done();
}
monitor.done();
}
refreshNeeded = false;
refreshNeeded = false;
synchronized (changeListeners) {
for (IExecutablesChangeListener listener : changeListeners) {
listener.executablesChanged(new ExecutablesChangeEvent(oldList, executables) {
});
synchronized (changeListeners) {
for (IExecutablesChangeListener listener : changeListeners) {
listener.executablesChanged(new ExecutablesChangeEvent(oldList, executables) {
});
}
}
}
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) {
executables.clear();
synchronized (executables) {
executables.clear();
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject[] projects = root.getProjects();
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
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())
break;
if (monitor.isCanceled())
break;
try {
if (CoreModel.hasCNature(project)) {
CModelManager manager = CModelManager.getDefault();
ICProject cproject = manager.create(project);
try {
IBinary[] binaries = cproject.getBinaryContainer().getBinaries();
for (IBinary binary : binaries) {
if (binary.isExecutable() || binary.isSharedLib()) {
IPath exePath = binary.getResource().getLocation();
if (exePath == null)
exePath = binary.getPath();
Executable exe = new Executable(exePath, project, binary.getResource());
executables.add(exe);
try {
if (CoreModel.hasCNature(project)) {
CModelManager manager = CModelManager.getDefault();
ICProject cproject = manager.create(project);
try {
IBinary[] binaries = cproject.getBinaryContainer().getBinaries();
for (IBinary binary : binaries) {
if (binary.isExecutable() || binary.isSharedLib()) {
IPath exePath = binary.getResource().getLocation();
if (exePath == null)
exePath = binary.getPath();
Executable exe = new Executable(exePath, project, binary.getResource());
executables.add(exe);
}
}
} catch (CModelException e) {
}
} catch (CModelException e) {
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
monitor.worked(1);
}
monitor.worked(1);
monitor.done();
}
monitor.done();
return executables;
}