From 3dd8f57dcf83c21315e1332d1b2698fb264abb9e Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Thu, 26 Nov 2015 16:20:37 -0500 Subject: [PATCH] Bug 481978 - Lots of clean-up to the Qt Build and Launch. Especially launch. Now have local and QNX launches (which are in our internal repo) working. Change-Id: I97bacc520cc6806fe9622700b2bb3f544e4aad94 --- qt/org.eclipse.cdt.qt.core/plugin.xml | 4 +- .../build/QtBuildConfigurationFactory.java | 1 + .../cdt/internal/qt/core/build/QtBuilder.java | 8 ++- .../qt/core/build/QtScannerInfoProvider.java | 1 + .../qt/core/launch/QtLaunchDescriptor.java | 5 +- .../QtLocalLaunchConfigationProvider.java | 36 +++++++++++++ .../QtLocalRunLaunchConfigDelegate.java | 47 ++--------------- .../cdt/qt/core/IQtLaunchDescriptor.java | 10 ++++ .../core}/QtBuildConfiguration.java | 12 +++-- .../core/QtLaunchConfigurationDelegate.java | 51 +++++++++++++++++++ .../core/QtLaunchConfigurationProvider.java} | 48 ++++++----------- qt/org.eclipse.cdt.qt.ui/META-INF/MANIFEST.MF | 1 + qt/org.eclipse.cdt.qt.ui/plugin.xml | 8 +++ .../QtLocalLaunchConfigurationTabGroup.java | 14 +++++ 14 files changed, 160 insertions(+), 86 deletions(-) create mode 100644 qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigationProvider.java create mode 100644 qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtLaunchDescriptor.java rename qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/{internal/qt/core/build => qt/core}/QtBuildConfiguration.java (94%) create mode 100644 qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationDelegate.java rename qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/{internal/qt/core/launch/QtLocalLaunchConfigProvider.java => qt/core/QtLaunchConfigurationProvider.java} (58%) create mode 100644 qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/launch/QtLocalLaunchConfigurationTabGroup.java diff --git a/qt/org.eclipse.cdt.qt.core/plugin.xml b/qt/org.eclipse.cdt.qt.core/plugin.xml index 509ccab57e2..f868e7ce665 100644 --- a/qt/org.eclipse.cdt.qt.core/plugin.xml +++ b/qt/org.eclipse.cdt.qt.core/plugin.xml @@ -153,7 +153,7 @@ @@ -181,7 +181,7 @@ adaptableType="org.eclipse.core.resources.IBuildConfiguration" class="org.eclipse.cdt.internal.qt.core.build.QtBuildConfigurationFactory"> + type="org.eclipse.cdt.qt.core.QtBuildConfiguration"> diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java index 5fdafd47a5f..bbdd12f450a 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java @@ -17,6 +17,7 @@ import org.eclipse.cdt.internal.qt.core.Activator; import org.eclipse.cdt.internal.qt.core.QtNature; import org.eclipse.cdt.qt.core.IQtInstall; import org.eclipse.cdt.qt.core.IQtInstallManager; +import org.eclipse.cdt.qt.core.QtBuildConfiguration; import org.eclipse.core.resources.IBuildConfiguration; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java index ab843b5b501..803923d82e4 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java @@ -14,7 +14,9 @@ import java.util.List; import java.util.Map; import org.eclipse.cdt.build.core.IConsoleService; +import org.eclipse.cdt.build.core.IToolChain; import org.eclipse.cdt.internal.qt.core.Activator; +import org.eclipse.cdt.qt.core.QtBuildConfiguration; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -35,6 +37,7 @@ public class QtBuilder extends IncrementalProjectBuilder { try { IConsoleService console = Activator.getService(IConsoleService.class); QtBuildConfiguration qtConfig = getBuildConfig().getAdapter(QtBuildConfiguration.class); + IToolChain toolChain = qtConfig.getToolChain(); Path buildDir = qtConfig.getBuildDirectory(); if (!buildDir.resolve("Makefile").toFile().exists()) { //$NON-NLS-1$ @@ -50,7 +53,9 @@ public class QtBuilder extends IncrementalProjectBuilder { IFile projectFile = qtConfig.getProject().getFile("main.pro"); command.add(projectFile.getLocation().toOSString()); - Process process = new ProcessBuilder(command).directory(buildDir.toFile()).start(); + ProcessBuilder processBuilder = new ProcessBuilder(command).directory(buildDir.toFile()); + toolChain.setEnvironment(processBuilder.environment()); + Process process = processBuilder.start(); StringBuffer msg = new StringBuffer(); for (String arg : command) { msg.append(arg).append(' '); @@ -72,6 +77,7 @@ public class QtBuilder extends IncrementalProjectBuilder { path = "C:/Qt/Tools/mingw492_32/bin;" + path; env.put("PATH", path); } + toolChain.setEnvironment(procBuilder.environment()); Process process = procBuilder.start(); console.writeOutput("make\n"); //$NON-NLS-1$ console.monitor(process, null, buildDir); diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java index e1c086e0683..b2b8eacfe27 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java @@ -13,6 +13,7 @@ import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfoChangeListener; import org.eclipse.cdt.core.parser.IScannerInfoProvider; import org.eclipse.cdt.internal.qt.core.Activator; +import org.eclipse.cdt.qt.core.QtBuildConfiguration; import org.eclipse.core.resources.IBuildConfiguration; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLaunchDescriptor.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLaunchDescriptor.java index 9ff56e4c490..73c5851521c 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLaunchDescriptor.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLaunchDescriptor.java @@ -7,12 +7,12 @@ *******************************************************************************/ package org.eclipse.cdt.internal.qt.core.launch; +import org.eclipse.cdt.qt.core.IQtLaunchDescriptor; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.PlatformObject; -import org.eclipse.launchbar.core.ILaunchDescriptor; import org.eclipse.launchbar.core.ILaunchDescriptorType; -public class QtLaunchDescriptor extends PlatformObject implements ILaunchDescriptor { +public class QtLaunchDescriptor extends PlatformObject implements IQtLaunchDescriptor { private final QtLaunchDescriptorType type; private final IProject project; @@ -32,6 +32,7 @@ public class QtLaunchDescriptor extends PlatformObject implements ILaunchDescrip return type; } + @Override public IProject getProject() { return project; } diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigationProvider.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigationProvider.java new file mode 100644 index 00000000000..f985c07209c --- /dev/null +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigationProvider.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * 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.internal.qt.core.launch; + +import org.eclipse.cdt.qt.core.QtLaunchConfigurationProvider; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.launchbar.core.ILaunchDescriptor; +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. + */ +public class QtLocalLaunchConfigationProvider extends QtLaunchConfigurationProvider { + + @Override + public boolean supports(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException { + return ILaunchTargetManager.localLaunchTargetTypeId.equals(target.getTypeId()); + } + + @Override + public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, ILaunchTarget target) + throws CoreException { + return DebugPlugin.getDefault().getLaunchManager() + .getLaunchConfigurationType(QtLocalRunLaunchConfigDelegate.TYPE_ID); + } + +} diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java index 33d3081c702..238b40cac47 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java @@ -13,10 +13,8 @@ import java.nio.file.Path; import java.util.Map; import org.eclipse.cdt.internal.qt.core.Activator; -import org.eclipse.cdt.internal.qt.core.build.QtBuildConfiguration; -import org.eclipse.cdt.internal.qt.core.build.QtBuildConfigurationFactory; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.cdt.qt.core.QtBuildConfiguration; +import org.eclipse.cdt.qt.core.QtLaunchConfigurationDelegate; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -28,20 +26,11 @@ import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.launchbar.core.target.ILaunchTarget; import org.eclipse.launchbar.core.target.launch.ITargetedLaunch; -import org.eclipse.launchbar.core.target.launch.LaunchConfigurationTargetedDelegate; -import org.eclipse.launchbar.core.target.launch.TargetedLaunch; -public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationTargetedDelegate { +public class QtLocalRunLaunchConfigDelegate extends QtLaunchConfigurationDelegate { public static final String TYPE_ID = Activator.ID + ".launchConfigurationType"; //$NON-NLS-1$ - @Override - public ITargetedLaunch getLaunch(ILaunchConfiguration configuration, String mode, ILaunchTarget target) - throws CoreException { - // TODO sourcelocator? - return new TargetedLaunch(configuration, mode, target, null); - } - @Override public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { @@ -111,34 +100,4 @@ public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationTargetedD }.schedule(); } - @Override - public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, ILaunchTarget target, - IProgressMonitor monitor) throws CoreException { - QtBuildConfiguration qtBuildConfig = getQtBuildConfiguration(configuration, mode, target, monitor); - - // Set it as active - IProject project = qtBuildConfig.getProject(); - IProjectDescription desc = project.getDescription(); - desc.setActiveBuildConfig(qtBuildConfig.getBuildConfiguration().getName()); - project.setDescription(desc, monitor); - - // And build - return superBuildForLaunch(configuration, mode, monitor); - } - - @Override - protected IProject[] getBuildOrder(ILaunchConfiguration configuration, String mode) throws CoreException { - // 1. Extract project from configuration - // TODO dependencies too. - IProject project = configuration.getMappedResources()[0].getProject(); - return new IProject[] { project }; - } - - private QtBuildConfiguration getQtBuildConfiguration(ILaunchConfiguration configuration, String mode, - ILaunchTarget target, IProgressMonitor monitor) throws CoreException { - // Find the Qt build config - IProject project = configuration.getMappedResources()[0].getProject(); - return QtBuildConfigurationFactory.getConfig(project, mode, target, monitor); - } - } diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtLaunchDescriptor.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtLaunchDescriptor.java new file mode 100644 index 00000000000..92e2039fe40 --- /dev/null +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtLaunchDescriptor.java @@ -0,0 +1,10 @@ +package org.eclipse.cdt.qt.core; + +import org.eclipse.core.resources.IProject; +import org.eclipse.launchbar.core.ILaunchDescriptor; + +public interface IQtLaunchDescriptor extends ILaunchDescriptor { + + IProject getProject(); + +} diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java similarity index 94% rename from qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java rename to qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java index 97f1fb89ab3..a6651d70003 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java @@ -5,7 +5,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ -package org.eclipse.cdt.internal.qt.core.build; +package org.eclipse.cdt.qt.core; import java.io.BufferedReader; import java.io.File; @@ -27,8 +27,6 @@ import org.eclipse.cdt.core.model.LanguageManager; import org.eclipse.cdt.core.parser.IExtendedScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.internal.qt.core.Activator; -import org.eclipse.cdt.qt.core.IQtInstall; -import org.eclipse.cdt.qt.core.IQtInstallManager; import org.eclipse.core.resources.IBuildConfiguration; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; @@ -154,7 +152,9 @@ public class QtBuildConfiguration extends CBuildConfiguration { cmd.add(getProjectFile().toString()); try { - Process proc = new ProcessBuilder(cmd).directory(getBuildDirectory().toFile()).start(); + ProcessBuilder procBuilder = new ProcessBuilder(cmd).directory(getProjectFile().getParent().toFile()); + getToolChain().setEnvironment(procBuilder.environment()); + Process proc = procBuilder.start(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()))) { properties = new HashMap<>(); for (String line = reader.readLine(); line != null; line = reader.readLine()) { @@ -179,6 +179,10 @@ public class QtBuildConfiguration extends CBuildConfiguration { IScannerInfo info = super.getScannerInfo(resource); if (info == null) { String cxx = getProperty("QMAKE_CXX"); //$NON-NLS-1$ + if (cxx == null) { + Activator.log("No QMAKE_CXX for " + qtInstall.getSpec()); //$NON-NLS-1$ + return null; + } String[] cxxSplit = cxx.split(" "); //$NON-NLS-1$ String command = cxxSplit[0]; diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationDelegate.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationDelegate.java new file mode 100644 index 00000000000..736c2396663 --- /dev/null +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationDelegate.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * 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.qt.core; + +import org.eclipse.cdt.internal.qt.core.build.QtBuildConfigurationFactory; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.launchbar.core.target.ILaunchTarget; +import org.eclipse.launchbar.core.target.launch.LaunchConfigurationTargetedDelegate; + +public abstract class QtLaunchConfigurationDelegate extends LaunchConfigurationTargetedDelegate { + + @Override + public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, ILaunchTarget target, + IProgressMonitor monitor) throws CoreException { + QtBuildConfiguration qtBuildConfig = getQtBuildConfiguration(configuration, mode, target, monitor); + + // Set it as active + IProject project = qtBuildConfig.getProject(); + IProjectDescription desc = project.getDescription(); + desc.setActiveBuildConfig(qtBuildConfig.getBuildConfiguration().getName()); + project.setDescription(desc, monitor); + + // And build + return superBuildForLaunch(configuration, mode, monitor); + } + + @Override + protected IProject[] getBuildOrder(ILaunchConfiguration configuration, String mode) throws CoreException { + // 1. Extract project from configuration + // TODO dependencies too. + IProject project = configuration.getMappedResources()[0].getProject(); + return new IProject[] { project }; + } + + protected QtBuildConfiguration getQtBuildConfiguration(ILaunchConfiguration configuration, String mode, + ILaunchTarget target, IProgressMonitor monitor) throws CoreException { + // Find the Qt build config + IProject project = configuration.getMappedResources()[0].getProject(); + return QtBuildConfigurationFactory.getConfig(project, mode, target, monitor); + } + +} diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigProvider.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationProvider.java similarity index 58% rename from qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigProvider.java rename to qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationProvider.java index 69bac52394c..8353a4e2241 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalLaunchConfigProvider.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtLaunchConfigurationProvider.java @@ -1,55 +1,35 @@ -/******************************************************************************* - * 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.internal.qt.core.launch; +package org.eclipse.cdt.qt.core; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import org.eclipse.cdt.internal.qt.core.launch.QtLaunchDescriptor; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; -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.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. - */ -public class QtLocalLaunchConfigProvider extends AbstractLaunchConfigProvider { +public abstract class QtLaunchConfigurationProvider extends AbstractLaunchConfigProvider { private Map configs = new HashMap<>(); - @Override - public boolean supports(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException { - return ILaunchTargetManager.localLaunchTargetTypeId.equals(target.getTypeId()); - } - - @Override - public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, ILaunchTarget target) - throws CoreException { - return DebugPlugin.getDefault().getLaunchManager() - .getLaunchConfigurationType(QtLocalRunLaunchConfigDelegate.TYPE_ID); - } - @Override public ILaunchConfiguration getLaunchConfiguration(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException { - ILaunchConfiguration config = configs.get(descriptor); - if (config == null) { - config = createLaunchConfiguration(descriptor, target); - configs.put(descriptor.getAdapter(IProject.class), config); + ILaunchConfiguration config = null; + IProject project = descriptor.getAdapter(IProject.class); + if (project != null) { + config = configs.get(project); + if (config == null) { + config = createLaunchConfiguration(descriptor, target); + // launch config added will get called below to add it to the + // configs map + } } return config; } @@ -67,7 +47,9 @@ public class QtLocalLaunchConfigProvider extends AbstractLaunchConfigProvider { @Override public boolean launchConfigurationAdded(ILaunchConfiguration configuration) throws CoreException { if (ownsLaunchConfiguration(configuration)) { - + IProject project = configuration.getMappedResources()[0].getProject(); + configs.put(project, configuration); + return true; } return false; } diff --git a/qt/org.eclipse.cdt.qt.ui/META-INF/MANIFEST.MF b/qt/org.eclipse.cdt.qt.ui/META-INF/MANIFEST.MF index d01b8202fb8..82998394c24 100644 --- a/qt/org.eclipse.cdt.qt.ui/META-INF/MANIFEST.MF +++ b/qt/org.eclipse.cdt.qt.ui/META-INF/MANIFEST.MF @@ -14,6 +14,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.ui.editors, org.eclipse.ui.workbench.texteditor, org.eclipse.jface.text, + org.eclipse.debug.ui;bundle-version="3.11.100", org.eclipse.cdt.ui, org.eclipse.cdt.core, org.eclipse.cdt.qt.core diff --git a/qt/org.eclipse.cdt.qt.ui/plugin.xml b/qt/org.eclipse.cdt.qt.ui/plugin.xml index 6abb4a83bb7..4d873df09d8 100644 --- a/qt/org.eclipse.cdt.qt.ui/plugin.xml +++ b/qt/org.eclipse.cdt.qt.ui/plugin.xml @@ -80,4 +80,12 @@ name="%preferences.qt.name"> + + + + diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/launch/QtLocalLaunchConfigurationTabGroup.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/launch/QtLocalLaunchConfigurationTabGroup.java new file mode 100644 index 00000000000..54148d744db --- /dev/null +++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/launch/QtLocalLaunchConfigurationTabGroup.java @@ -0,0 +1,14 @@ +package org.eclipse.cdt.internal.qt.ui.launch; + +import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; +import org.eclipse.debug.ui.ILaunchConfigurationDialog; +import org.eclipse.debug.ui.ILaunchConfigurationTab; + +public class QtLocalLaunchConfigurationTabGroup extends AbstractLaunchConfigurationTabGroup { + + @Override + public void createTabs(ILaunchConfigurationDialog dialog, String mode) { + setTabs(new ILaunchConfigurationTab[0]); + } + +}