1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

- update progress monitor to show complete build command

- update progress monitor to normailize over each build.
This commit is contained in:
David Inglis 2004-01-13 18:53:52 +00:00
parent becb0a5d20
commit 44e85901c9
5 changed files with 106 additions and 73 deletions

View file

@ -37,6 +37,7 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor;
public class MakeBuilder extends ACBuilder { public class MakeBuilder extends ACBuilder {
@ -129,9 +130,6 @@ public class MakeBuilder extends ACBuilder {
if (targets.length != 0 && targets[targets.length - 1].equals("clean")) //$NON-NLS-1$ if (targets.length != 0 && targets[targets.length - 1].equals("clean")) //$NON-NLS-1$
isClean = true; isClean = true;
// Before launching give visual cues via the monitor
monitor.subTask(MakeCorePlugin.getResourceString("MakeBuilder.Invoking_Command") + buildCommand.toString()); //$NON-NLS-1$
String errMsg = null; String errMsg = null;
CommandLauncher launcher = new CommandLauncher(); CommandLauncher launcher = new CommandLauncher();
// Print the command for visual interaction. // Print the command for visual interaction.
@ -168,14 +166,17 @@ public class MakeBuilder extends ACBuilder {
System.arraycopy(targets, 0, buildArguments, newArgs.length, targets.length); System.arraycopy(targets, 0, buildArguments, newArgs.length, targets.length);
} }
} }
if (true) {
// MakeRecon recon = new MakeRecon(buildCommand, buildArguments, env, workingDirectory, makeMonitor, cos); // MakeRecon recon = new MakeRecon(buildCommand, buildArguments, env, workingDirectory, makeMonitor, cos);
// recon.invokeMakeRecon(); // recon.invokeMakeRecon();
// cos = recon; // cos = recon;
cos = new StreamMonitor(new SubProgressMonitor(monitor, 100), cos); QualifiedName qName = new QualifiedName(MakeCorePlugin.getUniqueIdentifier(), "progressMonitor");
Integer last = (Integer)getProject().getSessionProperty(qName);
if (last == null) {
last = new Integer(100);
} }
StreamMonitor streamMon = new StreamMonitor(new SubProgressMonitor(monitor, 100), cos, last.intValue());
ErrorParserManager epm = new ErrorParserManager(getProject(), this, info.getErrorParsers()); ErrorParserManager epm = new ErrorParserManager(getProject(), this, info.getErrorParsers());
epm.setOutputStream(cos); epm.setOutputStream(streamMon);
OutputStream stdout = epm.getOutputStream(); OutputStream stdout = epm.getOutputStream();
OutputStream stderr = epm.getOutputStream(); OutputStream stderr = epm.getOutputStream();
Process p = launcher.execute(buildCommand, buildArguments, env, workingDirectory); Process p = launcher.execute(buildCommand, buildArguments, env, workingDirectory);
@ -186,6 +187,8 @@ public class MakeBuilder extends ACBuilder {
p.getOutputStream().close(); p.getOutputStream().close();
} catch (IOException e) { } catch (IOException e) {
} }
// Before launching give visual cues via the monitor
monitor.subTask(MakeCorePlugin.getResourceString("MakeBuilder.Invoking_Command") + launcher.getCommandLine()); //$NON-NLS-1$
if (launcher.waitAndRead(stdout, stderr, new SubProgressMonitor(monitor, 0)) if (launcher.waitAndRead(stdout, stderr, new SubProgressMonitor(monitor, 0))
!= CommandLauncher.OK) != CommandLauncher.OK)
errMsg = launcher.getErrorMessage(); errMsg = launcher.getErrorMessage();
@ -201,7 +204,7 @@ public class MakeBuilder extends ACBuilder {
} else { } else {
errMsg = launcher.getErrorMessage(); errMsg = launcher.getErrorMessage();
} }
// makeMonitor.done(); getProject().setSessionProperty(qName, !monitor.isCanceled() && !isClean ? new Integer(streamMon.getWorkDone()) : null);
if (errMsg != null) { if (errMsg != null) {
StringBuffer buf = new StringBuffer(buildCommand.toString() + " "); //$NON-NLS-1$ StringBuffer buf = new StringBuffer(buildCommand.toString() + " "); //$NON-NLS-1$

View file

@ -52,7 +52,7 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
private static MakeScannerProvider defaultProvider; private static MakeScannerProvider defaultProvider;
public static MakeScannerProvider getDefault() { public static MakeScannerProvider getDefault() {
if ( defaultProvider == null) { if (defaultProvider == null) {
defaultProvider = new MakeScannerProvider(); defaultProvider = new MakeScannerProvider();
} }
return defaultProvider; return defaultProvider;
@ -60,11 +60,12 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
public MakeScannerInfo getMakeScannerInfo(IProject project, boolean cacheInfo) throws CoreException { public MakeScannerInfo getMakeScannerInfo(IProject project, boolean cacheInfo) throws CoreException {
MakeScannerInfo scannerInfo = null; MakeScannerInfo scannerInfo = null;
// See if there's already one associated with the resource for this session // See if there's already one associated with the resource for this
// session
scannerInfo = (MakeScannerInfo)project.getSessionProperty(scannerInfoProperty); scannerInfo = (MakeScannerInfo)project.getSessionProperty(scannerInfoProperty);
// Try to load one for the project // Try to load one for the project
if (scannerInfo == null ) { if (scannerInfo == null) {
scannerInfo = loadScannerInfo(project); scannerInfo = loadScannerInfo(project);
} }
@ -98,12 +99,14 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
} }
ListIterator iter = listeners.listIterator(); ListIterator iter = listeners.listIterator();
while (iter.hasNext()) { while (iter.hasNext()) {
((IScannerInfoChangeListener)iter.next()).changeNotification(project, (IScannerInfo)info); ((IScannerInfoChangeListener)iter.next()).changeNotification(project, info);
} }
} }
/* (non-Javadoc) /*
* (non-Javadoc)
*
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#getScannerInformation(org.eclipse.core.resources.IResource) * @see org.eclipse.cdt.core.parser.IScannerInfoProvider#getScannerInformation(org.eclipse.core.resources.IResource)
*/ */
public IScannerInfo getScannerInformation(IResource resource) { public IScannerInfo getScannerInformation(IResource resource) {
@ -117,8 +120,8 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
/* /*
* Loads the build file and parses the nodes for build information. The * Loads the build file and parses the nodes for build information. The
* information is then associated with the resource for the duration of * information is then associated with the resource for the duration of the
* the session. * session.
*/ */
private MakeScannerInfo loadScannerInfo(IProject project) throws CoreException { private MakeScannerInfo loadScannerInfo(IProject project) throws CoreException {
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project); ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project);
@ -143,11 +146,11 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
/** /**
* The build model manager for standard builds only caches the build * The build model manager for standard builds only caches the build
* information for a resource on a per-session basis. This method * information for a resource on a per-session basis. This method allows
* allows clients of the build model manager to programmatically * clients of the build model manager to programmatically remove the
* remove the association between the resource and the information * association between the resource and the information while the reource
* while the reource is still open or in the workspace. The Eclipse core * is still open or in the workspace. The Eclipse core will take care of
* will take care of removing it if a resource is closed or deleted. * removing it if a resource is closed or deleted.
* *
* @param resource * @param resource
*/ */
@ -159,18 +162,19 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
} }
/** /**
* Persists build-specific information in the build file. Build * Persists build-specific information in the build file. Build information
* information for standard make projects consists of preprocessor * for standard make projects consists of preprocessor symbols and includes
* symbols and includes paths. Other project-related information is * paths. Other project-related information is stored in the persistent
* stored in the persistent properties of the project. * properties of the project.
* *
* @param project * @param project
*/ */
static void updateScannerInfo(MakeScannerInfo scannerInfo) throws CoreException { static void updateScannerInfo(MakeScannerInfo scannerInfo) throws CoreException {
IProject project = scannerInfo.getProject(); IProject project = scannerInfo.getProject();
// See if there's already one associated with the resource for this session // See if there's already one associated with the resource for this
if ( project.getSessionProperty(scannerInfoProperty) != null ) { // session
if (project.getSessionProperty(scannerInfoProperty) != null) {
project.setSessionProperty(scannerInfoProperty, scannerInfo); project.setSessionProperty(scannerInfoProperty, scannerInfo);
} }
@ -208,8 +212,11 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
notifyInfoListeners(project, scannerInfo); notifyInfoListeners(project, scannerInfo);
} }
/* (non-Javadoc) /*
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#subscribe(org.eclipse.core.resources.IResource, org.eclipse.cdt.core.parser.IScannerInfoChangeListener) * (non-Javadoc)
*
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#subscribe(org.eclipse.core.resources.IResource,
* org.eclipse.cdt.core.parser.IScannerInfoChangeListener)
*/ */
public synchronized void subscribe(IResource resource, IScannerInfoChangeListener listener) { public synchronized void subscribe(IResource resource, IScannerInfoChangeListener listener) {
IResource project = null; IResource project = null;
@ -234,8 +241,11 @@ public class MakeScannerProvider extends AbstractCExtension implements IScannerI
} }
} }
/* (non-Javadoc) /*
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#unsubscribe(org.eclipse.core.resources.IResource, org.eclipse.cdt.core.parser.IScannerInfoChangeListener) * (non-Javadoc)
*
* @see org.eclipse.cdt.core.parser.IScannerInfoProvider#unsubscribe(org.eclipse.core.resources.IResource,
* org.eclipse.cdt.core.parser.IScannerInfoChangeListener)
*/ */
public synchronized void unsubscribe(IResource resource, IScannerInfoChangeListener listener) { public synchronized void unsubscribe(IResource resource, IScannerInfoChangeListener listener) {
IResource project = null; IResource project = null;

View file

@ -70,7 +70,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.add_temporary_target"), null)); //$NON-NLS-1$ throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.add_temporary_target"), null)); //$NON-NLS-1$
} }
IProject project = container.getProject(); IProject project = container.getProject();
ProjectTargets projectTargets = (ProjectTargets) projectMap.get(project); ProjectTargets projectTargets = (ProjectTargets)projectMap.get(project);
if (projectTargets == null) { if (projectTargets == null) {
projectTargets = readTargets(project); projectTargets = readTargets(project);
} }
@ -82,7 +82,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
public void removeTarget(IMakeTarget target) throws CoreException { public void removeTarget(IMakeTarget target) throws CoreException {
IProject project = target.getContainer().getProject(); IProject project = target.getContainer().getProject();
ProjectTargets projectTargets = (ProjectTargets) projectMap.get(project); ProjectTargets projectTargets = (ProjectTargets)projectMap.get(project);
if (projectTargets == null) { if (projectTargets == null) {
projectTargets = readTargets(project); projectTargets = readTargets(project);
} }
@ -93,20 +93,20 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
public void renameTarget(IMakeTarget target, String name) throws CoreException { public void renameTarget(IMakeTarget target, String name) throws CoreException {
IProject project = target.getContainer().getProject(); IProject project = target.getContainer().getProject();
ProjectTargets projectTargets = (ProjectTargets) projectMap.get(project); ProjectTargets projectTargets = (ProjectTargets)projectMap.get(project);
if (projectTargets == null) { if (projectTargets == null) {
projectTargets = readTargets(project); projectTargets = readTargets(project);
} }
if (!projectTargets.contains((MakeTarget) target)) { if (!projectTargets.contains((MakeTarget)target)) {
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$ throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$
} }
((MakeTarget) target).setName(name); ((MakeTarget)target).setName(name);
writeTargets(projectTargets); writeTargets(projectTargets);
notifyListeners(new MakeTargetEvent(this, MakeTargetEvent.TARGET_CHANGED, target)); notifyListeners(new MakeTargetEvent(this, MakeTargetEvent.TARGET_CHANGED, target));
} }
public IMakeTarget[] getTargets(IContainer container) throws CoreException { public IMakeTarget[] getTargets(IContainer container) throws CoreException {
ProjectTargets projectTargets = (ProjectTargets) projectMap.get(container.getProject()); ProjectTargets projectTargets = (ProjectTargets)projectMap.get(container.getProject());
if (projectTargets == null) { if (projectTargets == null) {
projectTargets = readTargets(container.getProject()); projectTargets = readTargets(container.getProject());
} }
@ -114,7 +114,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} }
public IMakeTarget findTarget(IContainer container, String name) { public IMakeTarget findTarget(IContainer container, String name) {
ProjectTargets projectTargets = (ProjectTargets) projectMap.get(container.getProject()); ProjectTargets projectTargets = (ProjectTargets)projectMap.get(container.getProject());
if (projectTargets == null) { if (projectTargets == null) {
projectTargets = readTargets(container.getProject()); projectTargets = readTargets(container.getProject());
} }
@ -122,7 +122,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} }
public IProject[] getTargetBuilderProjects() throws CoreException { public IProject[] getTargetBuilderProjects() throws CoreException {
return (IProject[]) fProjects.toArray(new IProject[fProjects.size()]); return (IProject[])fProjects.toArray(new IProject[fProjects.size()]);
} }
public String[] getTargetBuilders(IProject project) { public String[] getTargetBuilders(IProject project) {
@ -134,13 +134,13 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
for (int i = 0; i < builder.length; i++) { for (int i = 0; i < builder.length; i++) {
Iterator entries = builderMap.entrySet().iterator(); Iterator entries = builderMap.entrySet().iterator();
while (entries.hasNext()) { while (entries.hasNext()) {
Map.Entry entry = (Entry) entries.next(); Map.Entry entry = (Entry)entries.next();
if (entry.getValue().equals(builder[i].getBuilderName())) { if (entry.getValue().equals(builder[i].getBuilderName())) {
ids.add(entry.getKey()); ids.add(entry.getKey());
} }
} }
} }
return (String[]) ids.toArray(new String[ids.size()]); return (String[])ids.toArray(new String[ids.size()]);
} catch (CoreException e) { } catch (CoreException e) {
} }
} }
@ -187,7 +187,6 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
MakeCorePlugin.log(e); MakeCorePlugin.log(e);
} }
} }
} }
class MakeTargetVisitor implements IResourceDeltaVisitor { class MakeTargetVisitor implements IResourceDeltaVisitor {
@ -200,7 +199,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} }
IResource resource = delta.getResource(); IResource resource = delta.getResource();
if (resource.getType() == IResource.PROJECT) { if (resource.getType() == IResource.PROJECT) {
IProject project = (IProject) resource; IProject project = (IProject)resource;
int flags = delta.getFlags(); int flags = delta.getFlags();
int deltaKind = delta.getKind(); int deltaKind = delta.getKind();
if (deltaKind == IResourceDelta.ADDED) { if (deltaKind == IResourceDelta.ADDED) {
@ -210,6 +209,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} }
} else if (deltaKind == IResourceDelta.REMOVED) { } else if (deltaKind == IResourceDelta.REMOVED) {
if (fProjects.contains(project)) { if (fProjects.contains(project)) {
deleteTargets(project);
fProjects.remove(project); fProjects.remove(project);
notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project)); notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project));
} }
@ -217,6 +217,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
if (0 != (flags & IResourceDelta.DESCRIPTION)) { if (0 != (flags & IResourceDelta.DESCRIPTION)) {
if (fProjects.contains(project) && !hasTargetBuilder(project)) { if (fProjects.contains(project) && !hasTargetBuilder(project)) {
fProjects.remove(project); fProjects.remove(project);
projectMap.remove(project);
notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project)); notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project));
} else if (!fProjects.contains(project) && hasTargetBuilder(project)) { } else if (!fProjects.contains(project) && hasTargetBuilder(project)) {
fProjects.add(project); fProjects.add(project);
@ -226,6 +227,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
if (0 != (flags & IResourceDelta.OPEN)) { if (0 != (flags & IResourceDelta.OPEN)) {
if (!project.isOpen() && fProjects.contains(project)) { if (!project.isOpen() && fProjects.contains(project)) {
fProjects.remove(project); fProjects.remove(project);
projectMap.remove(project);
notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project)); notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project));
} else if (project.isOpen() && hasTargetBuilder(project) && !fProjects.contains(project)) { } else if (project.isOpen() && hasTargetBuilder(project) && !fProjects.contains(project)) {
fProjects.add(project); fProjects.add(project);
@ -240,7 +242,9 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} }
protected void writeTargets(ProjectTargets projectTargets) throws CoreException { protected void writeTargets(ProjectTargets projectTargets) throws CoreException {
IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(projectTargets.getProject().getName()).addFileExtension(TARGETS_EXT); IPath targetFilePath =
MakeCorePlugin.getDefault().getStateLocation().append(projectTargets.getProject().getName()).addFileExtension(
TARGETS_EXT);
File targetFile = targetFilePath.toFile(); File targetFile = targetFilePath.toFile();
try { try {
FileOutputStream file = new FileOutputStream(targetFile); FileOutputStream file = new FileOutputStream(targetFile);
@ -249,11 +253,11 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
throw new CoreException( throw new CoreException(
new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, "Error writing target file", e)); new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, "Error writing target file", e));
} }
} }
protected ProjectTargets readTargets(IProject project) { protected ProjectTargets readTargets(IProject project) {
IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(project.getName()).addFileExtension(TARGETS_EXT); IPath targetFilePath =
MakeCorePlugin.getDefault().getStateLocation().append(project.getName()).addFileExtension(TARGETS_EXT);
File targetFile = targetFilePath.toFile(); File targetFile = targetFilePath.toFile();
ProjectTargets projectTargets = null; ProjectTargets projectTargets = null;
if (targetFile.exists()) { if (targetFile.exists()) {
@ -262,12 +266,21 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
} }
} }
if ( projectTargets == null) { if (projectTargets == null) {
projectTargets = new ProjectTargets(this, project); projectTargets = new ProjectTargets(this, project);
} }
projectMap.put(project, projectTargets); projectMap.put(project, projectTargets);
return projectTargets; return projectTargets;
}
protected void deleteTargets(IProject project) {
IPath targetFilePath =
MakeCorePlugin.getDefault().getStateLocation().append(project.getName()).addFileExtension(TARGETS_EXT);
File targetFile = targetFilePath.toFile();
if (targetFile.exists()) {
targetFile.delete();
}
projectMap.remove(project);
} }
protected void initializeBuilders() { protected void initializeBuilders() {
@ -289,7 +302,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
protected void notifyListeners(MakeTargetEvent event) { protected void notifyListeners(MakeTargetEvent event) {
Object[] list = listeners.getListeners(); Object[] list = listeners.getListeners();
for (int i = 0; i < list.length; i++) { for (int i = 0; i < list.length; i++) {
((IMakeTargetListener) list[i]).targetChanged(event); ((IMakeTargetListener)list[i]).targetChanged(event);
} }
} }
@ -302,6 +315,6 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
} }
public String getBuilderID(String targetBuilderID) { public String getBuilderID(String targetBuilderID) {
return (String) builderMap.get(targetBuilderID); return (String)builderMap.get(targetBuilderID);
} }
} }

