Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 258352 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java (-85 / +52 lines)
Lines 31-36 Link Here
31
import org.eclipse.core.runtime.IProgressMonitor;
31
import org.eclipse.core.runtime.IProgressMonitor;
32
import org.eclipse.core.runtime.IProgressMonitorWithBlocking;
32
import org.eclipse.core.runtime.IProgressMonitorWithBlocking;
33
import org.eclipse.core.runtime.IStatus;
33
import org.eclipse.core.runtime.IStatus;
34
import org.eclipse.core.runtime.ListenerList;
34
import org.eclipse.core.runtime.NullProgressMonitor;
35
import org.eclipse.core.runtime.NullProgressMonitor;
35
import org.eclipse.core.runtime.OperationCanceledException;
36
import org.eclipse.core.runtime.OperationCanceledException;
36
import org.eclipse.core.runtime.QualifiedName;
37
import org.eclipse.core.runtime.QualifiedName;
Lines 96-105 Link Here
96
97
97
	final Object familyKey = new Object();
98
	final Object familyKey = new Object();
98
99
99
	private IJobProgressManagerListener[] listeners = new IJobProgressManagerListener[0];
100
	//	list of IJobProgressManagerListener
100
101
	private ListenerList listeners = new ListenerList();
101
	final Object listenersKey = new Object();
102
	
102
103
	IJobChangeListener changeListener;
103
	IJobChangeListener changeListener;
104
104
105
	static final String PROGRESS_VIEW_NAME = "org.eclipse.ui.views.ProgressView"; //$NON-NLS-1$
105
	static final String PROGRESS_VIEW_NAME = "org.eclipse.ui.views.ProgressView"; //$NON-NLS-1$
Lines 535-554 Link Here
535
			sleepGroup(group,info);
535
			sleepGroup(group,info);
536
		}
536
		}
537
537
538
		synchronized (listenersKey) {
538
		Object[] listenersArray = listeners.getListeners();
539
			for (int i = 0; i < listeners.length; i++) {
539
		for (int i = 0; i < listenersArray.length; i++) {
540
				IJobProgressManagerListener listener = listeners[i];
540
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
541
				// Is this one the user never sees?
541
			// Is this one the user never sees?
542
				if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
542
			if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
543
					continue;
543
				continue;
544
				if (listener.showsDebug())
544
			if (listener.showsDebug())
545
					listener.refreshJobInfo(info);
545
				listener.refreshJobInfo(info);
546
				else
546
			else
547
					listener.removeJob(info);
547
				listener.removeJob(info);
548
548
549
			}
550
		}
549
		}
551
552
	}
550
	}
553
551
554
	/**
552
	/**
Lines 556-575 Link Here
556
	 * @param group
554
	 * @param group
557
	 */
555
	 */
558
	private void sleepGroup(GroupInfo group, JobInfo info) {
556
	private void sleepGroup(GroupInfo group, JobInfo info) {
559
		synchronized (listenersKey) {
557
		Object[] listenersArray = listeners.getListeners();
560
			for (int i = 0; i < listeners.length; i++) {
558
		for (int i = 0; i < listenersArray.length; i++) {
561
				
559
			
562
				IJobProgressManagerListener listener = listeners[i];
560
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
563
				if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
561
			if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
564
					continue;
562
				continue;
565
		
563
	
566
				if (listener.showsDebug() || group.isActive())
564
			if (listener.showsDebug() || group.isActive())
567
					listener.refreshGroup(group);
565
				listener.refreshGroup(group);
568
				else
566
			else
569
					listener.removeGroup(group);
567
				listener.removeGroup(group);
570
			}
571
		}
568
		}
572
		
573
	}
569
	}
574
570
575
	/**
571
	/**
Lines 641-657 Link Here
641
	 * @param listener
637
	 * @param listener
642
	 */
638
	 */
643
	void addListener(IJobProgressManagerListener listener) {
639
	void addListener(IJobProgressManagerListener listener) {
644
640
		listeners.add(listener);
645
		synchronized (listenersKey) {
646
			ArrayList newListeners = new ArrayList(listeners.length + 1);
647
			for (int i = 0; i < listeners.length; i++) {
648
				newListeners.add(listeners[i]);
649
			}
650
			newListeners.add(listener);
651
			listeners = new IJobProgressManagerListener[newListeners.size()];
652
			newListeners.toArray(listeners);
653
		}
654
655
	}
641
	}
656
642
657
	/**
643
	/**
Lines 661-677 Link Here
661
	 * @param listener
647
	 * @param listener
662
	 */
648
	 */
