diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index 51483a7c11d..4d780e37b11 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -150,14 +150,6 @@ public class PDOMManager implements IWritableIndexManager, IListener { ILinkage.CPP_LINKAGE_ID, ILinkage.C_LINKAGE_ID, ILinkage.FORTRAN_LINKAGE_ID }; - /** - * Boolean preference controlling whether paths to non-workspace files are stored in canonical - * form or not. - */ - // TODO(sprigogin): Move to CPreferencesConstants and add UI support. - public static final String PREFERENCES_CONSTANT_PATH_CANONICALIZATION = - CCorePlugin.PLUGIN_ID + ".path_canonicalization"; //$NON-NLS-1$ - /** * Protects fIndexerJob, fCurrentTask and fTaskQueue. */ @@ -283,7 +275,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { prop.equals(CCorePreferenceConstants.TODO_TASK_PRIORITIES) || prop.equals(CCorePreferenceConstants.TODO_TASK_CASE_SENSITIVE)) { reindexAll(); - } else if (prop.equals(PREFERENCES_CONSTANT_PATH_CANONICALIZATION)) { + } else if (prop.equals(CCorePreferenceConstants.FILE_PATH_CANONICALIZATION)) { updatePathCanonicalizationStrategy(); reindexAll(); } @@ -302,7 +294,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { private void updatePathCanonicalizationStrategy() { IPreferencesService prefs = Platform.getPreferencesService(); - boolean canonicalize = prefs.getBoolean(CCorePlugin.PLUGIN_ID, PREFERENCES_CONSTANT_PATH_CANONICALIZATION, true, null); + boolean canonicalize = prefs.getBoolean(CCorePlugin.PLUGIN_ID, CCorePreferenceConstants.FILE_PATH_CANONICALIZATION, true, null); PathCanonicalizationStrategy.setPathCanonicalization(canonicalize); } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePreferenceConstants.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePreferenceConstants.java index 68bbcc0d803..11cce0e3611 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePreferenceConstants.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePreferenceConstants.java @@ -120,7 +120,14 @@ public class CCorePreferenceConstants { * Default absolute maximum size of the index-db in megabytes. */ public static final String DEFAULT_MAX_INDEX_DB_CACHE_SIZE_MB = "64"; //$NON-NLS-1$ - + + /** + * Boolean preference controlling whether paths of non-workspace files are stored in index in canonical + * form or not. Canonicalization is performed by calling {@link java.io.File#getCanonicalPath()}. + * @since 5.2 + */ + public static final String FILE_PATH_CANONICALIZATION = CCorePlugin.PLUGIN_ID + ".path_canonicalization"; //$NON-NLS-1$ + /** * Workspace-wide language mappings. */ diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java index 23783fcb116..37d46223e84 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java @@ -518,7 +518,18 @@ public class DefaultCodeFormatterConstants { public static final String FORMATTER_INDENT_ACCESS_SPECIFIER_COMPARE_TO_TYPE_HEADER = CCorePlugin.PLUGIN_ID + ".formatter.indent_access_specifier_compare_to_type_header"; //$NON-NLS-1$ /** *
- * FORMATTER / Option to indent body declarations compare to access specifiers (visibility labels) + * FORMATTER / Number of extra spaces in front of 'public:', 'protected:', 'private:' access specifiers. + * Enables fractional indent of access specifiers. Does not affect indentation of body declarations. + * - option id: "org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces" + * - possible values: "<n>", where n is zero or a positive integer + * - default: "0" + *+ * @since 5.2 + */ + public static final String FORMATTER_INDENT_ACCESS_SPECIFIER_EXTRA_SPACES = CCorePlugin.PLUGIN_ID + ".formatter.indent_access_specifier_extra_spaces"; //$NON-NLS-1$ + /** + *
+ * FORMATTER / Option to indent body declarations relative to access specifiers (visibility labels) * - option id: "org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier" * - possible values: { TRUE, FALSE } * - default: TRUE diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePreferenceInitializer.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePreferenceInitializer.java index a2fe94e272a..067fb156b72 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePreferenceInitializer.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePreferenceInitializer.java @@ -7,7 +7,7 @@ * * Contributors: * QNX Software Systems - Initial API and implementation - * Sergey Prigogin, Google + * Sergey Prigogin (Google) * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core; @@ -59,7 +59,8 @@ public class CCorePreferenceInitializer extends AbstractPreferenceInitializer { defaultPreferences.putBoolean(CCorePreferenceConstants.SHOW_SOURCE_FILES_IN_BINARIES, true); defaultPreferences.putBoolean(CCorePlugin.PREF_USE_STRUCTURAL_PARSE_MODE, false); - + defaultPreferences.putBoolean(CCorePreferenceConstants.FILE_PATH_CANONICALIZATION, true); + // indexer defaults IndexerPreferences.initializeDefaultPreferences(defaultPreferences); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java index 905d20cc63a..8c118db7a36 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java @@ -12,9 +12,13 @@ *******************************************************************************/ package org.eclipse.cdt.internal.ui.text; +import org.eclipse.core.resources.ProjectScope; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IPreferencesService; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; @@ -75,6 +79,8 @@ public final class CIndenter { final boolean prefHasTemplates; final String prefTabChar; + private final IPreferencesService preferenceService; + private final IScopeContext[] preferenceContexts; private final ICProject fProject; /** @@ -84,12 +90,22 @@ public final class CIndenter { * @return the value of the preference */ private String getCoreFormatterOption(String key) { - if (fProject == null) - return CCorePlugin.getOption(key); - return fProject.getOption(key, true); + return getCoreFormatterOption(key, null); } - + + private String getCoreFormatterOption(String key, String defaultValue) { + return preferenceService.getString(CCorePlugin.PLUGIN_ID, key, defaultValue, preferenceContexts); + } + + private int getCoreFormatterOption(String key, int defaultValue) { + return preferenceService.getInt(CCorePlugin.PLUGIN_ID, key, defaultValue, preferenceContexts); + } + CorePrefs(ICProject project) { + preferenceService = Platform.getPreferencesService(); + preferenceContexts = project != null ? + new IScopeContext[] { new ProjectScope(project.getProject()), new InstanceScope(), new DefaultScope() } : + new IScopeContext[] { new InstanceScope(), new DefaultScope() }; fProject= project; prefUseTabs= prefUseTabs(); prefTabSize= prefTabSize(); @@ -345,9 +361,7 @@ public final class CIndenter { } private int prefAccessSpecifierExtraSpaces() { - // Hidden option that enables fractional indent of access specifiers. - IPreferencesService prefs = Platform.getPreferencesService(); - return prefs.getInt(CCorePlugin.PLUGIN_ID, CCorePlugin.PLUGIN_ID + ".formatter.indent_access_specifier_extra_spaces", 0, null); //$NON-NLS-1$ + return getCoreFormatterOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_ACCESS_SPECIFIER_EXTRA_SPACES, 0); } private int prefNamespaceBodyIndent() {