From e7ef5fb9ac79353032ff62fbe61511b7681029bd Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Wed, 27 Jan 2016 15:39:58 -0500 Subject: [PATCH] Qt - better handling when a Qt install hasn't been added. Used to NPE, now prints a message on the build console at build time. Change-Id: Ia38161dcc393506e44d4c4fa7e12a25f55e44bd0 --- .../eclipse/cdt/internal/qt/core/Messages.java | 15 +++++++++++++++ .../build/QtBuildConfigurationFactory.java | 10 ++++++---- .../cdt/internal/qt/core/build/QtBuilder.java | 18 ++++++++++++------ .../cdt/internal/qt/core/messages.properties | 1 + .../qt/core/QtLaunchConfigurationDelegate.java | 10 ++++++---- 5 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Messages.java create mode 100644 qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/messages.properties diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Messages.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Messages.java new file mode 100644 index 00000000000..f279816ae76 --- /dev/null +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Messages.java @@ -0,0 +1,15 @@ +package org.eclipse.cdt.internal.qt.core; + +import org.eclipse.osgi.util.NLS; + +public class Messages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.qt.core.messages"; //$NON-NLS-1$ + public static String QtBuilder_0; + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, Messages.class); + } + + private Messages() { + } +} 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 bbdd12f450a..22c4fe143a6 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 @@ -107,10 +107,12 @@ public class QtBuildConfigurationFactory implements IAdapterFactory { // return it if it exists already for (IBuildConfiguration config : project.getBuildConfigs()) { QtBuildConfiguration qtConfig = config.getAdapter(QtBuildConfiguration.class); - IQtInstall qtInstall = qtConfig.getQtInstall(); - if (qtInstall != null && qtInstallManager.supports(qtInstall, target) - && launchMode.equals(qtConfig.getLaunchMode())) { - return qtConfig; + if (qtConfig != null) { + IQtInstall qtInstall = qtConfig.getQtInstall(); + if (qtInstall != null && qtInstallManager.supports(qtInstall, target) + && launchMode.equals(qtConfig.getLaunchMode())) { + return qtConfig; + } } } 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 803923d82e4..2218c78f074 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 @@ -16,6 +16,7 @@ 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.internal.qt.core.Messages; import org.eclipse.cdt.qt.core.QtBuildConfiguration; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -37,6 +38,11 @@ public class QtBuilder extends IncrementalProjectBuilder { try { IConsoleService console = Activator.getService(IConsoleService.class); QtBuildConfiguration qtConfig = getBuildConfig().getAdapter(QtBuildConfiguration.class); + if (qtConfig == null) { + // Qt hasn't been configured yet print a message and bale + console.writeError(Messages.QtBuilder_0); + return null; + } IToolChain toolChain = qtConfig.getToolChain(); Path buildDir = qtConfig.getBuildDirectory(); @@ -50,7 +56,7 @@ public class QtBuilder extends IncrementalProjectBuilder { command.add(config); } - IFile projectFile = qtConfig.getProject().getFile("main.pro"); + IFile projectFile = qtConfig.getProject().getFile("main.pro"); //$NON-NLS-1$ command.add(projectFile.getLocation().toOSString()); ProcessBuilder processBuilder = new ProcessBuilder(command).directory(buildDir.toFile()); @@ -68,14 +74,14 @@ public class QtBuilder extends IncrementalProjectBuilder { // run make // TODO obviously hardcoding here boolean isWin = Platform.getOS().equals(Platform.OS_WIN32); - String make = isWin ? "C:/Qt/Tools/mingw492_32/bin/mingw32-make" : "make"; + String make = isWin ? "C:/Qt/Tools/mingw492_32/bin/mingw32-make" : "make"; //$NON-NLS-1$ //$NON-NLS-2$ ProcessBuilder procBuilder = new ProcessBuilder(make).directory(buildDir.toFile()); if (isWin) { // Need to put the toolchain into env Map env = procBuilder.environment(); - String path = env.get("PATH"); - path = "C:/Qt/Tools/mingw492_32/bin;" + path; - env.put("PATH", path); + String path = env.get("PATH"); //$NON-NLS-1$ + path = "C:/Qt/Tools/mingw492_32/bin;" + path; //$NON-NLS-1$ + env.put("PATH", path); //$NON-NLS-1$ } toolChain.setEnvironment(procBuilder.environment()); Process process = procBuilder.start(); @@ -85,7 +91,7 @@ public class QtBuilder extends IncrementalProjectBuilder { project.refreshLocal(IResource.DEPTH_INFINITE, monitor); return new IProject[] { project }; } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Building " + project.getName(), 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/messages.properties b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/messages.properties new file mode 100644 index 00000000000..f0d9d351b15 --- /dev/null +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/messages.properties @@ -0,0 +1 @@ +QtBuilder_0=Error: Qt has not been configured.\nPlease add a Qt install in the Qt preferences page.\n 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 index 736c2396663..0001dd62c27 100644 --- 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 @@ -24,10 +24,12 @@ public abstract class QtLaunchConfigurationDelegate extends LaunchConfigurationT 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); + if (qtBuildConfig != null) { + IProject project = qtBuildConfig.getProject(); + IProjectDescription desc = project.getDescription(); + desc.setActiveBuildConfig(qtBuildConfig.getBuildConfiguration().getName()); + project.setDescription(desc, monitor); + } // And build return superBuildForLaunch(configuration, mode, monitor);