From 84c89baed2d5075ab2dc5a5810d04c445f608a68 Mon Sep 17 00:00:00 2001 From: David Inglis Date: Tue, 6 Apr 2004 17:57:10 +0000 Subject: [PATCH] fixed syncing of binary runner and getBinaries() --- core/org.eclipse.cdt.core/ChangeLog | 6 + .../cdt/internal/core/model/BinaryRunner.java | 117 +++++------------- 2 files changed, 40 insertions(+), 83 deletions(-) diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 652f5082375..eb0abd01723 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,9 @@ +2004-04-06 David Inglis + + Fixed up syncing of binary runner and ::getBinaries() + + * model/org/eclipse/cdt/internal/core/model/BinaryRunner.java + 2004-04-04 Alain Magloire More support for external headers. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryRunner.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryRunner.java index 059ee53c795..12e749402da 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryRunner.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryRunner.java @@ -1,8 +1,7 @@ package org.eclipse.cdt.internal.core.model; /* - * (c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. + * (c) Copyright QNX Software Systems Ltd. 2002. All Rights Reserved. */ import org.eclipse.cdt.core.CCorePlugin; @@ -19,76 +18,64 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.jobs.Job; -public class BinaryRunner implements IJobChangeListener { - IProject project; +public class BinaryRunner { + ICProject cproject; Job runner; - ArchiveContainer vlib; - BinaryContainer vbin; - boolean done = false; public BinaryRunner(IProject prj) { - project = prj; - cproject = CModelManager.getDefault().create(project); + cproject = CModelManager.getDefault().create(prj); } - + public void start() { - String taskName = CCorePlugin.getResourceString("CoreModel.BinaryRunner.Binary_Search_Thread"); //$NON-NLS-1 - Job runner = new Job(taskName) { - /* (non-Javadoc) + String taskName = CCorePlugin.getResourceString("CoreModel.BinaryRunner.Binary_Search_Thread"); //$NON-NLS-1$ + runner = new Job(taskName) { + + /* + * (non-Javadoc) + * * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) */ protected IStatus run(IProgressMonitor monitor) { - if (cproject == null || Thread.currentThread().isInterrupted()) { + if (cproject == null || monitor.isCanceled()) { return Status.CANCEL_STATUS; } - vbin = (BinaryContainer)cproject.getBinaryContainer(); - vlib = (ArchiveContainer)cproject.getArchiveContainer(); + BinaryContainer vbin = (BinaryContainer) cproject.getBinaryContainer(); + ArchiveContainer vlib = (ArchiveContainer) cproject.getArchiveContainer(); vlib.removeChildren(); vbin.removeChildren(); try { - project.accept(new Visitor(BinaryRunner.this)); + cproject.getProject().accept(new Visitor(BinaryRunner.this, monitor)); } catch (CoreException e) { - //e.printStackTrace(); - } catch (Exception e) { - // What is wrong ? - e.printStackTrace(); + return e.getStatus(); } - if (!Thread.currentThread().isInterrupted()) { + if (monitor.isCanceled()) { fireEvents(cproject, vbin); fireEvents(cproject, vlib); } - // Tell the listeners we are done. - synchronized(BinaryRunner.this) { - BinaryRunner.this.notifyAll(); - BinaryRunner.this.runner = null; - } return Status.OK_STATUS; } }; runner.schedule(); - - } + } /** * wrap the wait call and the interrupteException. */ - public synchronized void waitIfRunning() { - while (runner != null && !done) { + public void waitIfRunning() { + if (runner != null) { try { - wait(); + runner.join(); } catch (InterruptedException e) { } } } - + public void stop() { - if ( runner != null && !done) { + if (runner != null && runner.getState() == Job.RUNNING) { runner.cancel(); } } @@ -98,7 +85,7 @@ public class BinaryRunner implements IJobChangeListener { ICElement[] children = container.getChildren(); if (children.length > 0) { CModelManager factory = CModelManager.getDefault(); - ICElement root = (ICModel)factory.getCModel(); + ICElement root = (ICModel) factory.getCModel(); CElementDelta cdelta = new CElementDelta(root); cdelta.added(cproject); cdelta.added(container); @@ -124,20 +111,23 @@ public class BinaryRunner implements IJobChangeListener { } class Visitor implements IResourceVisitor { - BinaryRunner runner; - public Visitor (BinaryRunner r) { - runner = r; + private BinaryRunner vRunner; + private IProgressMonitor vMonitor; + + public Visitor(BinaryRunner r, IProgressMonitor monitor) { + vRunner = r; + vMonitor = monitor; } public boolean visit(IResource res) throws CoreException { - if (Thread.currentThread().isInterrupted()) { + if (vMonitor.isCanceled()) { return false; } if (cproject.isOnOutputEntry(res)) { if (res instanceof IFile) { - if (runner != null) { - runner.addChildIfBinary((IFile)res); + if (vRunner != null) { + vRunner.addChildIfBinary((IFile) res); } return false; } @@ -145,43 +135,4 @@ public class BinaryRunner implements IJobChangeListener { return true; } } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.IJobChangeListener#aboutToRun(org.eclipse.core.runtime.jobs.IJobChangeEvent) - */ - public void aboutToRun(IJobChangeEvent event) { - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.IJobChangeListener#awake(org.eclipse.core.runtime.jobs.IJobChangeEvent) - */ - public void awake(IJobChangeEvent event) { - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.IJobChangeListener#done(org.eclipse.core.runtime.jobs.IJobChangeEvent) - */ - public void done(IJobChangeEvent event) { - done = true; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.IJobChangeListener#running(org.eclipse.core.runtime.jobs.IJobChangeEvent) - */ - public void running(IJobChangeEvent event) { - done = false; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.IJobChangeListener#scheduled(org.eclipse.core.runtime.jobs.IJobChangeEvent) - */ - public void scheduled(IJobChangeEvent event) { - done = false; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.IJobChangeListener#sleeping(org.eclipse.core.runtime.jobs.IJobChangeEvent) - */ - public void sleeping(IJobChangeEvent event) { - } -} +} \ No newline at end of file