From fe5f6d43f25753ca501173901ddc30eb2f6faa51 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Mon, 28 May 2012 16:01:05 -0400 Subject: [PATCH 1/4] Bug 380315: [visualizer] Enablement of runControl operation in the multicore visualizer toolbar are always enabled Change-Id: Ib3e5b2ae931d0e972f6e1a239eb240244f05099c Reviewed-on: https://git.eclipse.org/r/6135 Reviewed-by: Marc Khouzam IP-Clean: Marc Khouzam Tested-by: Marc Khouzam --- .../internal/ui/view/MulticoreVisualizer.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java index 2aca3f6ad35..e2debc25747 100755 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java @@ -297,21 +297,13 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer { if (! m_actionsInitialized) return; - // TODO: do we need any special enabling code here? - // Seems like we can rely on the enabling done by the DebugView itself, - // since we've associated these actions with it. - boolean enabled = hasSelection(); + m_selectAllAction.setEnabled(enabled); + m_refreshAction.setEnabled(enabled); - m_resumeAction.setEnabled(enabled); - m_suspendAction.setEnabled(enabled); - m_terminateAction.setEnabled(enabled); - - m_stepReturnAction.setEnabled(enabled); - m_stepOverAction.setEnabled(enabled); - m_stepIntoAction.setEnabled(enabled); - m_dropToFrameAction.setEnabled(enabled); - + // We should not change the enablement of the debug view + // actions, as they are automatically enabled/disabled + // by the platform. } /** Updates actions specific to context menu. */ From 1bcae4bb9b9eec6b98252a64464115c00028f423 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Tue, 29 May 2012 17:36:32 -0400 Subject: [PATCH 2/4] bug 380956: The CDT GCC Build Output Parser should not require 'make's recursion depth indicators --- .../tests/ErrorParserFileMatchingTest.java | 30 +++++++++++++++++++ .../cdt/internal/errorparsers/CWDLocator.java | 19 +++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java index 0f7b4c86998..d5475bdd7b7 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java @@ -1205,6 +1205,36 @@ public class ErrorParserFileMatchingTest extends TestCase { assertEquals("error",problemMarkerInfo.description); } + /** + * Checks if output of '-n'/'--just-print' or '-w'/'--print-directory' options of make can be recognized. + * + * @throws Exception... + */ + public void testPushPop_WithNoLevel() throws Exception { + String fileName = getName() + ".c"; + + ResourceHelper.createFolder(fProject, "Folder"); + ResourceHelper.createFolder(fProject, "Folder/SubFolder"); + + ResourceHelper.createFile(fProject, fileName); + ResourceHelper.createFile(fProject, "Folder/"+fileName); + ResourceHelper.createFile(fProject, "Folder/SubFolder/"+fileName); + + String lines = "make: Entering directory `Folder'\n" + + "make: Entering directory `SubFolder'\n" + + "make: Leaving directory `SubFolder'\n" + + fileName+":1:error\n"; + + String[] errorParsers = {CWD_LOCATOR_ID, mockErrorParserId }; + parseOutput(fProject, fProject.getLocation(), errorParsers, lines); + assertEquals(1, errorList.size()); + + ProblemMarkerInfo problemMarkerInfo = errorList.get(0); + assertEquals("L/FindMatchingFilesTest/Folder/"+fileName,problemMarkerInfo.file.toString()); + assertEquals(1,problemMarkerInfo.lineNumber); + assertEquals("error",problemMarkerInfo.description); + } + /** * Checks if a file from error output can be found. * diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java index e1324c82e04..ce6125841c4 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java @@ -24,14 +24,14 @@ import org.eclipse.core.runtime.Path; */ public class CWDLocator extends AbstractErrorParser { private static boolean enabled = true; - + @Override public boolean processLine(String line, ErrorParserManager manager) { int lineNumber = manager.getLineCounter(); // enable on first line (can be previously disabled if processed parallel build) if (lineNumber==1) enabled = true; - + if (enabled) return super.processLine(line, manager); return false; @@ -53,7 +53,8 @@ public class CWDLocator extends AbstractErrorParser { } return false; } - }, new ErrorPattern("make\\[(.*)\\]: Entering directory `(.*)'", 0, 0) { //$NON-NLS-1$ + }, + new ErrorPattern("make\\[(.*)\\]: Entering directory `(.*)'", 0, 0) { //$NON-NLS-1$ @Override protected boolean recordError(Matcher matcher, ErrorParserManager eoParser) { int level; @@ -74,7 +75,17 @@ public class CWDLocator extends AbstractErrorParser { eoParser.pushDirectory(new Path(dir)); return true; } - }, new ErrorPattern("make\\[.*\\]: Leaving directory", 0, 0) { //$NON-NLS-1$ + }, + // This is emitted by GNU make using options -n, --just-print or -w, --print-directory. + new ErrorPattern("make: Entering directory `(.*)'", 0, 0) { //$NON-NLS-1$ + @Override + protected boolean recordError(Matcher matcher, ErrorParserManager eoParser) { + String dir = matcher.group(1); + eoParser.pushDirectory(new Path(dir)); + return true; + } + }, + new ErrorPattern("make(\\[.*\\])?: Leaving directory", 0, 0) { //$NON-NLS-1$ @Override protected boolean recordError(Matcher matcher, ErrorParserManager eoParser) { eoParser.popDirectoryURI(); From 746e244c33465568ba28582a5965e84069962d65 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Wed, 30 May 2012 14:20:29 -0400 Subject: [PATCH 3/4] [sd90] Handle compiler specs inspection for setups with non-english locale --- .../AbstractBuiltinSpecsDetector.java | 31 ++++++++++++++++++- .../cdt/internal/core/BuildRunnerHelper.java | 4 +-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java index d4aebe96fb7..e90b22987e8 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java @@ -16,6 +16,8 @@ import java.io.OutputStream; import java.net.URI; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; import java.util.List; import org.eclipse.cdt.core.CCorePlugin; @@ -84,6 +86,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti private static final String ATTR_PARAMETER = "parameter"; //$NON-NLS-1$ private static final String ATTR_CONSOLE = "console"; //$NON-NLS-1$ + private static final String ENV_LANGUAGE = "LANGUAGE"; //$NON-NLS-1$ + private static final String ENV_LC_ALL = "LC_ALL"; //$NON-NLS-1$ + private static final int MONITOR_SCALE = 100; private static final int TICKS_REMOVE_MARKERS = 1 * MONITOR_SCALE; private static final int TICKS_RUN_FOR_ONE_LANGUAGE = 10 * MONITOR_SCALE; @@ -533,7 +538,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } } - String[] envp = BuildRunnerHelper.getEnvp(currentCfgDescription); + String[] envp = getEnvp(); // Using GMAKE_ERROR_PARSER_ID as it can handle generated error messages ErrorParserManager epm = new ErrorParserManager(currentProject, buildDirURI, markerGenerator, new String[] {GMAKE_ERROR_PARSER_ID}); @@ -567,6 +572,30 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti } } + /** + * Get array of environment variables in format "var=value". + */ + private String[] getEnvp() { + // On POSIX (Linux, UNIX) systems reset language variables to default (English) + // with UTF-8 encoding since GNU compilers can handle only UTF-8 characters. + // Include paths with locale characters will be handled properly regardless + // of the language as long as the encoding is set to UTF-8. + // Default language is set for parser because it relies on English messages + // in the output of the 'gcc -v' command. + + List envp = new ArrayList(Arrays.asList(BuildRunnerHelper.getEnvp(currentCfgDescription))); + for (Iterator iterator = envp.iterator(); iterator.hasNext();) { + String var = iterator.next(); + if (var.startsWith(ENV_LANGUAGE + '=') || var.startsWith(ENV_LC_ALL + '=')) { + iterator.remove(); + } + } + envp.add(ENV_LANGUAGE + "=C"); // override for GNU gettext //$NON-NLS-1$ + envp.add(ENV_LC_ALL + "=C.UTF-8"); // for other parts of the system libraries //$NON-NLS-1$ + + return envp.toArray(new String[envp.size()]); + } + protected int runProgramForLanguage(String languageId, String command, String[] envp, URI workingDirectoryURI, OutputStream consoleOut, OutputStream consoleErr, IProgressMonitor monitor) throws CoreException, IOException { return buildRunnerHelper.build(monitor); } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java index ec9e248bd70..970b36d7d9b 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java @@ -501,8 +501,8 @@ public class BuildRunnerHelper implements Closeable { * Get environment variables from configuration as array of "var=value" suitable * for using as "envp" with Runtime.exec(String[] cmdarray, String[] envp, File dir) * - * @param cfgDescription - configuration description - * @return String array of environment variables in format "var=value" + * @param cfgDescription - configuration description. + * @return String array of environment variables in format "var=value". Does not return {@code null}. */ public static String[] getEnvp(ICConfigurationDescription cfgDescription) { IEnvironmentVariableManager mngr = CCorePlugin.getDefault().getBuildEnvironmentManager(); From 48e9d6efea1060b3461644ba9a7642b81673861c Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Wed, 30 May 2012 16:16:49 -0400 Subject: [PATCH 4/4] [sd90] Fixed issues with resizing of the Options page for language settings providers. --- .../providers/LanguageSettingsProviderTab.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java index 0c7bd05d721..5b9f0100a0e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java @@ -31,6 +31,8 @@ import org.eclipse.jface.viewers.IDecoration; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.events.ControlEvent; +import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; @@ -592,6 +594,15 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { compositeOptionsPage = new Composite(comp, SWT.NONE); compositeOptionsPage.setLayout(new TabFolderLayout()); + compositeOptionsPage.addControlListener(new ControlListener() { + @Override + public void controlResized(ControlEvent e) { + compositeOptionsPage.setBounds(compositeOptionsPage.getParent().getClientArea()); + } + @Override + public void controlMoved(ControlEvent e) { + } + }); } /** @@ -969,7 +980,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { optionsPage.setContainer(page); optionsPage.createControl(compositeOptionsPage); optionsPage.setVisible(false); - compositeOptionsPage.setBounds(compositeOptionsPage.getParent().getClientArea()); compositeOptionsPage.layout(true); } } @@ -1015,7 +1025,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { boolean isEditable = isEditableForProject || isEditableForPrefs; currentOptionsPage.getControl().setEnabled(isEditable); compositeOptionsPage.setEnabled(isEditable); - compositeOptionsPage.setBounds(compositeOptionsPage.getParent().getClientArea()); compositeOptionsPage.layout(true); } }