diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/doxygen/DoxygenCCommentAutoEditStrategyTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/doxygen/DoxygenCCommentAutoEditStrategyTest.java index 6e9fcd3932e..2e4ed51f504 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/doxygen/DoxygenCCommentAutoEditStrategyTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/doctools/doxygen/DoxygenCCommentAutoEditStrategyTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others. + * Copyright (c) 2006, 2020 Wind River Systems, Inc. and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -12,11 +12,12 @@ * Anton Leherbauer (Wind River Systems) - initial API and implementation * Sergey Prigogin (Google) * Andrew Ferguson (Symbian) + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.ui.tests.text.doctools.doxygen; import java.util.HashMap; -import java.util.Optional; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.model.CoreModel; @@ -64,15 +65,13 @@ public class DoxygenCCommentAutoEditStrategyTest extends AbstractAutoEditTest { super.setUp(); fOptions = CCorePlugin.getOptions(); fCProject = CProjectHelper.createCCProject("test" + System.currentTimeMillis(), null); - DoxygenPreferences pref = new DoxygenPreferences(Optional.empty()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, DoxygenPreferences.DEF_DOXYGEN_USE_BRIEF_TAG); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, + DoxygenPreferences pref = new DoxygenPreferences(); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, DoxygenPreferences.DEF_DOXYGEN_USE_BRIEF_TAG); + pref.putBoolean(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, DoxygenPreferences.DEF_DOXYGEN_NEW_LINE_AFTER_BRIEF); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, - DoxygenPreferences.DEF_DOXYGEN_USE_PRE_POST_TAGS); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, - DoxygenPreferences.DEF_DOXYGEN_USE_JAVADOC_TAGS); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, DoxygenPreferences.DEF_DOXYGEN_USE_PRE_POST_TAGS); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, DoxygenPreferences.DEF_DOXYGEN_USE_JAVADOC_TAGS); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, DoxygenPreferences.DEF_DOXYGEN_USE_STRUCTURED_COMMANDS); } @@ -695,8 +694,8 @@ public class DoxygenCCommentAutoEditStrategyTest extends AbstractAutoEditTest { // */ //void foo() {} public void testAutoDocCommentBrief() throws CoreException { - DoxygenPreferences pref = new DoxygenPreferences(Optional.empty()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); + DoxygenPreferences pref = new DoxygenPreferences(); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); assertAutoEditBehaviour(); } @@ -708,9 +707,9 @@ public class DoxygenCCommentAutoEditStrategyTest extends AbstractAutoEditTest { // */ //void foo() {} public void testAutoDocCommentBriefNoNewLine() throws CoreException { - DoxygenPreferences pref = new DoxygenPreferences(Optional.empty()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, false); + DoxygenPreferences pref = new DoxygenPreferences(); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); + pref.putBoolean(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, false); assertAutoEditBehaviour(); } @@ -722,8 +721,8 @@ public class DoxygenCCommentAutoEditStrategyTest extends AbstractAutoEditTest { // */ //void foo() {} public void testAutoDocCommentStructured() throws CoreException { - DoxygenPreferences pref = new DoxygenPreferences(Optional.empty()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, true); + DoxygenPreferences pref = new DoxygenPreferences(); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, true); assertAutoEditBehaviour(); } @@ -736,9 +735,9 @@ public class DoxygenCCommentAutoEditStrategyTest extends AbstractAutoEditTest { // */ //void foo() {} public void testAutoDocCommentNoJavadoc() throws CoreException { - DoxygenPreferences pref = new DoxygenPreferences(Optional.empty()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, false); + DoxygenPreferences pref = new DoxygenPreferences(); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, false); assertAutoEditBehaviour(); } @@ -753,9 +752,9 @@ public class DoxygenCCommentAutoEditStrategyTest extends AbstractAutoEditTest { // */ //void foo() {} public void testAutoDocCommentPrePostTags() throws CoreException { - DoxygenPreferences pref = new DoxygenPreferences(Optional.empty()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, true); + DoxygenPreferences pref = new DoxygenPreferences(); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, true); + pref.putBoolean(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, true); assertAutoEditBehaviour(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java index f8195ade9b0..3824a4db737 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2014 IBM Corporation and others. + * Copyright (c) 2005, 2020 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,6 +14,8 @@ * Anton Leherbauer (Wind River Systems) * Andrew Ferguson (Symbian) * Sergey Prigogin (Google) + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.internal.ui.preferences; @@ -30,6 +32,7 @@ import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey import org.eclipse.cdt.internal.ui.text.c.hover.SourceViewerInformationControl; import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference; import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager; +import org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences; import org.eclipse.cdt.ui.PreferenceConstants; import org.eclipse.cdt.ui.dialogs.DocCommentOwnerComposite; import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner; @@ -85,11 +88,13 @@ public class CEditorPreferencePage extends AbstractPreferencePage { private DocCommentOwnerComposite fDocCommentOwnerComposite; // TODO(sprigogin): Remove once compatibility with Platform 4.4 is no longer required. private final boolean formattingScopeForEmptySelectionSupported; + private final DoxygenPreferences doxygenPreferences; public CEditorPreferencePage() { super(); Bundle jfaceText = Platform.getBundle("org.eclipse.jface.text"); //$NON-NLS-1$ formattingScopeForEmptySelectionSupported = jfaceText.getVersion().compareTo(new Version(3, 10, 0)) >= 0; + doxygenPreferences = new DoxygenPreferences(); } @Override @@ -363,14 +368,14 @@ public class CEditorPreferencePage extends AbstractPreferencePage { fAppearanceColorList.select(0); handleAppearanceColorListSelection(); }); - fDocCommentOwnerComposite.loadValues(); + fDocCommentOwnerComposite.initialize(doxygenPreferences); } @Override public boolean performOk() { DocCommentOwnerManager.getInstance() .setWorkspaceCommentOwner(fDocCommentOwnerComposite.getSelectedDocCommentOwner()); - fDocCommentOwnerComposite.performOk(); + fDocCommentOwnerComposite.apply(doxygenPreferences); return super.performOk(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DoxygenPreferences.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DoxygenPreferences.java index 7cfdb77b3ac..8d7d6346af1 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DoxygenPreferences.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/doctools/DoxygenPreferences.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Marco Stornelli + * Copyright (c) 2020 Marco Stornelli and others * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -10,101 +10,136 @@ * * Contributors: * Marco Stornelli - Initial implementation + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.internal.ui.text.doctools; -import java.util.Optional; - import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ProjectScope; +import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.core.runtime.preferences.InstanceScope; import org.osgi.service.prefs.Preferences; -public class DoxygenPreferences { +/** + * Encapsulates access to the Doxygen-related preferences according to the current scope + + * @since 6.7 + * + */ +public final class DoxygenPreferences { /** * Use always brief tag in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final String DOXYGEN_USE_BRIEF_TAG = "doxygen_use_brief_tag"; //$NON-NLS-1$ + /** * Use always structured commands in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final String DOXYGEN_USE_STRUCTURAL_COMMANDS = "doxygen_use_structural_commands"; //$NON-NLS-1$ + /** * Use always javadoc tag style in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final String DOXYGEN_USE_JAVADOC_TAGS = "doxygen_use_javadoc_tags"; //$NON-NLS-1$ + /** * Use always a new line after brief tag in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final String DOXYGEN_NEW_LINE_AFTER_BRIEF = "doxygen_new_line_after_brief"; //$NON-NLS-1$ + /** * Use always a pre tag in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final String DOXYGEN_USE_PRE_POST_TAGS = "doxygen_use_pre_tag"; //$NON-NLS-1$ /** * Default use always brief tag in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final boolean DEF_DOXYGEN_USE_BRIEF_TAG = false; + /** * Default use always structured commands in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final boolean DEF_DOXYGEN_USE_STRUCTURED_COMMANDS = false; + /** * Default use always javadoc tag style in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final boolean DEF_DOXYGEN_USE_JAVADOC_TAGS = true; + /** * Default use always a new line after brief tag in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final boolean DEF_DOXYGEN_NEW_LINE_AFTER_BRIEF = true; + /** * Default use always a pre tag in auto-generation of doxygen comment * @since 6.7 + * @noreference This field is not intended to be referenced by clients. */ public static final boolean DEF_DOXYGEN_USE_PRE_POST_TAGS = false; - private static final String QUALIFIER = CCorePlugin.PLUGIN_ID; - private static final String WORKSPACE_DOXYGEN_NODE = "doxygen"; //$NON-NLS-1$ + private final Preferences preferences; - private Optional project; + public DoxygenPreferences() { + this(InstanceScope.INSTANCE); + } - public DoxygenPreferences(Optional project) { - this.project = project; + public DoxygenPreferences(IProject project) { + this(new ProjectScope(project)); + } + + public DoxygenPreferences(IScopeContext scope) { + this.preferences = scope.getNode(getNodeQualifier()).node(getNodePath()); + } + + private String getNodeQualifier() { + return CCorePlugin.PLUGIN_ID; + } + + private String getNodePath() { + return "doxygen"; //$NON-NLS-1$ } /** - * Get boolean preferences + * Get boolean preference value * @param key A preference key * @param defaultValue A default value * @return The preference value + * + * @since 6.7 */ - public boolean getBooleanPref(String key, boolean defaultValue) { - Preferences prefs = project.isPresent() - ? new ProjectScope(project.get()).getNode(QUALIFIER).node(WORKSPACE_DOXYGEN_NODE) - : InstanceScope.INSTANCE.getNode(QUALIFIER).node(WORKSPACE_DOXYGEN_NODE); - return prefs.getBoolean(key, defaultValue); + public boolean getBoolean(String key, boolean defaultValue) { + return preferences.getBoolean(key, defaultValue); } /** - * Put boolean preferences + * Put boolean preference value * @param key A preference key * @param defaultValue A default value + * + * @since 6.7 */ - public void putBooleanPref(String key, boolean value) { - Preferences prefs = project.isPresent() - ? new ProjectScope(project.get()).getNode(QUALIFIER).node(WORKSPACE_DOXYGEN_NODE) - : InstanceScope.INSTANCE.getNode(QUALIFIER).node(WORKSPACE_DOXYGEN_NODE); - prefs.putBoolean(key, value); + public void putBoolean(String key, boolean value) { + preferences.putBoolean(key, value); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerBlock.java index 5fd003b2e16..8bfe7c53eec 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerBlock.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2009 Symbian Software Systems and others. + * Copyright (c) 2008, 2020 Symbian Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -9,11 +9,14 @@ * SPDX-License-Identifier: EPL-2.0 * * Contributors: - * Andrew Ferguson (Symbian) - Initial implementation + * Andrew Ferguson (Symbian) - Initial implementation + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.ui.dialogs; import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager; +import org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences; import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner; import org.eclipse.cdt.utils.ui.controls.ControlFactory; import org.eclipse.core.resources.IProject; @@ -87,12 +90,14 @@ public class DocCommentOwnerBlock extends AbstractCOptionPage { String dsc = DialogsMessages.DocCommentOwnerBlock_SelectDocToolDescription; String msg = DialogsMessages.DocCommentOwnerBlock_DocToolLabel; - IDocCommentOwner prjOwner = DocCommentOwnerManager.getInstance().getCommentOwner(getProject()); + IProject project = getProject(); + IDocCommentOwner prjOwner = DocCommentOwnerManager.getInstance().getCommentOwner(project); fDocComboComposite = new DocCommentOwnerComposite(pane, prjOwner, dsc, msg); fDocComboComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).create()); - fCheckbox.setSelection(fManager.projectDefinesOwnership(getProject())); - fDocComboComposite.loadValues(getProject()); + fCheckbox.setSelection(fManager.projectDefinesOwnership(project)); + DoxygenPreferences preferences = new DoxygenPreferences(project); + fDocComboComposite.initialize(preferences); handleCheckBox(); } @@ -105,7 +110,8 @@ public class DocCommentOwnerBlock extends AbstractCOptionPage { IDocCommentOwner newOwner = fDocComboComposite.getSelectedDocCommentOwner(); fManager.setCommentOwner(project, newOwner, true); } - fDocComboComposite.performOk(project); + DoxygenPreferences preferences = new DoxygenPreferences(project); + fDocComboComposite.apply(preferences); } public IProject getProject() { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerCombo.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerCombo.java index 2a55e27c79f..75f7155188b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerCombo.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerCombo.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2009 Symbian Software Systems and others. + * Copyright (c) 2008, 2020 Symbian Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -9,7 +9,9 @@ * SPDX-License-Identifier: EPL-2.0 * * Contributors: - * Andrew Ferguson (Symbian) - Initial implementation + * Andrew Ferguson (Symbian) - Initial implementation + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.ui.dialogs; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerComposite.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerComposite.java index c11436872a6..4c3da14e946 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerComposite.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DocCommentOwnerComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2009 Symbian Software Systems and others. + * Copyright (c) 2008, 2020 Symbian Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -9,20 +9,32 @@ * SPDX-License-Identifier: EPL-2.0 * * Contributors: - * Andrew Ferguson (Symbian) - Initial implementation + * Andrew Ferguson (Symbian) - Initial implementation + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.ui.dialogs; -import java.util.Optional; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DEF_DOXYGEN_NEW_LINE_AFTER_BRIEF; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DEF_DOXYGEN_USE_BRIEF_TAG; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DEF_DOXYGEN_USE_JAVADOC_TAGS; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DEF_DOXYGEN_USE_PRE_POST_TAGS; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DEF_DOXYGEN_USE_STRUCTURED_COMMANDS; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS; +import static org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS; + +import java.util.LinkedHashMap; +import java.util.Map; import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager; import org.eclipse.cdt.internal.ui.text.doctools.DoxygenPreferences; import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner; import org.eclipse.cdt.utils.ui.controls.ControlFactory; -import org.eclipse.core.resources.IProject; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -37,33 +49,18 @@ import org.eclipse.swt.widgets.Label; * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ -public class DocCommentOwnerComposite extends Composite implements SelectionListener { +public class DocCommentOwnerComposite extends Composite { protected DocCommentOwnerCombo fDocCombo; protected Label desc, comboLabel; protected Group group; - /** - * @since 6.7 - */ - protected Button useBriefTag; - /** - * @since 6.7 - */ - protected Button useStructuralCommands; - /** - * @since 6.7 - */ - protected Button useJavadocStyle; - /** - * @since 6.7 - */ - protected Button newLineAfterBrief; - /** - * @since 6.7 - */ - protected Button usePrePostTag; + + private final Map buttons; + private final Map defaults; public DocCommentOwnerComposite(Composite parent, IDocCommentOwner initialOwner, String description, String label) { super(parent, SWT.NONE); + buttons = new LinkedHashMap<>(); + defaults = new LinkedHashMap<>(); GridLayout gl = new GridLayout(); gl.marginHeight = gl.marginWidth = 0; setLayout(gl); @@ -85,21 +82,28 @@ public class DocCommentOwnerComposite extends Composite implements SelectionList }; gd = GridDataFactory.fillDefaults().grab(true, false).create(); fDocCombo.setLayoutData(gd); - fDocCombo.addSelectionListener(this); - useBriefTag = addCheckBox(group, DialogsMessages.DocCommentOwnerComposite_UseBriefTagTitle); - useStructuralCommands = addCheckBox(group, DialogsMessages.DocCommentOwnerComposite_UseStructuralCommandsTitle); - useJavadocStyle = addCheckBox(group, DialogsMessages.DocCommentOwnerComposite_UseTagJavadocStyleTitle); - newLineAfterBrief = addCheckBox(group, DialogsMessages.DocCommentOwnerComposite_NewLineAfterBriefTitle); - usePrePostTag = addCheckBox(group, DialogsMessages.DocCommentOwnerComposite_AddPrePostTagsTitle); + fDocCombo.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> recheckButtons())); + createCheckBox(group, DialogsMessages.DocCommentOwnerComposite_UseBriefTagTitle, DOXYGEN_USE_BRIEF_TAG, + DEF_DOXYGEN_USE_BRIEF_TAG); + createCheckBox(group, DialogsMessages.DocCommentOwnerComposite_UseStructuralCommandsTitle, + DOXYGEN_USE_STRUCTURAL_COMMANDS, DEF_DOXYGEN_USE_STRUCTURED_COMMANDS); + createCheckBox(group, DialogsMessages.DocCommentOwnerComposite_UseTagJavadocStyleTitle, + DOXYGEN_USE_JAVADOC_TAGS, DEF_DOXYGEN_USE_JAVADOC_TAGS); + createCheckBox(group, DialogsMessages.DocCommentOwnerComposite_NewLineAfterBriefTitle, + DOXYGEN_NEW_LINE_AFTER_BRIEF, DEF_DOXYGEN_NEW_LINE_AFTER_BRIEF); + createCheckBox(group, DialogsMessages.DocCommentOwnerComposite_AddPrePostTagsTitle, DOXYGEN_USE_PRE_POST_TAGS, + DEF_DOXYGEN_USE_PRE_POST_TAGS); } - private Button addCheckBox(Composite parent, String label) { + private Button createCheckBox(Composite parent, String label, String key, boolean value) { Button checkBox = new Button(parent, SWT.CHECK); checkBox.setText(label); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalIndent = 0; gd.horizontalSpan = 2; checkBox.setLayoutData(gd); + buttons.put(key, checkBox); + defaults.put(key, value); return checkBox; } @@ -107,51 +111,34 @@ public class DocCommentOwnerComposite extends Composite implements SelectionList return fDocCombo.getSelectedDocCommentOwner(); } - private void initialize(Button button, DoxygenPreferences pref, String key, boolean defaultValue) { - button.setSelection(pref.getBooleanPref(key, defaultValue)); + /** + * Initializes widget values from the given preference instance + * + * @param preferences the preferences to initialize from + * + * @since 6.7 + * + * @noreference This method is not intended to be referenced by clients. + */ + public void initialize(DoxygenPreferences preferences) { + buttons.entrySet().stream().forEach(e -> initialize(e.getValue(), preferences, e.getKey())); + } + + void initialize(Button button, DoxygenPreferences pref, String key) { + button.setSelection(pref.getBoolean(key, defaults.get(key))); } /** + * Apply widget values to the given preference instance + * + * @param preferences the preferences to apply to + * * @since 6.7 + * + * @noreference This method is not intended to be referenced by clients. */ - public void loadValues(IProject project) { - DoxygenPreferences pref = new DoxygenPreferences(Optional.ofNullable(project)); - initialize(newLineAfterBrief, pref, DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, - DoxygenPreferences.DEF_DOXYGEN_NEW_LINE_AFTER_BRIEF); - initialize(useBriefTag, pref, DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, - DoxygenPreferences.DEF_DOXYGEN_USE_BRIEF_TAG); - initialize(useJavadocStyle, pref, DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, - DoxygenPreferences.DEF_DOXYGEN_USE_JAVADOC_TAGS); - initialize(usePrePostTag, pref, DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, - DoxygenPreferences.DEF_DOXYGEN_USE_PRE_POST_TAGS); - initialize(useStructuralCommands, pref, DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, - DoxygenPreferences.DEF_DOXYGEN_USE_STRUCTURED_COMMANDS); - } - - /** - * @since 6.7 - */ - public void loadValues() { - loadValues(null); - } - - /** - * @since 6.7 - */ - public void performOk(IProject project) { - DoxygenPreferences pref = new DoxygenPreferences(Optional.ofNullable(project)); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, newLineAfterBrief.getSelection()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, useBriefTag.getSelection()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, useJavadocStyle.getSelection()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, usePrePostTag.getSelection()); - pref.putBooleanPref(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, useStructuralCommands.getSelection()); - } - - /** - * @since 6.7 - */ - public void performOk() { - performOk(null); + public void apply(DoxygenPreferences preferences) { + buttons.entrySet().stream().forEach(e -> preferences.putBoolean(e.getKey(), e.getValue().getSelection())); } @Override @@ -160,45 +147,13 @@ public class DocCommentOwnerComposite extends Composite implements SelectionList comboLabel.setEnabled(enabled); fDocCombo.setEnabled(enabled); group.setEnabled(enabled); - if (fDocCombo.isEnabled() && DocCommentOwnerManager.DOXYGEN_CDT_DOC_ONWER_ID - .equals(fDocCombo.getSelectedDocCommentOwner().getID())) { - useBriefTag.setEnabled(true); - useStructuralCommands.setEnabled(true); - useJavadocStyle.setEnabled(true); - newLineAfterBrief.setEnabled(true); - usePrePostTag.setEnabled(true); - } else { - useBriefTag.setEnabled(false); - useStructuralCommands.setEnabled(false); - useJavadocStyle.setEnabled(false); - newLineAfterBrief.setEnabled(false); - usePrePostTag.setEnabled(false); - } + recheckButtons(); } - @Override - public void widgetSelected(SelectionEvent e) { - if (DocCommentOwnerManager.DOXYGEN_CDT_DOC_ONWER_ID.equals(fDocCombo.getSelectedDocCommentOwner().getID())) { - useBriefTag.setEnabled(true); - useStructuralCommands.setEnabled(true); - useJavadocStyle.setEnabled(true); - newLineAfterBrief.setEnabled(true); - usePrePostTag.setEnabled(true); - } else { - useBriefTag.setEnabled(false); - useStructuralCommands.setEnabled(false); - useJavadocStyle.setEnabled(false); - newLineAfterBrief.setEnabled(false); - usePrePostTag.setEnabled(false); - } + void recheckButtons() { + boolean doxygenEnabled = fDocCombo.isEnabled() && DocCommentOwnerManager.DOXYGEN_CDT_DOC_ONWER_ID + .equals(fDocCombo.getSelectedDocCommentOwner().getID()); + buttons.values().forEach(b -> b.setEnabled(doxygenEnabled)); } - @Override - public void widgetDefaultSelected(SelectionEvent e) { - useBriefTag.setEnabled(false); - useStructuralCommands.setEnabled(false); - useJavadocStyle.setEnabled(false); - newLineAfterBrief.setEnabled(false); - usePrePostTag.setEnabled(false); - } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/DefaultMultilineCommentAutoEditStrategy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/DefaultMultilineCommentAutoEditStrategy.java index b952004adee..02f3ab6bba8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/DefaultMultilineCommentAutoEditStrategy.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/DefaultMultilineCommentAutoEditStrategy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2015 Symbian Software Systems and others. + * Copyright (c) 2008, 2020 Symbian Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -11,6 +11,8 @@ * Contributors: * Andrew Ferguson (Symbian) - Initial implementation * Anton Leherbauer (Wind River Systems) + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.ui.text.doctools; @@ -93,8 +95,9 @@ public class DefaultMultilineCommentAutoEditStrategy implements IAutoEditStrateg * @since 6.7 */ protected Optional getProject() { - if (fProject != null) + if (fProject != null) { return Optional.of(fProject.getProject()); + } return Optional.empty(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/doxygen/DoxygenMultilineAutoEditStrategy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/doxygen/DoxygenMultilineAutoEditStrategy.java index a5120496373..9d9e5e44c07 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/doxygen/DoxygenMultilineAutoEditStrategy.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/doctools/doxygen/DoxygenMultilineAutoEditStrategy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 Symbian Software Systems and others. + * Copyright (c) 2008, 2020 Symbian Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -11,6 +11,8 @@ * Contributors: * Andrew Ferguson (Symbian) - Initial implementation * Anton Leherbauer (Wind River Systems) + * Marco Stornelli - Bug 333134 + * Alexander Fedorov - Bug 333134 *******************************************************************************/ package org.eclipse.cdt.ui.text.doctools.doxygen; @@ -99,16 +101,17 @@ public class DoxygenMultilineAutoEditStrategy extends DefaultMultilineCommentAut private void refreshPreferences() { Optional project = getProject(); - DoxygenPreferences pref = new DoxygenPreferences(project); - newLineAfterBrief = pref.getBooleanPref(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, + DoxygenPreferences pref = project.isPresent() ? new DoxygenPreferences(project.get()) + : new DoxygenPreferences(); + newLineAfterBrief = pref.getBoolean(DoxygenPreferences.DOXYGEN_NEW_LINE_AFTER_BRIEF, DoxygenPreferences.DEF_DOXYGEN_NEW_LINE_AFTER_BRIEF); - useBriefTag = pref.getBooleanPref(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, + useBriefTag = pref.getBoolean(DoxygenPreferences.DOXYGEN_USE_BRIEF_TAG, DoxygenPreferences.DEF_DOXYGEN_USE_BRIEF_TAG); - useJavadocStyle = pref.getBooleanPref(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, + useJavadocStyle = pref.getBoolean(DoxygenPreferences.DOXYGEN_USE_JAVADOC_TAGS, DoxygenPreferences.DEF_DOXYGEN_USE_JAVADOC_TAGS); - usePrePostTag = pref.getBooleanPref(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, + usePrePostTag = pref.getBoolean(DoxygenPreferences.DOXYGEN_USE_PRE_POST_TAGS, DoxygenPreferences.DEF_DOXYGEN_USE_PRE_POST_TAGS); - useStructuralCommands = pref.getBooleanPref(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, + useStructuralCommands = pref.getBoolean(DoxygenPreferences.DOXYGEN_USE_STRUCTURAL_COMMANDS, DoxygenPreferences.DEF_DOXYGEN_USE_STRUCTURED_COMMANDS); }