1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-18 05:35:45 +02:00

launchbar: public API for launch bar listeners

Change-Id: Ic33a181f679708de2b78aa7a49bde1ab45578b39
This commit is contained in:
Alena Laskavaia 2016-01-29 10:57:02 -05:00
parent 3eb77d17f6
commit 3a66908e57
5 changed files with 97 additions and 61 deletions

View file

@ -0,0 +1,44 @@
/*******************************************************************************
* Copyright (c) Jan 29, 2016 QNX Software Systems. All Rights Reserved.
*
* You must obtain a written license from and pay applicable license fees to QNX
* Software Systems before you may reproduce, modify or distribute this software,
* or any work that includes all or part of this software. Free development
* licenses are available for evaluation and non-commercial purposes. For more
* information visit [http://licensing.qnx.com] or email licensing@qnx.com.
*
* This file may contain contributions from others. Please review this entire
* file for other proprietary rights or license notices, as well as the QNX
* Development Suite License Guide at [http://licensing.qnx.com/license-guide/]
* for other information.
*******************************************************************************/
package org.eclipse.launchbar.core;
import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.launchbar.core.target.ILaunchTarget;
/**
* Listener that can be installed on launch bar to listen for state changes.
* {@link ILaunchBarManager#addListener(ILaunchBarListener)}.
*
* <code>
* Activator.getService(ILaunchBarManager.class).addListener(new ILaunchBarListener(){
* public void activeLaunchTargetChanged(ILaunchTarget target) {
* // do something
* }
* });
* </code>
*/
public interface ILaunchBarListener {
default void activeLaunchDescriptorChanged(ILaunchDescriptor descriptor) {
}
default void activeLaunchModeChanged(ILaunchMode mode) {
}
default void activeLaunchTargetChanged(ILaunchTarget target) {
}
default void launchTargetsChanged() {
}
}

View file

@ -49,4 +49,16 @@ public interface ILaunchBarManager extends ILaunchConfigurationListener {
*/ */
void launchObjectChanged(Object launchObject) throws CoreException; void launchObjectChanged(Object launchObject) throws CoreException;
/**
* Add a linstener that can react to launch bar changes
* @param listener
*/
public void addListener(ILaunchBarListener listener);
/**
* Remove a linstener
* @param listener
*/
public void removeListener(ILaunchBarListener listener);
} }

View file

