--- a/projectuiapi/src/org/netbeans/spi/project/ui/support/BuildExecutionSupport.java +++ a/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(); + } + + } }