From 2f995b6acb68bbf6f7824daac7854561fc452b5f Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 1 Jul 2014 19:45:22 -0400 Subject: [PATCH] Cleared up the target model making it a provider responsibility. The launch config descriptor provides the list of targets for a given (usually active) config. The manager still manages which one is active. --- .../.gitignore | 1 + doc/org.eclipse.cdt.doc.user/.gitignore | 1 + .../internal/CDTLaunchConfigDescriptor.java | 13 ++++---- .../DefaultLaunchConfigurationDescriptor.java | 28 ++++++++++++++-- .../core/ILaunchConfigurationDescriptor.java | 32 +++++++++++++++++++ .../cdt/launchbar/core/ILaunchTarget.java | 16 ++++++++-- .../cdt/launchbar/core/ILaunchTargetType.java | 17 ---------- .../core/internal/LaunchBarManager.java | 25 ++++++++++----- .../launchbar/core/internal/LocalTarget.java | 15 +++------ .../core/internal/LocalTargetType.java | 32 ------------------- .../ui/internal/controls/TargetSelector.java | 2 +- 11 files changed, 101 insertions(+), 81 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.application.doc/.gitignore create mode 100644 doc/org.eclipse.cdt.doc.user/.gitignore rename launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/{internal => }/DefaultLaunchConfigurationDescriptor.java (64%) delete mode 100644 launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTargetType.java delete mode 100644 launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTargetType.java diff --git a/debug/org.eclipse.cdt.debug.application.doc/.gitignore b/debug/org.eclipse.cdt.debug.application.doc/.gitignore new file mode 100644 index 00000000000..9e440c00d03 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.application.doc/.gitignore @@ -0,0 +1 @@ +/workspace/ diff --git a/doc/org.eclipse.cdt.doc.user/.gitignore b/doc/org.eclipse.cdt.doc.user/.gitignore new file mode 100644 index 00000000000..9e440c00d03 --- /dev/null +++ b/doc/org.eclipse.cdt.doc.user/.gitignore @@ -0,0 +1 @@ +/workspace/ diff --git a/launch/org.eclipse.cdt.launchbar.cdt.core/src/org/eclipse/cdt/launchbar/cdt/core/internal/CDTLaunchConfigDescriptor.java b/launch/org.eclipse.cdt.launchbar.cdt.core/src/org/eclipse/cdt/launchbar/cdt/core/internal/CDTLaunchConfigDescriptor.java index 682edc720fc..0bd82b1b9d6 100644 --- a/launch/org.eclipse.cdt.launchbar.cdt.core/src/org/eclipse/cdt/launchbar/cdt/core/internal/CDTLaunchConfigDescriptor.java +++ b/launch/org.eclipse.cdt.launchbar.cdt.core/src/org/eclipse/cdt/launchbar/cdt/core/internal/CDTLaunchConfigDescriptor.java @@ -1,7 +1,7 @@ package org.eclipse.cdt.launchbar.cdt.core.internal; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.cdt.launchbar.core.ILaunchConfigurationDescriptor; +import org.eclipse.cdt.launchbar.core.DefaultLaunchConfigurationDescriptor; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; @@ -12,17 +12,17 @@ import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; -public class CDTLaunchConfigDescriptor implements ILaunchConfigurationDescriptor { +public class CDTLaunchConfigDescriptor extends DefaultLaunchConfigurationDescriptor { private String projectName; - private ILaunchConfiguration config; public CDTLaunchConfigDescriptor(IProject project) { + super(null); projectName = project.getName(); } public CDTLaunchConfigDescriptor(ILaunchConfiguration config) { - this.config = config; + super(config); } @Override @@ -53,6 +53,7 @@ public class CDTLaunchConfigDescriptor implements ILaunchConfigurationDescriptor ILaunchConfigurationWorkingCopy wc = configType.newInstance(null, getLaunchManager().generateLaunchConfigurationName(projectName)); wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName); wc.setMappedResources(new IResource[] { getProject() }); + wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, (String) null); // TODO finish this off @@ -63,9 +64,7 @@ public class CDTLaunchConfigDescriptor implements ILaunchConfigurationDescriptor @Override public boolean matches(ILaunchConfiguration launchConfiguration) { - // TODO Auto-generated method stub - - // matches if it's the same project + // TODO matches if it's the same project return false; } diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/DefaultLaunchConfigurationDescriptor.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/DefaultLaunchConfigurationDescriptor.java similarity index 64% rename from launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/DefaultLaunchConfigurationDescriptor.java rename to launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/DefaultLaunchConfigurationDescriptor.java index 367f54cdeba..652afaf8c6b 100644 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/DefaultLaunchConfigurationDescriptor.java +++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/DefaultLaunchConfigurationDescriptor.java @@ -8,16 +8,18 @@ * Contributors: * Doug Schaefer *******************************************************************************/ -package org.eclipse.cdt.launchbar.core.internal; +package org.eclipse.cdt.launchbar.core; -import org.eclipse.cdt.launchbar.core.ILaunchConfigurationDescriptor; +import org.eclipse.cdt.launchbar.core.internal.LaunchBarManager; +import org.eclipse.cdt.launchbar.core.internal.LocalTarget; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchMode; public class DefaultLaunchConfigurationDescriptor implements ILaunchConfigurationDescriptor { - final ILaunchConfiguration config; + protected ILaunchConfiguration config; public DefaultLaunchConfigurationDescriptor(ILaunchConfiguration config) { this.config = config; @@ -43,4 +45,24 @@ public class DefaultLaunchConfigurationDescriptor implements ILaunchConfiguratio return config.equals(launchConfiguration); } + @Override + public ILaunchTarget getLaunchTarget(String id) { + return LocalTarget.ID.equals(id) ? LaunchBarManager.getLocalLaunchTarget() : null; + } + + @Override + public ILaunchTarget[] getLaunchTargets() { + return new ILaunchTarget[] { LaunchBarManager.getLocalLaunchTarget() }; + } + + @Override + public void setActiveLaunchTarget(ILaunchTarget target) { + // nothing to do + } + + @Override + public void setActiveLaunchMode(ILaunchMode mode) { + // nothing to do + } + } diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchConfigurationDescriptor.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchConfigurationDescriptor.java index 5cbfa8148d7..a491f604c80 100644 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchConfigurationDescriptor.java +++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchConfigurationDescriptor.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.launchbar.core; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchMode; public interface ILaunchConfigurationDescriptor { @@ -46,5 +47,36 @@ public interface ILaunchConfigurationDescriptor { * @return */ boolean matches(ILaunchConfiguration launchConfiguration); + + /** + * Return the list of launch targets this configuration can launcht to. + * + * @return launch targets + */ + ILaunchTarget[] getLaunchTargets(); + /** + * Return the launch target with the given id. + * + * @param id id of target + * @return launch target + */ + ILaunchTarget getLaunchTarget(String id); + + /** + * Set the active launch mode. Allows the descriptor to prepare for a + * launch in that mode. + * + * @param mode the new active launch mode + */ + void setActiveLaunchMode(ILaunchMode mode); + + /** + * Set the active launch target. Allows the descriptor to prepare for + * a launch on that target. + * + * @param target the new active launch target + */ + void setActiveLaunchTarget(ILaunchTarget target); + } diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTarget.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTarget.java index 4fb64f5f57c..c45dd0499f9 100644 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTarget.java +++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTarget.java @@ -12,8 +12,18 @@ package org.eclipse.cdt.launchbar.core; public interface ILaunchTarget { + /** + * Get the id for the target. The id of the active target is + * stored in the preference store. + * + * @return id + */ + String getId(); + + /** + * Returns a name to show in the UI for this target. + * + * @return name + */ String getName(); - - ILaunchTargetType getType(); - } diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTargetType.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTargetType.java deleted file mode 100644 index d02451e0613..00000000000 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchTargetType.java +++ /dev/null @@ -1,17 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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 - * - * Contributors: - * Doug Schaefer - *******************************************************************************/ -package org.eclipse.cdt.launchbar.core; - -public interface ILaunchTargetType { - - String getId(); - -} diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java index e80d9b8a668..1d443aef5c9 100644 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java +++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java @@ -19,6 +19,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import org.eclipse.cdt.launchbar.core.DefaultLaunchConfigurationDescriptor; import org.eclipse.cdt.launchbar.core.ILaunchBarManager; import org.eclipse.cdt.launchbar.core.ILaunchConfigurationDescriptor; import org.eclipse.cdt.launchbar.core.ILaunchConfigurationsProvider; @@ -45,11 +46,14 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage private List listeners = new LinkedList<>(); private List providers = new ArrayList<>(); private Map configDescs = new HashMap<>(); - private ILaunchConfigurationDescriptor lastConfigDesc, activeConfigDesc; + private ILaunchConfigurationDescriptor lastConfigDesc; private ILaunchMode[] launchModes = new ILaunchMode[0]; + + private ILaunchConfigurationDescriptor activeConfigDesc; private ILaunchMode activeLaunchMode; + private ILaunchTarget activeLaunchTarget; - private final LocalTargetType localTargetType = new LocalTargetType(); + private static final LocalTarget localLaunchTarget = new LocalTarget(); private static final String PREF_ACTIVE_CONFIG_DESC = "activeConfigDesc"; private static final String PREF_ACTIVE_LAUNCH_MODE = "activeLaunchMode"; @@ -346,22 +350,27 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage @Override public ILaunchTarget[] getLaunchTargets() { - // TODO for reals - return new ILaunchTarget[] { localTargetType.getTarget() }; + if (activeConfigDesc != null) + return activeConfigDesc.getLaunchTargets(); + else + return new ILaunchTarget[0]; } @Override public ILaunchTarget getActiveLaunchTarget() { - // TODO for reals - return localTargetType.getTarget(); + return activeLaunchTarget; } @Override public void setActiveLaunchTarget(ILaunchTarget target) { - // TODO Auto-generated method stub - + activeLaunchTarget = target; + activeConfigDesc.setActiveLaunchTarget(target); } + public static LocalTarget getLocalLaunchTarget() { + return localLaunchTarget; + } + @Override public void addLaunchTarget(ILaunchTarget target) { // TODO Auto-generated method stub diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTarget.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTarget.java index f51b98367df..43c79ffb6cb 100644 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTarget.java +++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTarget.java @@ -11,24 +11,19 @@ package org.eclipse.cdt.launchbar.core.internal; import org.eclipse.cdt.launchbar.core.ILaunchTarget; -import org.eclipse.cdt.launchbar.core.ILaunchTargetType; public class LocalTarget implements ILaunchTarget { - private final LocalTargetType type; + public static final String ID = "org.eclipse.cdt.local"; - public LocalTarget(LocalTargetType type) { - this.type = type; + @Override + public String getId() { + return ID; } @Override public String getName() { - return "Local Machine"; - } - - @Override - public ILaunchTargetType getType() { - return type; + return "Local Machine"; // TODO externalize } } diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTargetType.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTargetType.java deleted file mode 100644 index c289f9f7ce7..00000000000 --- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LocalTargetType.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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 - * - * Contributors: - * Doug Schaefer - *******************************************************************************/ -package org.eclipse.cdt.launchbar.core.internal; - -import org.eclipse.cdt.launchbar.core.ILaunchTargetType; - -public class LocalTargetType implements ILaunchTargetType { - - private final LocalTarget target; - - public LocalTargetType() { - target = new LocalTarget(this); - } - - @Override - public String getId() { - return "org.eclipse.cdt.launchbar.target.local"; - } - - public LocalTarget getTarget() { - return target; - } - -} diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java index 6f166f37445..d73b9fd623b 100644 --- a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java +++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java @@ -89,7 +89,7 @@ public class TargetSelector extends CSelector { if (labelProvider != null) { return labelProvider.getText(element); } - return target.getName(); + return target.getId(); } return super.getText(element); }