1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 06:02:11 +02:00

Bug 481352 - Adapt Qt and Arduino providers to ILaunchTargets

ILaunchTarget replaces IRemoteConnection.

Change-Id: I77825ae1347cec7095655548e06cb6dbc5c2aaf4
This commit is contained in:
Doug Schaefer 2015-11-03 16:03:43 -05:00 committed by Gerrit Code Review @ Eclipse.org
parent 19cd53ec10
commit 790f90ee55
9 changed files with 194 additions and 22 deletions

View file

@ -20,32 +20,31 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.launchbar.core.AbstractLaunchConfigProvider;
import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.remote.core.IRemoteConnection;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
/**
* Launch config provider for Qt projects running on the Local connection. Simply uses the C++ Application launch config
* type.
* Launch config provider for Qt projects running on the Local connection.
* Simply uses the C++ Application launch config type.
*/
public class QtLocalLaunchConfigProvider extends AbstractLaunchConfigProvider {
private static final String localConnectionTypeId = "org.eclipse.remote.LocalServices"; //$NON-NLS-1$
private Map<IProject, ILaunchConfiguration> configs = new HashMap<>();
@Override
public boolean supports(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException {
return localConnectionTypeId.equals(target.getConnectionType().getId());
public boolean supports(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException {
return ILaunchTargetManager.localLaunchTargetTypeId.equals(target.getTypeId());
}
@Override
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, IRemoteConnection target)
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, ILaunchTarget target)
throws CoreException {
return DebugPlugin.getDefault().getLaunchManager()
.getLaunchConfigurationType(QtLocalRunLaunchConfigDelegate.TYPE_ID);
}
@Override
public ILaunchConfiguration getLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target)
public ILaunchConfiguration getLaunchConfiguration(ILaunchDescriptor descriptor, ILaunchTarget target)
throws CoreException {
ILaunchConfiguration config = configs.get(descriptor);
if (config == null) {
@ -56,7 +55,7 @@ public class QtLocalLaunchConfigProvider extends AbstractLaunchConfigProvider {
}
@Override
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target,
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, ILaunchTarget target,
ILaunchConfigurationWorkingCopy workingCopy) throws CoreException {
super.populateLaunchConfiguration(descriptor, target, workingCopy);
@ -99,7 +98,7 @@ public class QtLocalLaunchConfigProvider extends AbstractLaunchConfigProvider {
}
@Override
public void launchTargetRemoved(IRemoteConnection target) throws CoreException {
public void launchTargetRemoved(ILaunchTarget target) throws CoreException {
// nothing to do since the Local connection can't be removed
}

View file

@ -107,6 +107,13 @@
type="org.eclipse.cdt.arduino.core.internal.build.ArduinoBuildConfiguration">
</adapter>
</factory>
<factory
adaptableType="org.eclipse.launchbar.core.target.ILaunchTarget"
class="org.eclipse.cdt.arduino.core.internal.remote.ArduinoTargetAdapterFactory">
<adapter
type="org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection">
</adapter>
</factory>
</extension>
<extension
point="org.eclipse.cdt.core.ToolChainFactory">
@ -115,4 +122,11 @@
family="Arduino GCC">
</factory>
</extension>
<extension
point="org.eclipse.launchbar.core.launchTargetTypes">
<launchTargetType
id="org.eclipse.cdt.arduino.core.connectionType"
provider="org.eclipse.cdt.arduino.core.internal.remote.ArduinoLaunchTargetProvider">
</launchTargetType>
</extension>
</plugin>

View file

@ -10,10 +10,12 @@
*******************************************************************************/
package org.eclipse.cdt.arduino.core.internal;
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnectionListener;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.remote.core.IRemoteServicesManager;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@ -43,9 +45,13 @@ public class Activator extends Plugin {
public void start(BundleContext bundleContext) throws Exception {
plugin = this;
IRemoteServicesManager remoteManager = getService(IRemoteServicesManager.class);
remoteManager.addRemoteConnectionChangeListener(ArduinoRemoteConnectionListener.INSTANCE);
}
public void stop(BundleContext bundleContext) throws Exception {
IRemoteServicesManager remoteManager = getService(IRemoteServicesManager.class);
remoteManager.removeRemoteConnectionChangeListener(ArduinoRemoteConnectionListener.INSTANCE);
plugin = null;
}

View file

@ -21,26 +21,25 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.launchbar.core.ProjectPerTargetLaunchConfigProvider;
import org.eclipse.remote.core.IRemoteConnection;
import org.eclipse.remote.core.IRemoteConnectionType;
import org.eclipse.remote.core.IRemoteServicesManager;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
public class ArduinoLaunchConfigurationProvider extends ProjectPerTargetLaunchConfigProvider {
@Override
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, IRemoteConnection target)
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, ILaunchTarget target)
throws CoreException {
return DebugPlugin.getDefault().getLaunchManager()
.getLaunchConfigurationType(ArduinoLaunchConfigurationDelegate.TYPE_ID);
}
@Override
public boolean supports(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException {
public boolean supports(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException {
if (!super.supports(descriptor, target)) {
return false;
}
if (target != null && !target.getConnectionType().getId().equals(ArduinoRemoteConnection.TYPE_ID)) {
if (target != null && !target.getTypeId().equals(ArduinoRemoteConnection.TYPE_ID)) {
return false;
}
@ -50,7 +49,7 @@ public class ArduinoLaunchConfigurationProvider extends ProjectPerTargetLaunchCo
}
@Override
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target,
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, ILaunchTarget target,
ILaunchConfigurationWorkingCopy workingCopy) throws CoreException {
super.populateLaunchConfiguration(descriptor, target, workingCopy);
if (target != null) {
@ -59,14 +58,13 @@ public class ArduinoLaunchConfigurationProvider extends ProjectPerTargetLaunchCo
}
@Override
protected IRemoteConnection getLaunchTarget(ILaunchConfiguration configuration) throws CoreException {
protected ILaunchTarget getLaunchTarget(ILaunchConfiguration configuration) throws CoreException {
String name = configuration.getAttribute(ArduinoLaunchConfigurationDelegate.CONNECTION_NAME, ""); //$NON-NLS-1$
if (name.isEmpty()) {
return null;
}
IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class);
IRemoteConnectionType type = manager.getConnectionType(ArduinoRemoteConnection.TYPE_ID);
return type.getConnection(name);
ILaunchTargetManager manager = Activator.getService(ILaunchTargetManager.class);
return manager.getLaunchTarget(ArduinoRemoteConnection.TYPE_ID, name);
}
@Override

View file

@ -0,0 +1,45 @@
package org.eclipse.cdt.arduino.core.internal.remote;
import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.eclipse.launchbar.core.target.ILaunchTargetProvider;
import org.eclipse.launchbar.core.target.TargetStatus;
import org.eclipse.launchbar.core.target.TargetStatus.Code;
import org.eclipse.remote.core.IRemoteConnection;
import org.eclipse.remote.core.IRemoteConnectionType;
import org.eclipse.remote.core.IRemoteServicesManager;
public class ArduinoLaunchTargetProvider implements ILaunchTargetProvider {
@Override
public void init(ILaunchTargetManager targetManager) {
IRemoteServicesManager remoteManager = Activator.getService(IRemoteServicesManager.class);
IRemoteConnectionType remoteType = remoteManager.getConnectionType(ArduinoRemoteConnection.TYPE_ID);
// remove any targets that don't have connections
for (ILaunchTarget target : targetManager.getLaunchTargetsOfType(ArduinoRemoteConnection.TYPE_ID)) {
if (remoteType.getConnection(target.getName()) == null) {
targetManager.removeLaunchTarget(target);
}
}
// add any targets that are missing
for (IRemoteConnection connection : remoteType.getConnections()) {
if (targetManager.getLaunchTarget(ArduinoRemoteConnection.TYPE_ID, connection.getName()) == null) {
targetManager.addLaunchTarget(ArduinoRemoteConnection.TYPE_ID, connection.getName());
}
}
}
@Override
public TargetStatus getStatus(ILaunchTarget target) {
ArduinoRemoteConnection connection = target.getAdapter(ArduinoRemoteConnection.class);
if (connection.getRemoteConnection().isOpen()) {
return TargetStatus.OK_STATUS;
} else {
return new TargetStatus(Code.ERROR, "Not connected");
}
}
}

View file

@ -0,0 +1,40 @@
/*******************************************************************************
* Copyright (c) 2015 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.cdt.arduino.core.internal.remote;
import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.eclipse.remote.core.IRemoteConnectionChangeListener;
import org.eclipse.remote.core.RemoteConnectionChangeEvent;
public class ArduinoRemoteConnectionListener implements IRemoteConnectionChangeListener {
public static ArduinoRemoteConnectionListener INSTANCE = new ArduinoRemoteConnectionListener();
@Override
public void connectionChanged(RemoteConnectionChangeEvent event) {
switch (event.getType()) {
case RemoteConnectionChangeEvent.CONNECTION_ADDED:
if (event.getConnection().getConnectionType().getId().equals(ArduinoRemoteConnection.TYPE_ID)) {
ILaunchTargetManager targetManager = Activator.getService(ILaunchTargetManager.class);
targetManager.addLaunchTarget(ArduinoRemoteConnection.TYPE_ID, event.getConnection().getName());
}
case RemoteConnectionChangeEvent.CONNECTION_REMOVED:
if (event.getConnection().getConnectionType().getId().equals(ArduinoRemoteConnection.TYPE_ID)) {
ILaunchTargetManager targetManager = Activator.getService(ILaunchTargetManager.class);
ILaunchTarget target = targetManager.getLaunchTarget(ArduinoRemoteConnection.TYPE_ID,
event.getConnection().getName());
if (target != null) {
targetManager.removeLaunchTarget(target);
}
}
}
}
}

View file

@ -0,0 +1,35 @@
package org.eclipse.cdt.arduino.core.internal.remote;
import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.remote.core.IRemoteConnection;
import org.eclipse.remote.core.IRemoteConnectionType;
import org.eclipse.remote.core.IRemoteServicesManager;
public class ArduinoTargetAdapterFactory implements IAdapterFactory {
private IRemoteServicesManager remoteManager = Activator.getService(IRemoteServicesManager.class);
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adaptableObject instanceof ILaunchTarget) {
ILaunchTarget target = (ILaunchTarget) adaptableObject;
if (target.getTypeId().equals(ArduinoRemoteConnection.TYPE_ID)) {
IRemoteConnectionType connectionType = remoteManager.getConnectionType(target.getTypeId());
IRemoteConnection connection = connectionType.getConnection(target.getName());
if (connection != null) {
return (T) connection.getService(ArduinoRemoteConnection.class);
}
}
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
return new Class<?>[] { ArduinoRemoteConnection.class };
}
}

View file

@ -90,4 +90,11 @@
name="Boards">
</page>
</extension>
<extension
point="org.eclipse.launchbar.ui.launchTargetTypeUI">
<launchTargetTypeUI
id="org.eclipse.cdt.arduino.core.connectionType"
labelProvider="org.eclipse.cdt.arduino.ui.internal.remote.ArduinoLaunchTargetLabelProvider">
</launchTargetTypeUI>
</extension>
</plugin>

View file

@ -0,0 +1,28 @@
package org.eclipse.cdt.arduino.ui.internal.remote;
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection;
import org.eclipse.cdt.arduino.ui.internal.Activator;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.swt.graphics.Image;
public class ArduinoLaunchTargetLabelProvider extends LabelProvider {
@Override
public String getText(Object element) {
if (element instanceof ILaunchTarget) {
return ((ILaunchTarget) element).getName();
}
return super.getText(element);
}
@Override
public Image getImage(Object element) {
if (element instanceof ILaunchTarget
&& ((ILaunchTarget) element).getTypeId().equals(ArduinoRemoteConnection.TYPE_ID)) {
return Activator.getDefault().getImageRegistry().get(Activator.IMG_ARDUINO);
}
return super.getImage(element);
}
}