Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 358832

Summary: Includes and Symbols tabs do not remember selected language
Product: [Tools] CDT Reporter: Eugene Ostroukhov <eostroukhov>
Component: cdt-buildAssignee: Andrew Gvozdev <angvoz.dev>
Status: VERIFIED FIXED QA Contact: Andrew Gvozdev <angvoz.dev>
Severity: enhancement    
Priority: P3 CC: cdtdoug, malaperle
Version: 8.0   
Target Milestone: 8.0.2   
Hardware: PC   
OS: All   
Whiteboard:
Bug Depends on: 359176    
Bug Blocks:    
Attachments:
Description Flags
Suggested implementation
none
Update patch cdtdoug: iplog+

Description Eugene Ostroukhov CLA 2011-09-25 22:02:24 EDT
Created attachment 203979 [details]
Suggested implementation

1. Select C++ on the includes tab
2. Switch to "Symbols" tab. Note that selected language is now C (or any other language that is first)
3. Switch back to "Includes" tab and note that selected language is now "Assembly"

I suggest changing this behavior so:
1. Both pages remember selected language.
2. They use the same language when user switches between them (so the user can configure "Includes" for C++ and then switch to "Symbols" to configure symbols for the same language).

Suggested implementation will also retain language selection between property dialog invocations.
Comment 1 Andrew Gvozdev CLA 2011-09-26 09:01:37 EDT
The patch looks good except that the name of local variable "firstItem" stops making sense. Could you rename it appropriately? Well, if I started picking on names, also, I'd rather see a bit more descriptive name like "selectedLanguageId" or "currentLanguageId" for the new field (instead of "languageId").
Comment 2 Eugene Ostroukhov CLA 2011-09-26 23:04:41 EDT
Created attachment 204044 [details]
Update patch

Please find attached updated patch.
Comment 3 Andrew Gvozdev CLA 2011-09-27 09:10:06 EDT
I had already committed the patch on master but then encountered NPE while doing monkey testing for 8.0.X. Create Executable XL C/C++ project and try to select Paths and Symbols in its properties. Please, submit separate patch to fix this issue.

java.lang.NullPointerException
	at org.eclipse.cdt.ui.newui.AbstractLangsListTab.updateData(AbstractLangsListTab.java:396)
	at org.eclipse.cdt.ui.newui.AbstractLangsListTab.createControls(AbstractLangsListTab.java:226)
	at org.eclipse.cdt.ui.newui.IncludeTab.createControls(IncludeTab.java:86)
	at org.eclipse.cdt.ui.newui.AbstractCPropertyTab.createControls(AbstractCPropertyTab.java:135)
	at org.eclipse.cdt.ui.newui.AbstractPage.loadTab(AbstractPage.java:1105)
	at org.eclipse.cdt.ui.newui.AbstractPage.loadExtensionsSynchronized(AbstractPage.java:1052)
	at org.eclipse.cdt.ui.newui.AbstractPage.createWidgets(AbstractPage.java:360)
	at org.eclipse.cdt.ui.newui.AbstractPage.contentForCDT(AbstractPage.java:346)
	at org.eclipse.cdt.ui.newui.AbstractPage.createContents(AbstractPage.java:244)
	at org.eclipse.jface.preference.PreferencePage.createControl(PreferencePage.java:232)
	at org.eclipse.jface.preference.PreferenceDialog.createPageControl(PreferenceDialog.java:1501)
	at org.eclipse.jface.preference.PreferenceDialog$14.run(PreferenceDialog.java:1258)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.preference.PreferenceDialog.showPage(PreferenceDialog.java:1252)
	at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.showPage(FilteredPreferenceDialog.java:674)
	at org.eclipse.jface.preference.PreferenceDialog$10.run(PreferenceDialog.java:708)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.jface.preference.PreferenceDialog$9.selectionChanged(PreferenceDialog.java:704)
	at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:888)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:886)
	at org.eclipse.jface.viewers.StructuredViewer.handlePostSelect(StructuredViewer.java:1226)
	at org.eclipse.jface.viewers.StructuredViewer$5.widgetSelected(StructuredViewer.java:1251)
	at org.eclipse.jface.util.OpenStrategy.firePostSelectionEvent(OpenStrategy.java:262)
	at org.eclipse.jface.util.OpenStrategy.access$5(OpenStrategy.java:256)
	at org.eclipse.jface.util.OpenStrategy$3.run(OpenStrategy.java:433)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.ui.dialogs.PropertyDialogAction.run(PropertyDialogAction.java:158)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100)
	at org.eclipse.swt.widgets.Widget.wmSysChar(Widget.java:2434)
	at org.eclipse.swt.widgets.Control.WM_SYSCHAR(Control.java:5179)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4604)
	at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:5937)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Comment 4 CDT Genie CLA 2011-09-27 09:23:02 EDT
*** cdt git genie on behalf of Eugene Ostroukhov ***

    bug 358832: Includes and Symbols tabs do not remember selected language

[*] http://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=8bfbc64c7e4c6503a219aadd67821328a1cba9d5
Comment 5 CDT Genie CLA 2011-09-27 12:23:10 EDT
*** cdt git genie on behalf of Eugene Ostroukhov ***

    bug 358832: Includes and Symbols tabs do not remember selected language

[*] http://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=af1c5a901fe350bb27baf0282e40be6f2aa882b8
Comment 6 Andrew Gvozdev CLA 2011-09-28 10:22:43 EDT
(In reply to comment #3)
> java.lang.NullPointerException
The problem corrected with bug 359176.
Comment 7 Marc-André Laperle CLA 2012-01-22 11:09:34 EST
Verified in 8.0.2 RC1.

BTW, maybe the value of "Show built-in values" should be remembered as well? Opinions?