From e28830a10b16122fa7825405b7fae52d50c22fad Mon Sep 17 00:00:00 2001 From: Eugene Ostroukhov Date: Mon, 26 Sep 2011 09:45:55 -0400 Subject: [PATCH 1/7] bug 358829: AbstractPage-derived pages should remember current tab --- .../eclipse/cdt/ui/newui/AbstractPage.java | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java index 24d1a6a956e..31afc4191f8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractPage.java @@ -151,6 +151,8 @@ implements private static final String PREF_ASK_REINDEX = "askReindex"; //$NON-NLS-1$ private Map loadedIcons = new HashMap(); + private static Map, Class> recentTabs = + new HashMap, Class>(); private final Image IMG_WARN = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_REFACTORING_WARNING); /* @@ -362,20 +364,40 @@ implements // Set listener after data load, to avoid firing // selection event on not-initialized tab items if (folder != null) { - folder.addSelectionListener(new SelectionAdapter() { - @Override + folder.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(org.eclipse.swt.events.SelectionEvent event) { - if (folder.getSelection().length > 0 ) { - ICPropertyTab newTab = (ICPropertyTab)folder.getSelection()[0].getData(); - if (newTab != null && currentTab != newTab) { - if (currentTab != null) currentTab.handleTabEvent(ICPropertyTab.VISIBLE, null); - currentTab = newTab; - currentTab.handleTabEvent(ICPropertyTab.VISIBLE, NOT_NULL); - } - } - } - }); - if (folder.getItemCount() > 0) folder.setSelection(0); + if (folder.getSelection().length > 0 ) { + updateSelectedTab(); + } + } + }); + if (folder.getItemCount() > 0) { + int selectedTab = 0; + Class recentTab = recentTabs.get(getClass()); + if (recentTab != null) { + TabItem[] tabs = folder.getItems(); + for (int i = 0; i < tabs.length; i++) { + TabItem control = tabs[i]; + if (recentTab.isInstance(control.getData())) { + selectedTab = i; + break; + } + } + } + folder.setSelection(selectedTab); + updateSelectedTab(); + } + } + } + + private void updateSelectedTab() { + ICPropertyTab newTab = (ICPropertyTab)folder.getSelection()[0].getData(); + if (newTab != null && currentTab != newTab) { + recentTabs.put(getClass(), newTab.getClass()); + if (currentTab != null) currentTab.handleTabEvent(ICPropertyTab.VISIBLE, null); + currentTab = newTab; + currentTab.handleTabEvent(ICPropertyTab.VISIBLE, NOT_NULL); } } /** From b30bb21b5357c96c378c742d8dad0934d1942275 Mon Sep 17 00:00:00 2001 From: Eugene Ostroukhov Date: Mon, 26 Sep 2011 10:47:05 -0400 Subject: [PATCH 2/7] bug 358835: Tools Settings page forgets selected node --- .../cdt/managedbuilder/ui/properties/ToolSettingsTab.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java index d4867f9d08e..e7db85b3481 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ToolSettingsTab.java @@ -70,6 +70,8 @@ import org.eclipse.swt.widgets.ScrollBar; * @noinstantiate This class is not intended to be instantiated by clients. */ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPreferencePageContainer { + private static ToolListElement selectedElement; + /* * Dialog widgets */ @@ -87,7 +89,6 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe private Map> configToPageListMap; private IPreferenceStore settingsStore; private AbstractToolSettingUI currentSettingsPage; - private ToolListElement selectedElement; private ToolListContentProvider listprovider; private Object propertyObject; @@ -377,7 +378,6 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe @Override public void setVisible(boolean visible){ if(visible){ - selectedElement = null; updateData(page.getResDesc()); } super.setVisible(visible); @@ -414,7 +414,7 @@ public class ToolSettingsTab extends AbstractCBuildPropertyTab implements IPrefe // with an object in the new element list. // Otherwise, select the first tool in the tree Object primaryObject = null; - if (selectedElement != null) { + if (selectedElement != null && newElements != null) { selectedElement = matchSelectionElement(selectedElement, newElements); } From 14939e4ab605da5de185999111cd0d21ae9e45bd Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Mon, 26 Sep 2011 12:15:42 -0400 Subject: [PATCH 3/7] bug 355601: Make Targets Not Found In Nested Folders --- .../cdt/make/ui/views/FilterEmtpyFoldersAction.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java index 661c724468e..d6fc6d5d847 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/FilterEmtpyFoldersAction.java @@ -75,17 +75,12 @@ public class FilterEmtpyFoldersAction extends Action { if(haveTargets[0]) { return false; //We found what we were looking for } + if(proxy.getType() != IResource.FOLDER) { return true; //We only look at folders for content } - IContainer folder = (IContainer) proxy.requestResource(); - if (CCorePlugin.showSourceRootsAtTopOfProject() && !(folder instanceof IProject)) { - boolean isSourceEntry = MakeContentProvider.isSourceEntry(folder); - if (isSourceEntry) - return false; - } - + IContainer folder = (IContainer) proxy.requestResource(); IMakeTarget [] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(folder); if(targets != null && targets.length > 0) { haveTargets[0] = true; From f73fa36c10642a5b4eddc2de6fb524a9c458d29d Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 26 Sep 2011 20:02:35 -0700 Subject: [PATCH 4/7] Tightened a test case and fixed an uncovered bug. --- .../cdt/internal/formatter/CodeFormatterVisitor.java | 4 +++- .../ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java index c11b9330715..2368c0aee5c 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java @@ -918,8 +918,10 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, */ @Override public int visit(IASTStatement node) { - if (startsWithMacroExpansion(node)) + if (scribe.scanner.getCurrentPosition() <= node.getFileLocation().getNodeOffset() && + startsWithMacroExpansion(node)) { scribe.printCommentPreservingNewLines(); + } if (!startNode(node)) { return PROCESS_SKIP; } int indentLevel= scribe.indentationLevel; try { diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java index c8465829e89..989fa1fac6c 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java @@ -2472,8 +2472,10 @@ public class CodeFormatterTest extends BaseUITestCase { //#define MY_MACRO switch (0) case 0: default: if (bool x = false) ; else GetStream() // //void test() { - //MY_MACRO << "Loooooooooooooooooooong string literal" << " another literal."; - //MY_MACRO << "Looooooooooooooooooooong string literal" << " another literal."; + //MY_MACRO + //<< "Loooooooooooooooooooong string literal" << " another literal."; + //MY_MACRO + //<< "Looooooooooooooooooooong string literal" << " another literal."; //} //struct Stream { From 8bfbc64c7e4c6503a219aadd67821328a1cba9d5 Mon Sep 17 00:00:00 2001 From: Eugene Ostroukhov Date: Tue, 27 Sep 2011 08:29:24 -0400 Subject: [PATCH 5/7] bug 358832: Includes and Symbols tabs do not remember selected language --- .../eclipse/cdt/ui/newui/AbstractLangsListTab.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java index 7528b6f7fde..354891faf92 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractLangsListTab.java @@ -35,7 +35,6 @@ import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -119,6 +118,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { }; private static final Comparator comp = CDTListComparator.getInstance(); + private static String selectedLanguageId; private final static Image IMG_FOLDER = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_FOLDER); private final static Image IMG_INCLUDES_FOLDER = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_INCLUDES_FOLDER); @@ -291,6 +291,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { ICLanguageSetting langSetting = (ICLanguageSetting) items[0].getData(); if (langSetting != null) { lang = langSetting; + selectedLanguageId = lang.getLanguageId(); update(); } } @@ -372,7 +373,7 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { if (rcDes == null || !canBeVisible()) return; updateExport(); langTree.removeAll(); - TreeItem firstItem = null; + TreeItem selectedItem = null; ls = getLangSetting(rcDes); if (ls != null) { Arrays.sort(ls, CDTListComparator.getInstance()); @@ -392,15 +393,15 @@ public abstract class AbstractLangsListTab extends AbstractCPropertyTab { langId = langSetting.getName(); t.setText(0, langId); t.setData(langSetting); - if (firstItem == null) { - firstItem = t; + if (selectedItem == null || langSetting.getLanguageId().equals(selectedLanguageId)) { + selectedItem = t; lang = langSetting; } } } - if (firstItem != null && table != null) { - langTree.setSelection(firstItem); + if (selectedItem != null && table != null) { + langTree.setSelection(selectedItem); } } update(); From fe0611ef330dfd6c08aec5a8eeb8566e844ff990 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Tue, 27 Sep 2011 11:15:25 -0400 Subject: [PATCH 6/7] bug 352166: Expressed IMarkerGenerator severity constants via corresponding IMarker ones. --- .../src/org/eclipse/cdt/core/IMarkerGenerator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IMarkerGenerator.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IMarkerGenerator.java index 3c3cc8f0828..00981d17e01 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IMarkerGenerator.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IMarkerGenerator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2009 QNX Software Systems and others. + * Copyright (c) 2000, 2011 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 @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.core; +import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; /** @@ -17,9 +18,9 @@ import org.eclipse.core.resources.IResource; * @noextend This interface is not intended to be extended by clients. */ public interface IMarkerGenerator { - int SEVERITY_INFO = 0; - int SEVERITY_WARNING = 1; - int SEVERITY_ERROR_RESOURCE = 2; + int SEVERITY_INFO = IMarker.SEVERITY_INFO; // 0 + int SEVERITY_WARNING = IMarker.SEVERITY_WARNING; // 1 + int SEVERITY_ERROR_RESOURCE = IMarker.SEVERITY_ERROR; // 2 int SEVERITY_ERROR_BUILD = 3; /** From a4d4dec51fd31d09a92c669267d069b333b84ec9 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Tue, 27 Sep 2011 16:41:31 -0400 Subject: [PATCH 7/7] bug 359140: Allow ErrorParserManager create workspace level markers --- .../tests/ErrorParserManagerTest.java | 23 ++++++++++++++++++- .../eclipse/cdt/core/ErrorParserManager.java | 21 ++++++++++------- .../eclipse/cdt/core/ProblemMarkerInfo.java | 3 ++- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserManagerTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserManagerTest.java index d13659d8cdc..ba7b678556c 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserManagerTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserManagerTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 QNX Software Systems and others. + * Copyright (c) 2008, 2011 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 @@ -30,6 +30,7 @@ import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.core.internal.registry.ExtensionRegistry; +import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceDescription; @@ -305,4 +306,24 @@ public class ErrorParserManagerTest extends TestCase { assertEquals(" la la 99 ",end); } + public static class TestParser4 implements IErrorParser { + public boolean processLine(String line, ErrorParserManager eoParser) { + ProblemMarkerInfo problemMarkerInfo = new ProblemMarkerInfo(null, 0, "Workspace level marker", IMarker.SEVERITY_INFO, null); + eoParser.addProblemMarker(problemMarkerInfo); + return true; + } + } + public void testWorkspaceLevelError() throws IOException { + String id = addErrorParserExtension("test4", TestParser4.class); + epManager = new ErrorParserManager(null, markerGenerator, new String[] { id }); + + StringBuffer buf = new StringBuffer("errorT: "); + output(buf.toString()+"\n"); + end(); + assertEquals(1, errorList.size()); + ProblemMarkerInfo problemMarkerInfo = errorList.get(0); + assertEquals("Workspace level marker", problemMarkerInfo.description); + assertTrue(problemMarkerInfo.file instanceof IWorkspaceRoot); + } + } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java index 33b7302e2bd..862c790ea04 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java @@ -118,7 +118,7 @@ public class ErrorParserManager extends OutputStream { * @param parsersIDs - array of error parsers' IDs. */ public ErrorParserManager(IProject project, IMarkerGenerator markerGenerator, String[] parsersIDs) { - this(project, project.getLocationURI(), markerGenerator, parsersIDs); + this(project, (URI)null, markerGenerator, parsersIDs); } /** @@ -154,8 +154,10 @@ public class ErrorParserManager extends OutputStream { if (baseDirectoryURI != null) fBaseDirectoryURI = baseDirectoryURI; - else + else if (project != null) fBaseDirectoryURI = project.getLocationURI(); + else + fBaseDirectoryURI = org.eclipse.core.filesystem.URIUtil.toURI(System.getProperty("user.dir")); // CWD //$NON-NLS-1$ } private void enableErrorParsers(String[] parsersIDs) { @@ -420,12 +422,15 @@ outer: // Try to find best match considering known partial path if (file==null) { path = path.setDevice(null); - IProject[] prjs = new IProject[] { fProject }; - IFile[] files = ResourceLookup.findFilesByName(path, prjs, false); - if (files.length == 0) - files = ResourceLookup.findFilesByName(path, prjs, /* ignoreCase */ true); - if (files.length == 0) { - prjs = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + IFile[] files = null; + if (fProject != null) { + IProject[] prjs = new IProject[] { fProject }; + files = ResourceLookup.findFilesByName(path, prjs, false); + if (files.length == 0) + files = ResourceLookup.findFilesByName(path, prjs, /* ignoreCase */ true); + } + if (files == null || files.length == 0) { + IProject[] prjs = ResourcesPlugin.getWorkspace().getRoot().getProjects(); files = ResourceLookup.findFilesByName(path, prjs, false); if (files.length == 0) files = ResourceLookup.findFilesByName(path, prjs, /* ignoreCase */ true); diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ProblemMarkerInfo.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ProblemMarkerInfo.java index b33287aac0f..b44f270c0b5 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ProblemMarkerInfo.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ProblemMarkerInfo.java @@ -19,6 +19,7 @@ import java.util.Map; import org.eclipse.cdt.core.resources.ACBuilder; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; /** @@ -52,7 +53,7 @@ public class ProblemMarkerInfo { * @param variableName - the name of the variable involved in the error if any. */ public ProblemMarkerInfo(IResource file, int lineNumber, String description, int severity, String variableName) { - this.file = file; + this.file = (file != null) ? file : ResourcesPlugin.getWorkspace().getRoot(); this.lineNumber = lineNumber; this.description = description; this.severity = severity;