From 326759fe8cc0c3d61270f0fe580277d4706a9ef0 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 29 Jan 2016 15:08:21 -0500 Subject: [PATCH] Qt fixes for scanner info and launching. Qt builds now clear the scanner info cache so that it reloads. Also added Environment tab for Qt Local launch so that you can override the environment. Supported for 'run'. Change-Id: Id6a04a564587411b6a5846f00045f79f5696bfb8 --- .../eclipse/cdt/build/core/CBuildConfiguration.java | 2 +- .../cdt/internal/qt/core/build/QtBuilder.java | 7 +++++++ .../core/launch/QtLocalRunLaunchConfigDelegate.java | 9 +++++++++ .../eclipse/cdt/qt/core/QtBuildConfiguration.java | 12 ++++++++++++ qt/org.eclipse.cdt.qt.ui/plugin.xml | 9 +++++++++ .../qt/ui/resources/QtResourceChangeListener.java | 5 +++-- 6 files changed, 41 insertions(+), 3 deletions(-) diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java index 2196eb63354..6a5f4c5e2c9 100644 --- a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java +++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java @@ -155,7 +155,7 @@ public abstract class CBuildConfiguration extends PlatformObject { } public void clearScannerInfoCache() throws CoreException { - scannerInfoCache = null; + scannerInfoCache.clear(); } public Collection getConsoleParsers() throws CoreException { 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 2218c78f074..1078f102c7d 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 @@ -89,6 +89,13 @@ public class QtBuilder extends IncrementalProjectBuilder { console.monitor(process, null, buildDir); project.refreshLocal(IResource.DEPTH_INFINITE, monitor); + + // clear the scanner info cache + // TODO be more surgical about what to clear based on what was + // built. + qtConfig.clearScannerInfoCache(); + + console.writeOutput("Complete.\n"); return new IProject[] { project }; } catch (IOException e) { throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Building " + project.getName(), e)); //$NON-NLS-1$ 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 37049e0b434..e0c5e0fdb36 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 @@ -21,6 +21,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchManager; import org.eclipse.launchbar.core.target.ILaunchTarget; import org.eclipse.launchbar.core.target.launch.ITargetedLaunch; @@ -44,6 +45,14 @@ public class QtLocalRunLaunchConfigDelegate extends QtLaunchConfigurationDelegat Map env = builder.environment(); qtBuildConfig.setProgramEnvironment(env); + Map configEnv = configuration.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, + (Map) null); + if (configEnv != null) { + for (Map.Entry entry : configEnv.entrySet()) { + env.put(entry.getKey(), entry.getValue()); + } + } + try { Process process = builder.start(); DebugPlugin.newProcess(launch, process, "main"); diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java index fff397ac7c9..669000a309a 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java @@ -211,6 +211,12 @@ public class QtBuildConfiguration extends CBuildConfiguration { args.add(resource.getLocation().toString()); String[] includePaths = getProperty("INCLUDEPATH").split(" "); //$NON-NLS-1$ //$NON-NLS-2$ + for (int i = 0; i < includePaths.length; ++i) { + Path path = Paths.get(includePaths[i]); + if (!path.isAbsolute()) { + includePaths[i] = getBuildDirectory().resolve(path).toString(); + } + } ILanguage language = LanguageManager.getInstance() .getLanguage(CCorePlugin.getContentType(getProject(), resource.getName()), getProject()); // $NON-NLS-1$ @@ -223,4 +229,10 @@ public class QtBuildConfiguration extends CBuildConfiguration { return info; } + @Override + public void clearScannerInfoCache() throws CoreException { + super.clearScannerInfoCache(); + properties = null; + } + } diff --git a/qt/org.eclipse.cdt.qt.ui/plugin.xml b/qt/org.eclipse.cdt.qt.ui/plugin.xml index 476e89cc8db..499cac7cf83 100644 --- a/qt/org.eclipse.cdt.qt.ui/plugin.xml +++ b/qt/org.eclipse.cdt.qt.ui/plugin.xml @@ -95,6 +95,15 @@ + + + +