1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 01:15:29 +02:00

Bug 574317 - Per-project Doxygen options are ignored

Pass along ICProject to edit strategies so that they can retrieve
per-project settings.

Change-Id: I87699917114a10439a820f9d6ec9d53f350ea50f
Signed-off-by: Marc-Andre Laperle <malaperle@gmail.com>
This commit is contained in:
Marc-Andre Laperle 2021-06-19 20:28:57 -04:00 committed by Marc-André Laperle
parent 9f1241f3ef
commit 383211b9c7
7 changed files with 69 additions and 9 deletions

View file

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<component id="org.eclipse.cdt.ui" version="2">
<resource path="src/org/eclipse/cdt/ui/text/doctools/IDocCommentViewerConfiguration.java" type="org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration">
<filter comment="new default method to handle edit strategy with project-specific options. Unlikely to clash with any implementers." id="404000815">
<message_arguments>
<message_argument value="org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration"/>
<message_argument value="createAutoEditStrategy(ICProject)"/>
</message_arguments>
</filter>
</resource>
<resource path="src/org/eclipse/cdt/ui/wizards/CDTCommonProjectWizard.java" type="org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard">
<filter comment="Squash over zealous warning from PDE. See Bug 558477" id="576725006">
<message_arguments>

View file

@ -497,14 +497,18 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
String partitioning = getConfiguredDocumentPartitioning(sourceViewer);
IDocCommentOwner owner = DocCommentOwnerManager.getInstance().getCommentOwner(getProject());
IAutoEditStrategy single = owner.getSinglelineConfiguration().createAutoEditStrategy();
IAutoEditStrategy multi = owner.getMultilineConfiguration().createAutoEditStrategy();
IProject project = getProject();
ICProject cProject = getCProject();
IDocCommentOwner owner = DocCommentOwnerManager.getInstance().getCommentOwner(project);
ICProject projectDefiningOwnership = project != null
&& DocCommentOwnerManager.getInstance().projectDefinesOwnership(project) ? cProject : null;
IAutoEditStrategy single = owner.getSinglelineConfiguration().createAutoEditStrategy(projectDefiningOwnership);
IAutoEditStrategy multi = owner.getMultilineConfiguration().createAutoEditStrategy(projectDefiningOwnership);
IAutoEditStrategy[] NONE = new IAutoEditStrategy[0];
if (ICPartitions.C_MULTI_LINE_COMMENT.equals(contentType))
return new IAutoEditStrategy[] { new DefaultMultilineCommentAutoEditStrategy(getCProject()) };
return new IAutoEditStrategy[] { new DefaultMultilineCommentAutoEditStrategy(cProject) };
if (ICPartitions.C_SINGLE_LINE_DOC_COMMENT.equals(contentType))
return single != null ? new IAutoEditStrategy[] { single } : NONE;
else if (ICPartitions.C_MULTI_LINE_DOC_COMMENT.equals(contentType))
@ -512,9 +516,9 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
else if (ICPartitions.C_STRING.equals(contentType))
return new IAutoEditStrategy[] {
/*new SmartSemicolonAutoEditStrategy(partitioning),*/ new CStringAutoIndentStrategy(partitioning,
getCProject()) };
cProject) };
else
return new IAutoEditStrategy[] { new CAutoIndentStrategy(partitioning, getCProject()) };
return new IAutoEditStrategy[] { new CAutoIndentStrategy(partitioning, cProject) };
}
/**

View file

@ -13,6 +13,7 @@
*******************************************************************************/
package org.eclipse.cdt.ui.text.doctools;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.ui.text.ICPartitions;
import org.eclipse.cdt.ui.text.ICTokenScanner;
import org.eclipse.cdt.ui.text.ITokenStoreFactory;
@ -49,6 +50,17 @@ public interface IDocCommentViewerConfiguration {
*/
IAutoEditStrategy createAutoEditStrategy();
/**
* @return an auto edit strategy suitable for the appropriate comment region. This auto edit
* strategy is project-aware and might be affected by project-specific options. May return null
* in the case where no auto-edit-strategy is required.
*
* @since 7.3
*/
default IAutoEditStrategy createAutoEditStrategy(ICProject project) {
return createAutoEditStrategy();
}
/**
* @return a double click strategy suitable for the associated comment-region. May return null in
* the case where no double-click-strategy is required.

View file

@ -48,6 +48,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeId;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.doxygen.DoxygenOptions;
import org.eclipse.cdt.doxygen.core.DoxygenConfiguration;
@ -110,12 +111,20 @@ public class DoxygenMultilineAutoEditStrategy extends DefaultMultilineCommentAut
private final DoxygenConfiguration doxygenConfiguration;
public DoxygenMultilineAutoEditStrategy() {
/**
* @since 7.3
*/
public DoxygenMultilineAutoEditStrategy(ICProject project) {
super(project);
doxygenConfiguration = EclipseContextFactory
.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext())
.get(DoxygenConfiguration.class);
}
public DoxygenMultilineAutoEditStrategy() {
this(null);
}
private void refreshPreferences() {
Optional<IProject> project = getProject();
DoxygenOptions options = project.isPresent() ? doxygenConfiguration.projectOptions(project.get())

View file

@ -13,6 +13,7 @@
*******************************************************************************/
package org.eclipse.cdt.ui.text.doctools.doxygen;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
@ -54,7 +55,15 @@ public class DoxygenMultilineConfiguration extends AbstractGenericTagDocCommentV
*/
@Override
public IAutoEditStrategy createAutoEditStrategy() {
return new DoxygenMultilineAutoEditStrategy();
return createAutoEditStrategy(null);
}
/**
* @since 7.3
*/
@Override
public IAutoEditStrategy createAutoEditStrategy(ICProject project) {
return new DoxygenMultilineAutoEditStrategy(project);
}
/*

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTNodeSelector;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.ui.text.ICPartitions;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.DocumentCommand;
@ -42,7 +43,15 @@ public class DoxygenSingleAutoEditStrategy extends DoxygenMultilineAutoEditStrat
private static final String EXCL_COMMENT = "//!"; //$NON-NLS-1$
private static String fgDefaultLineDelim = "\n"; //$NON-NLS-1$
/**
* @since 7.3
*/
public DoxygenSingleAutoEditStrategy(ICProject project) {
super(project);
}
public DoxygenSingleAutoEditStrategy() {
this(null);
}
/**

View file

@ -13,6 +13,7 @@
*******************************************************************************/
package org.eclipse.cdt.ui.text.doctools.doxygen;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.cdt.ui.text.doctools.IDocCommentViewerConfiguration;
@ -53,7 +54,15 @@ public class DoxygenSingleConfiguration extends AbstractGenericTagDocCommentView
*/
@Override
public IAutoEditStrategy createAutoEditStrategy() {
return new DoxygenSingleAutoEditStrategy();
return createAutoEditStrategy(null);
}
/**
* @since 7.3
*/
@Override
public IAutoEditStrategy createAutoEditStrategy(ICProject project) {
return new DoxygenSingleAutoEditStrategy(project);
}
/*