diff --git a/projectuiapi/src/org/netbeans/spi/project/ui/support/BuildExecutionSupport.java b/projectuiapi/src/org/netbeans/spi/project/ui/support/BuildExecutionSupport.java
--- a/projectuiapi/src/org/netbeans/spi/project/ui/support/BuildExecutionSupport.java
+++ b/projectuiapi/src/org/netbeans/spi/project/ui/support/BuildExecutionSupport.java
@@ -42,8 +42,15 @@
package org.netbeans.spi.project.ui.support;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import org.netbeans.modules.project.uiapi.BuildExecutionSupportImplementation;
import org.netbeans.modules.project.uiapi.Utilities;
import org.openide.filesystems.FileObject;
+import org.openide.util.ChangeSupport;
+import org.openide.util.WeakListeners;
/**
* Register running and finished build/run/debug tasks for use
@@ -77,6 +84,14 @@
public static void registerFinishedItem(BuildExecutionSupport.Item item) {
Utilities.getBuildExecutionSupportImplementation().registerFinishedItem(item);
}
+
+ public static BuildExecutionSupport.Item getLastItem() {
+ return Utilities.getBuildExecutionSupportImplementation().getLastItem();
+ }
+
+ public static ChangeListenerSupport getChangeSupport() {
+ return ChangeListenerSupportImpl.getInstance();
+ }
/**
* Wrapper for the build job used by BuildExecutionSupport
@@ -123,4 +138,48 @@
*/
FileObject getProjectDirectory();
}
+
+ public static interface ChangeListenerSupport {
+
+ void addChangeListener(ChangeListener listener);
+
+ void removeChangeListener(ChangeListener listener);
+
+ }
+
+ private static class ChangeListenerSupportImpl implements ChangeListenerSupport, ChangeListener {
+
+ private static volatile Reference chsiRef = new WeakReference(null);
+ private final ChangeSupport chs = new ChangeSupport(this);
+
+ private ChangeListenerSupportImpl() {
+ BuildExecutionSupportImplementation besi = Utilities.getBuildExecutionSupportImplementation();
+ besi.addChangeListener(WeakListeners.change(this, besi));
+ }
+
+ static ChangeListenerSupportImpl getInstance() {
+ ChangeListenerSupportImpl chsi = chsiRef.get();
+ if (chsi == null) {
+ chsi = new ChangeListenerSupportImpl();
+ chsiRef = new WeakReference(chsi);
+ }
+ return chsi;
+ }
+
+ @Override
+ public void addChangeListener(ChangeListener listener) {
+ chs.addChangeListener(listener);
+ }
+
+ @Override
+ public void removeChangeListener(ChangeListener listener) {
+ chs.removeChangeListener(listener);
+ }
+
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ chs.fireChange();
+ }
+
+ }
}