@ -38,6 +38,7 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchListener; import org.eclipse.debug.core.ILaunchListener;
import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchMode; import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.launchbar.core.ILaunchBarListener;
import org.eclipse.launchbar.core.ILaunchBarManager; import org.eclipse.launchbar.core.ILaunchBarManager;
import org.eclipse.launchbar.core.ILaunchConfigurationProvider; import org.eclipse.launchbar.core.ILaunchConfigurationProvider;
import org.eclipse.launchbar.core.ILaunchDescriptor; import org.eclipse.launchbar.core.ILaunchDescriptor;
@ -54,23 +55,7 @@ import org.osgi.service.prefs.Preferences;
* The brains of the launch bar. * The brains of the launch bar.
*/ */
public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListener { public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListener {
public interface Listener { private final List<ILaunchBarListener> listeners = new LinkedList<>();
default void activeLaunchDescriptorChanged() {
}
default void activeLaunchModeChanged() {
}
default void activeLaunchTargetChanged() {
}
default void launchDescriptorRemoved(ILaunchDescriptor descriptor) {
}
default void launchTargetsChanged() {
}
}
private final List<Listener> listeners = new LinkedList<>();
// The launch object providers // The launch object providers
private final List<ILaunchObjectProvider> objectProviders = new ArrayList<>(); private final List<ILaunchObjectProvider> objectProviders = new ArrayList<>();
// The descriptor types // The descriptor types
@ -615,9 +600,9 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireActiveLaunchDescriptorChanged() { private void fireActiveLaunchDescriptorChanged() {
if (!initialized) if (!initialized)
return; return;
for (Listener listener : listeners) { for (ILaunchBarListener listener : listeners) {
try { try {
listener.activeLaunchDescriptorChanged(); listener.activeLaunchDescriptorChanged(activeLaunchDesc);
} catch (Exception e) { } catch (Exception e) {
Activator.log(e); Activator.log(e);
} }
@ -671,9 +656,9 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireActiveLaunchModeChanged() { private void fireActiveLaunchModeChanged() {
if (!initialized) if (!initialized)
return; return;
for (Listener listener : listeners) { for (ILaunchBarListener listener : listeners) {
try { try {
listener.activeLaunchModeChanged(); listener.activeLaunchModeChanged(activeLaunchMode);
} catch (Exception e) { } catch (Exception e) {
Activator.log(e); Activator.log(e);
} }
@ -759,9 +744,9 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireActiveLaunchTargetChanged() { private void fireActiveLaunchTargetChanged() {
if (!initialized) if (!initialized)
return; return;
for (Listener listener : listeners) { for (ILaunchBarListener listener : listeners) {
try { try {
listener.activeLaunchTargetChanged(); listener.activeLaunchTargetChanged(activeLaunchTarget);
} catch (Exception e) { } catch (Exception e) {
Activator.log(e); Activator.log(e);
} }
@ -811,13 +796,16 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
return null; return null;
} }
public void addListener(Listener listener) { @Override
public void addListener(ILaunchBarListener listener) {
if (listener == null) if (listener == null)
return; return;
if (!listeners.contains(listener)) // cannot add duplicates
listeners.add(listener); listeners.add(listener);
} }
public void removeListener(Listener listener) { @Override
public void removeListener(ILaunchBarListener listener) {
if (listener == null) if (listener == null)
return; return;
listeners.remove(listener); listeners.remove(listener);
@ -901,7 +889,7 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireLaunchTargetsChanged() { private void fireLaunchTargetsChanged() {
if (!initialized) if (!initialized)
return; return;
for (Listener listener : listeners) { for (ILaunchBarListener listener : listeners) {
try { try {
listener.launchTargetsChanged(); listener.launchTargetsChanged();
} catch (Exception e) { } catch (Exception e) {

View file

@ -16,9 +16,9 @@ import javax.annotation.PreDestroy;
import org.eclipse.debug.core.ILaunchMode; import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.launchbar.core.ILaunchBarListener;
import org.eclipse.launchbar.core.ILaunchDescriptor; import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.launchbar.core.internal.LaunchBarManager; import org.eclipse.launchbar.core.internal.LaunchBarManager;
import org.eclipse.launchbar.core.internal.LaunchBarManager.Listener;
import org.eclipse.launchbar.core.target.ILaunchTarget; import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.ui.internal.Activator; import org.eclipse.launchbar.ui.internal.Activator;
import org.eclipse.launchbar.ui.internal.Messages; import org.eclipse.launchbar.ui.internal.Messages;
@ -34,7 +34,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.ToolItem;
public class LaunchBarControl implements Listener { public class LaunchBarControl implements ILaunchBarListener {
public static final String ID = "org.eclipse.launchbar"; //$NON-NLS-1$ public static final String ID = "org.eclipse.launchbar"; //$NON-NLS-1$
public static final String CLASS_URI = "bundleclass://" + Activator.PLUGIN_ID + "/" //$NON-NLS-1$ //$NON-NLS-2$ public static final String CLASS_URI = "bundleclass://" + Activator.PLUGIN_ID + "/" //$NON-NLS-1$ //$NON-NLS-2$
+ LaunchBarControl.class.getName(); + LaunchBarControl.class.getName();
@ -122,35 +122,26 @@ public class LaunchBarControl implements Listener {
} }
@Override @Override
public void activeLaunchDescriptorChanged() { public void activeLaunchDescriptorChanged(ILaunchDescriptor descriptor) {
if (configSelector != null) { if (configSelector != null) {
final ILaunchDescriptor descriptor = manager.getActiveLaunchDescriptor();
configSelector.setDelayedSelection(descriptor, SELECTION_DELAY); configSelector.setDelayedSelection(descriptor, SELECTION_DELAY);
} }
} }
@Override @Override
public void activeLaunchModeChanged() { public void activeLaunchModeChanged(ILaunchMode mode) {
if (modeSelector != null) { if (modeSelector != null) {
final ILaunchMode mode = manager.getActiveLaunchMode();
modeSelector.setDelayedSelection(mode, SELECTION_DELAY); modeSelector.setDelayedSelection(mode, SELECTION_DELAY);
} }
} }
@Override @Override
public void activeLaunchTargetChanged() { public void activeLaunchTargetChanged(ILaunchTarget target) {
if (targetSelector != null) { if (targetSelector != null) {
final ILaunchTarget target = manager.getActiveLaunchTarget();
targetSelector.setDelayedSelection(target, SELECTION_DELAY); targetSelector.setDelayedSelection(target, SELECTION_DELAY);
} }
} }
@Override
public void launchDescriptorRemoved(ILaunchDescriptor descriptor) {
// TODO Auto-generated method stub
}
@Override @Override
public void launchTargetsChanged() { public void launchTargetsChanged() {
if (targetSelector != null) { if (targetSelector != null) {

View file

@ -50,12 +50,12 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchMode; import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.launchbar.core.DefaultLaunchConfigProvider; import org.eclipse.launchbar.core.DefaultLaunchConfigProvider;
import org.eclipse.launchbar.core.ILaunchBarListener;
import org.eclipse.launchbar.core.ILaunchConfigurationProvider; import org.eclipse.launchbar.core.ILaunchConfigurationProvider;
import org.eclipse.launchbar.core.ILaunchDescriptor; import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.launchbar.core.ILaunchDescriptorType; import org.eclipse.launchbar.core.ILaunchDescriptorType;
import org.eclipse.launchbar.core.ProjectLaunchDescriptor; import org.eclipse.launchbar.core.ProjectLaunchDescriptor;
import org.eclipse.launchbar.core.ProjectPerTargetLaunchConfigProvider; import org.eclipse.launchbar.core.ProjectPerTargetLaunchConfigProvider;
import org.eclipse.launchbar.core.internal.LaunchBarManager.Listener;
import org.eclipse.launchbar.core.target.ILaunchTarget; import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager; import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.junit.Before; import org.junit.Before;
@ -670,12 +670,12 @@ public class LaunchBarManager2Test {
@Test @Test
public void testGetActiveLaunchDescriptor() throws CoreException { public void testGetActiveLaunchDescriptor() throws CoreException {
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
manager.launchObjectAdded(launchObject); manager.launchObjectAdded(launchObject);
// manager.setActiveLaunchDescriptor(desc); // manager.setActiveLaunchDescriptor(desc);
assertEquals(descriptor, manager.getActiveLaunchDescriptor()); assertEquals(descriptor, manager.getActiveLaunchDescriptor());
verify(lis).activeLaunchDescriptorChanged(); verify(lis).activeLaunchDescriptorChanged(descriptor);
} }
@Test @Test
@ -697,12 +697,12 @@ public class LaunchBarManager2Test {
@Test @Test
public void testSetActiveLaunchDescriptorLisBad() throws CoreException { public void testSetActiveLaunchDescriptorLisBad() throws CoreException {
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
doThrow(new NullPointerException()).when(lis).activeLaunchDescriptorChanged(); doThrow(new NullPointerException()).when(lis).activeLaunchDescriptorChanged(any(ILaunchDescriptor.class));
manager.launchObjectAdded(launchObject); manager.launchObjectAdded(launchObject);
manager.launchConfigurationAdded(launchConfig); manager.launchConfigurationAdded(launchConfig);
verify(lis).activeLaunchDescriptorChanged(); verify(lis).activeLaunchDescriptorChanged(descriptor);
} }
@Test @Test
@ -774,22 +774,23 @@ public class LaunchBarManager2Test {
public void testSetActiveLaunchModeLis() throws CoreException { public void testSetActiveLaunchModeLis() throws CoreException {
ILaunchMode mode = mock(ILaunchMode.class); ILaunchMode mode = mock(ILaunchMode.class);
doReturn("bla").when(mode).getIdentifier(); doReturn("bla").when(mode).getIdentifier();
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
manager.setActiveLaunchMode(mode); manager.setActiveLaunchMode(mode);
manager.setActiveLaunchMode(null); manager.setActiveLaunchMode(null);
verify(lis, times(2)).activeLaunchModeChanged(); verify(lis, times(1)).activeLaunchModeChanged(mode);
verify(lis, times(1)).activeLaunchModeChanged(null);
} }
@Test @Test
public void testSetActiveLaunchModeLisBad() throws CoreException { public void testSetActiveLaunchModeLisBad() throws CoreException {
ILaunchMode mode = mock(ILaunchMode.class); ILaunchMode mode = mock(ILaunchMode.class);
doReturn("bla").when(mode).getIdentifier(); doReturn("bla").when(mode).getIdentifier();
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
doThrow(new NullPointerException()).when(lis).activeLaunchModeChanged(); doThrow(new NullPointerException()).when(lis).activeLaunchModeChanged(mode);
manager.setActiveLaunchMode(mode); manager.setActiveLaunchMode(mode);
verify(lis).activeLaunchModeChanged(); verify(lis).activeLaunchModeChanged(mode);
} }
@Test @Test
@ -857,28 +858,28 @@ public class LaunchBarManager2Test {
@Test @Test
public void testAddListener() throws CoreException { public void testAddListener() throws CoreException {
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
// check events // check events
manager.launchObjectAdded(launchObject); manager.launchObjectAdded(launchObject);
manager.setActiveLaunchDescriptor(descriptor); manager.setActiveLaunchDescriptor(descriptor);
verify(lis).activeLaunchTargetChanged(); verify(lis).activeLaunchTargetChanged(any(ILaunchTarget.class));
} }
@Test @Test
public void testAddListenerBad() throws CoreException { public void testAddListenerBad() throws CoreException {
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
doThrow(new NullPointerException()).when(lis).activeLaunchTargetChanged(); doThrow(new NullPointerException()).when(lis).activeLaunchTargetChanged(any(ILaunchTarget.class));
// check events // check events
manager.launchObjectAdded(launchObject); manager.launchObjectAdded(launchObject);
manager.setActiveLaunchDescriptor(descriptor); manager.setActiveLaunchDescriptor(descriptor);
verify(lis).activeLaunchTargetChanged(); verify(lis).activeLaunchTargetChanged(any(ILaunchTarget.class));
} }
@Test @Test
public void testRemoveListener() { public void testRemoveListener() {
Listener lis = mock(Listener.class); ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis); manager.addListener(lis);
manager.removeListener(lis); manager.removeListener(lis);
verifyZeroInteractions(lis); verifyZeroInteractions(lis);