663
	void removeListener(IJobProgressManagerListener listener) {
649
	void removeListener(IJobProgressManagerListener listener) {
664
		synchronized (listenersKey) {
650
		listeners.remove(listener);
665
			ArrayList newListeners = new ArrayList();
666
			for (int i = 0; i < listeners.length; i++) {
667
				if (listeners[i].equals(listener)) {
668
					continue;
669
				}
670
				newListeners.add(listeners[i]);
671
			}
672
			listeners = new IJobProgressManagerListener[newListeners.size()];
673
			newListeners.toArray(listeners);
674
		}
675
	}
651
	}
676
652
677
	/**
653
	/**
Lines 711-722 Link Here
711
			refreshGroup(group);
687
			refreshGroup(group);
712
		}
688
		}
713
689
714
		synchronized (listenersKey) {
690
		Object[] listenersArray = listeners.getListeners();
715
			for (int i = 0; i < listeners.length; i++) {
691
		for (int i = 0; i < listenersArray.length; i++) {
716
				IJobProgressManagerListener listener = listeners[i];
692
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
717
				if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
693
			if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
718
					listener.refreshJobInfo(info);
694
				listener.refreshJobInfo(info);
719
				}
720
			}
695
			}
721
		}
696
		}
722
	}
697
	}
Lines 728-737 Link Here
728
	 */
703
	 */
729
	public void refreshGroup(GroupInfo info) {
704
	public void refreshGroup(GroupInfo info) {
730
705
731
		synchronized (listenersKey) {
706
		Object[] listenersArray = listeners.getListeners();
732
			for (int i = 0; i < listeners.length; i++) {
707
		for (int i = 0; i < listenersArray.length; i++) {
733
				listeners[i].refreshGroup(info);
708
			((IJobProgressManagerListener)listenersArray[i]).refreshGroup(info);
734
			}
735
		}
709
		}
736
	}
710
	}
737
711
Lines 742-751 Link Here
742
	public void refreshAll() {
716
	public void refreshAll() {
743
717
744
		pruneStaleJobs();
718
		pruneStaleJobs();
745
		synchronized (listenersKey) {
719
		Object[] listenersArray = listeners.getListeners();
746
			for (int i = 0; i < listeners.length; i++) {
720
		for (int i = 0; i < listenersArray.length; i++) {
747
				listeners[i].refreshAll();
721
			((IJobProgressManagerListener)listenersArray[i]).refreshAll();
748
			}
749
		}
722
		}
750
723
751
	}
724
	}
Lines 766-780 Link Here
766
			}
739
			}
767
		}
740
		}
768
741
769
		synchronized (listenersKey) {
742
		Object[] listenersArray = listeners.getListeners();
770
			for (int i = 0; i < listeners.length; i++) {
743
		for (int i = 0; i < listenersArray.length; i++) {
771
				IJobProgressManagerListener listener = listeners[i];
744
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
772
				if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
745
			if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
773
					listener.removeJob(info);
746
				listener.removeJob(info);
774
				}
775
			}
747
			}
776
		}
748
		}
777
778
	}
749
	}
779
750
780
	/**
751
	/**
Lines 785-794 Link Here
785
	 */
756
	 */
786
	public void removeGroup(GroupInfo group) {
757
	public void removeGroup(GroupInfo group) {
787
758
788
		synchronized (listenersKey) {
759
		Object[] listenersArray = listeners.getListeners();
789
			for (int i = 0; i < listeners.length; i++) {
760
		for (int i = 0; i < listenersArray.length; i++) {
790
				listeners[i].removeGroup(group);
761
			((IJobProgressManagerListener)listenersArray[i]).removeGroup(group);
791
			}
792
		}
762
		}
793
	}
763
	}
794
764
Lines 804-815 Link Here
804
		}
774
		}
805
775
806
		jobs.put(info.getJob(), info);
776
		jobs.put(info.getJob(), info);
807
		synchronized (listenersKey) {
777
		Object[] listenersArray = listeners.getListeners();
808
			for (int i = 0; i < listeners.length; i++) {
778
		for (int i = 0; i < listenersArray.length; i++) {
809
				IJobProgressManagerListener listener = listeners[i];
779
			IJobProgressManagerListener listener = (IJobProgressManagerListener) listenersArray[i];
810
				if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
780
			if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
811
					listener.addJob(info);
781
				listener.addJob(info);
812
				}
813
			}
782
			}
814
		}
783
		}
815
	}
784
	}
Lines 1045-1053 Link Here
1045
	 * Shutdown the receiver.
1014
	 * Shutdown the receiver.
1046
	 */
1015
	 */
1047
	private void shutdown() {
1016
	private void shutdown() {
1048
		synchronized (listenersKey) {
1017
		listeners.clear();
1049
			this.listeners = new IJobProgressManagerListener[0];
1050
		}
1051
		Job.getJobManager().setProgressProvider(null);
1018
		Job.getJobManager().setProgressProvider(null);
1052
		Job.getJobManager().removeJobChangeListener(this.changeListener);
1019
		Job.getJobManager().removeJobChangeListener(this.changeListener);
1053
	}
1020
	}

Return to bug 258352