View file

@ -131,19 +131,19 @@ public class ProjectTargets {
} }
public IMakeTarget[] get(IContainer container) { public IMakeTarget[] get(IContainer container) {
ArrayList list = (ArrayList) targetMap.get(container); ArrayList list = (ArrayList)targetMap.get(container);
if (list != null) { if (list != null) {
return (IMakeTarget[]) list.toArray(new IMakeTarget[list.size()]); return (IMakeTarget[])list.toArray(new IMakeTarget[list.size()]);
} }
return new IMakeTarget[0]; return new IMakeTarget[0];
} }
public IMakeTarget findTarget(IContainer container, String name) { public IMakeTarget findTarget(IContainer container, String name) {
ArrayList list = (ArrayList) targetMap.get(container); ArrayList list = (ArrayList)targetMap.get(container);
if (list != null) { if (list != null) {
Iterator targets = list.iterator(); Iterator targets = list.iterator();
while (targets.hasNext()) { while (targets.hasNext()) {
IMakeTarget target = (IMakeTarget) targets.next(); IMakeTarget target = (IMakeTarget)targets.next();
if (target.getName().equals(name)) { if (target.getName().equals(name)) {
return target; return target;
} }
@ -153,7 +153,7 @@ public class ProjectTargets {
} }
public void add(MakeTarget target) throws CoreException { public void add(MakeTarget target) throws CoreException {
ArrayList list = (ArrayList) targetMap.get(target.getContainer()); ArrayList list = (ArrayList)targetMap.get(target.getContainer());
if (list != null && list.contains(target)) { if (list != null && list.contains(target)) {
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$ throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$
} }
@ -165,7 +165,7 @@ public class ProjectTargets {
} }
public boolean contains(MakeTarget target) { public boolean contains(MakeTarget target) {
ArrayList list = (ArrayList) targetMap.get(target.getContainer()); ArrayList list = (ArrayList)targetMap.get(target.getContainer());
if (list != null && list.contains(target)) { if (list != null && list.contains(target)) {
return true; return true;
} }
@ -173,7 +173,7 @@ public class ProjectTargets {
} }
public void remove(IMakeTarget target) { public void remove(IMakeTarget target) {
ArrayList list = (ArrayList) targetMap.get(target.getContainer()); ArrayList list = (ArrayList)targetMap.get(target.getContainer());
if (list == null || !list.contains(target)) { if (list == null || !list.contains(target)) {
return; return;
} }
@ -193,9 +193,9 @@ public class ProjectTargets {
doc.appendChild(targetsRootElement); doc.appendChild(targetsRootElement);
Iterator container = targetMap.entrySet().iterator(); Iterator container = targetMap.entrySet().iterator();
while (container.hasNext()) { while (container.hasNext()) {
List targets = (List) ((Map.Entry) container.next()).getValue(); List targets = (List) ((Map.Entry)container.next()).getValue();
for (int i = 0; i < targets.size(); i++) { for (int i = 0; i < targets.size(); i++) {
MakeTarget target = (MakeTarget) targets.get(i); MakeTarget target = (MakeTarget)targets.get(i);
targetsRootElement.appendChild(createTargetElement(doc, target)); targetsRootElement.appendChild(createTargetElement(doc, target));
} }
} }
@ -239,5 +239,4 @@ public class ProjectTargets {
SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(new OutputStreamWriter(output, "UTF8"), format); SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(new OutputStreamWriter(output, "UTF8"), format);
serializer.asDOMSerializer().serialize(doc); serializer.asDOMSerializer().serialize(doc);
} }
} }

View file

@ -19,28 +19,32 @@ public class StreamMonitor extends OutputStream {
IProgressMonitor monitor; IProgressMonitor monitor;
OutputStream console; OutputStream console;
public static final int TOTAL_WORK = 10; public final int fTotalWork;
private int halfWay = TOTAL_WORK / 2; private int halfWay;
private int currentIncrement = 1; private int currentIncrement = 2;
private int nextProgress = currentIncrement; private int nextProgress = currentIncrement;
private int worked = 0; private int worked = 0;
public StreamMonitor(IProgressMonitor mon, OutputStream cos) { public StreamMonitor(IProgressMonitor mon, OutputStream cos, int totalWork) {
monitor = mon; monitor = mon;
console = cos; console = cos;
monitor.beginTask("", TOTAL_WORK); fTotalWork = totalWork;
halfWay = fTotalWork / 2;
monitor.beginTask("", fTotalWork);
} }
private void progressUpdate() { private void progressUpdate() {
if (--nextProgress <= 0) { if (--nextProgress <= 0) {
//we have exhausted the current increment, so report progress //we have exhausted the current increment, so report progress
if (fTotalWork > worked) {
monitor.worked(1); monitor.worked(1);
}
worked++; worked++;
if (worked >= halfWay) { if (worked >= halfWay) {
//we have passed the current halfway point, so double the //we have passed the current halfway point, so double the
//increment and reset the halfway point. //increment and reset the halfway point.
currentIncrement *= 2; currentIncrement *= 2;
halfWay += (TOTAL_WORK - halfWay) / 2; halfWay += (fTotalWork - halfWay) / 2;
} }
//reset the progress counter to another full increment //reset the progress counter to another full increment
nextProgress = currentIncrement; nextProgress = currentIncrement;
@ -91,4 +95,8 @@ public class StreamMonitor extends OutputStream {
} }
progressUpdate(); progressUpdate();
} }
public int getWorkDone() {
return worked;
}
} }