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:
parent
2044602e4b
commit
0aa67427b4
2 changed files with 44 additions and 39 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue