1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-31 21:05:37 +02:00

Fix for 176389, preference UI for cache sizes.

This commit is contained in:
Markus Schorn 2007-04-06 15:53:50 +00:00
parent 7a2f549d31
commit 2d8f4698f2
11 changed files with 273 additions and 23 deletions

View file

@ -136,6 +136,13 @@ public class IndexerPreferences {
return props;
}
public static Properties getDefaultIndexerProperties() {
Preferences prefs= getDefaultPreferences();
Properties props= new Properties();
addProperties(prefs, props);
return props;
}
/**
* Adds or changes indexer properties for a project.
*/

View file

@ -19,6 +19,7 @@ import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.cdt.core.parser.CodeReaderCache;
import org.eclipse.cdt.internal.core.model.CModelManager;
import org.eclipse.cdt.internal.core.pdom.indexer.IndexerPreferences;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
@ -44,8 +45,9 @@ public class CCorePreferenceInitializer extends AbstractPreferenceInitializer {
defaultOptionsMap.put(CCorePreferenceConstants.CODE_FORMATTER, CCorePreferenceConstants.DEFAULT_CODE_FORMATTER);
defaultOptionsMap.put(CCorePreferenceConstants.INDEX_DB_CACHE_SIZE_PCT, CCorePreferenceConstants.DEFAULT_INDEX_DB_CACHE_SIZE_PCT);
defaultOptionsMap.put(CCorePreferenceConstants.MAX_INDEX_DB_CACHE_SIZE_MB, CCorePreferenceConstants.DEFAULT_MAX_INDEX_DB_CACHE_SIZE_MB);
defaultOptionsMap.put(CCorePreferenceConstants.WORKSPACE_LANGUAGE_MAPPINGS, CCorePreferenceConstants.DEFAULT_WORKSPACE_LANGUAGE_MAPPINGS);
defaultOptionsMap.put(CodeReaderCache.CODE_READER_BUFFER, CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB_STRING);
// Store default values to default preferences
IEclipsePreferences defaultPreferences = ((IScopeContext) new DefaultScope()).getNode(CCorePlugin.PLUGIN_ID);
for (Iterator iter = defaultOptionsMap.entrySet().iterator(); iter.hasNext();) {

View file

@ -257,7 +257,6 @@ HideMacrodirective.description= Hides Macro directives
WorkInProgress.name=Work In Progress
CDTSearch.name=Search
CDTParser.name=Parser
CDTIndexerProperty.name=C/C++ Indexer

View file

@ -669,11 +669,6 @@
class="org.eclipse.cdt.internal.ui.preferences.CFileTypesPreferencePage"
id="org.eclipse.cdt.ui.preferences.CFileTypesPreferences">
</page>
<page
class="org.eclipse.cdt.internal.ui.preferences.CParserPreferencePage"
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"
name="%CDTParser.name"
id="org.eclipse.cdt.ui.preferences.CParserPreferencePage"/>
<page
name="%appearancePrefName"
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"

View file

@ -1,5 +1,5 @@
/**********************************************************************
* Copyright (c) 2005 IBM Corporation and others.
* Copyright (c) 2005, 2007 IBM Corporation 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
@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
@ -34,6 +35,8 @@ import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* @author dsteffle
* @deprecated the one preference found on the page was moved to the
* indexer preference page.
*/
public class CParserPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {

View file

@ -17,12 +17,14 @@ import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.cdt.ui.dialogs.CacheSizeBlock;
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
import org.eclipse.cdt.ui.dialogs.IndexerBlock;
@ -30,16 +32,21 @@ public class IndexerPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage, ICOptionContainer {
private IndexerBlock fOptionBlock;
private CacheSizeBlock fCacheBlock;
public IndexerPreferencePage(){
fOptionBlock = new IndexerBlock();
fCacheBlock= new CacheSizeBlock(this);
}
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new FillLayout());
composite.setLayout(new GridLayout());
GridData gd= new GridData();
composite.setLayoutData(gd);
fOptionBlock.createControl(composite);
fCacheBlock.createControl(composite);
return composite;
}
@ -48,6 +55,18 @@ public class IndexerPreferencePage extends PreferencePage implements
}
public void updateContainer() {
if (!fOptionBlock.isValid()) {
setErrorMessage(fOptionBlock.getErrorMessage());
setValid(false);
}
else if (!fCacheBlock.isValid()) {
setErrorMessage(fCacheBlock.getErrorMessage());
setValid(false);
}
else {
setErrorMessage(null);
setValid(true);
}
}
public IProject getProject() {
@ -61,11 +80,13 @@ public class IndexerPreferencePage extends PreferencePage implements
public boolean performOk() {
try {
fOptionBlock.performApply(new NullProgressMonitor());
fCacheBlock.performApply(new NullProgressMonitor());
} catch (CoreException e) {}
return true;
}
public void performDefaults() {
fOptionBlock.performDefaults();
fCacheBlock.performDefaults();
}
}

View file

@ -15,9 +15,9 @@ import java.util.Properties;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
@ -142,8 +142,8 @@ public abstract class AbstractIndexerPage extends AbstractCOptionPage {
}
private Text createParseUpFrontTextField(Composite page) {
new Label(page, SWT.NONE);
ControlFactory.createLabel(page, DialogsMessages.AbstractIndexerPage_indexUpFront);
Label l= ControlFactory.createLabel(page, DialogsMessages.AbstractIndexerPage_indexUpFront);
((GridData) l.getLayoutData()).verticalIndent=5;
return ControlFactory.createTextField(page);
}

View file

@ -0,0 +1,175 @@
/*******************************************************************************
* Copyright (c) 2007 Wind River Systems, Inc. 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.dialogs;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.cdt.core.dom.CDOM;
import org.eclipse.cdt.core.parser.CodeReaderCache;
import org.eclipse.cdt.core.parser.ICodeReaderCache;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
/**
* This OptionPage is used in the IndexerPreference page to allow for adjusting
* various parsing related caches.
*/
public class CacheSizeBlock extends AbstractCOptionPage {
private IntegerFieldEditor fDBLimitPct;
private IntegerFieldEditor fDBAbsoluteLimit;
private IntegerFieldEditor fCodeReaderLimit;
private IPropertyChangeListener validityChangeListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(FieldEditor.IS_VALID)) {
updateValidState();
}
}
};
public CacheSizeBlock(ICOptionContainer container){
setContainer(container);
}
public void createControl(Composite parent) {
GridData gd;
GridLayout gl;
Composite composite = ControlFactory.createComposite(parent, 1);
gl= (GridLayout)composite.getLayout();
int hindent= gl.marginWidth + gl.marginLeft;
int vindent= gl.marginHeight + gl.marginTop;
gl.marginWidth= 0;
gd= (GridData) composite.getLayoutData();
gd.grabExcessHorizontalSpace= false;
gd.horizontalAlignment= GridData.FILL;
setControl(composite);
Group group= ControlFactory.createGroup(composite, Messages.CacheSizeBlock_cacheLimitGroup, 1);
gd= (GridData) group.getLayoutData();
gd.grabExcessHorizontalSpace= true;
gd.horizontalAlignment= GridData.FILL;
Composite cacheComp= ControlFactory.createComposite(group, 3);
Label dbCacheLabel= ControlFactory.createLabel(cacheComp, Messages.CacheSizeBlock_indexDatabaseCache);
fDBLimitPct= new IntegerFieldEditor(CCorePreferenceConstants.INDEX_DB_CACHE_SIZE_PCT, Messages.CacheSizeBlock_limitRelativeToMaxHeapSize, cacheComp, 3);
fDBLimitPct.setValidRange(1, 40);
ControlFactory.createLabel(cacheComp, "%"); //$NON-NLS-1$
fDBAbsoluteLimit= new IntegerFieldEditor(CCorePreferenceConstants.MAX_INDEX_DB_CACHE_SIZE_MB, Messages.CacheSizeBlock_absoluteLimit, cacheComp, 4);
fDBAbsoluteLimit.setValidRange(1, 10000);
ControlFactory.createLabel(cacheComp, "mb"); //$NON-NLS-1$
Label codeReaderLabel= ControlFactory.createLabel(cacheComp, Messages.CacheSizeBlock_headerFileCache);
fCodeReaderLimit= new IntegerFieldEditor(CodeReaderCache.CODE_READER_BUFFER, Messages.CacheSizeBlock_absoluteLimit, cacheComp, 4);
fCodeReaderLimit.setValidRange(1, 10000);
ControlFactory.createLabel(cacheComp, "mb"); //$NON-NLS-1$
gl= (GridLayout) cacheComp.getLayout();
gl.numColumns= 3;
gl.makeColumnsEqualWidth= false;
gl.marginLeft= 0;
gd= (GridData) dbCacheLabel.getLayoutData();
gd.horizontalSpan= 3;
gd= (GridData) codeReaderLabel.getLayoutData();
gd.verticalIndent= vindent;
gd.horizontalSpan= 3;
gd= new GridData();
gd.grabExcessHorizontalSpace= true;
gd.horizontalAlignment= GridData.FILL;
gd.horizontalIndent= hindent;
fDBLimitPct.getLabelControl(cacheComp).setLayoutData(gd);
gd= new GridData();
gd.grabExcessHorizontalSpace= true;
gd.horizontalAlignment= GridData.FILL;
gd.horizontalIndent= hindent;
fDBAbsoluteLimit.getLabelControl(cacheComp).setLayoutData(gd);
gd= new GridData();
gd.grabExcessHorizontalSpace= true;
gd.horizontalAlignment= GridData.FILL;
gd.horizontalIndent= hindent;
fCodeReaderLimit.getLabelControl(cacheComp).setLayoutData(gd);
initializeValues();
}
private void initializeValues() {
ScopedPreferenceStore prefStore= new ScopedPreferenceStore(new InstanceScope(), CCorePlugin.PLUGIN_ID);
fDBLimitPct.setPreferenceStore(prefStore);
fDBLimitPct.setPropertyChangeListener(validityChangeListener);
fDBAbsoluteLimit.setPreferenceStore(prefStore);
fDBAbsoluteLimit.setPropertyChangeListener(validityChangeListener);
fCodeReaderLimit.setPreferenceStore(prefStore);
fCodeReaderLimit.setPropertyChangeListener(validityChangeListener);
fDBLimitPct.load();
fDBAbsoluteLimit.load();
fCodeReaderLimit.load();
}
public void performApply(IProgressMonitor monitor) throws CoreException {
fDBLimitPct.store();
fDBAbsoluteLimit.store();
fCodeReaderLimit.store();
// code reader cache does not listen for pref-changes, help out:
ICodeReaderCache cache = CDOM.getInstance().getCodeReaderFactory(CDOM.PARSE_SAVED_RESOURCES).getCodeReaderCache();
if (cache instanceof CodeReaderCache) {
((CodeReaderCache)cache).setCacheSize(fCodeReaderLimit.getIntValue());
}
}
public void performDefaults() {
fDBLimitPct.loadDefault();
fDBAbsoluteLimit.loadDefault();
fCodeReaderLimit.loadDefault();
}
private void updateValidState() {
if (!fDBLimitPct.isValid()) {
setErrorMessage(fDBLimitPct.getErrorMessage());
setValid(false);
}
else if (!fDBAbsoluteLimit.isValid()) {
setErrorMessage(fDBAbsoluteLimit.getErrorMessage());
setValid(false);
}
else if (!fCodeReaderLimit.isValid()) {
setErrorMessage(fCodeReaderLimit.getErrorMessage());
setValid(false);
}
else {
setValid(true);
}
getContainer().updateContainer();
}
}

View file

@ -70,6 +70,7 @@ public class IndexerBlock extends AbstractCOptionPage {
private Properties fCurrentProperties;
private ControlEnableState fEnableState;
private Composite fPreferenceContent;
private Composite fParent;
public IndexerBlock(){
super(INDEXER_LABEL);
@ -113,12 +114,12 @@ public class IndexerBlock extends AbstractCOptionPage {
}
public void createControl(Composite parent) {
fParent= parent;
Composite composite = ControlFactory.createComposite(parent, 1);
GridLayout layout= ((GridLayout)composite.getLayout());
layout.marginHeight= 0;
layout.marginWidth= 0;
layout.verticalSpacing= 0;
layout.horizontalSpacing= GridData.FILL_HORIZONTAL;
composite.setLayoutData(null);
setControl(composite);
@ -132,15 +133,17 @@ public class IndexerBlock extends AbstractCOptionPage {
}
fPreferenceContent= ControlFactory.createComposite(composite, 1);
layout= ((GridLayout)fPreferenceContent.getLayout());
layout= (GridLayout)fPreferenceContent.getLayout();
layout.marginHeight= 0;
layout.marginWidth= 0;
GridData gd= (GridData) fPreferenceContent.getLayoutData();
gd.horizontalIndent= 0;
Composite isc = ControlFactory.createComposite(fPreferenceContent, 1);
GridLayout gridLayout = ((GridLayout)isc.getLayout());
gridLayout.makeColumnsEqualWidth= false;
gridLayout.marginHeight = 0;
gridLayout.marginTop = 5;
gridLayout.marginWidth= 0;
// add combo to select indexer
Group group= ControlFactory.createGroup(isc,INDEXER_COMBO_LABEL, 1);
@ -159,7 +162,7 @@ public class IndexerBlock extends AbstractCOptionPage {
initializeScope();
initializeIndexerCombo();
onPreferenceScopeChange();
parent.layout(true);
fParent.layout(true);
}
private void enablePreferenceContent(boolean enable) {
@ -221,6 +224,10 @@ public class IndexerBlock extends AbstractCOptionPage {
}
fCurrentProperties= props;
}
updateForNewProperties(scope);
}
private void updateForNewProperties(int scope) {
String indexerId= fCurrentProperties.getProperty(IndexerPreferences.KEY_INDEXER_ID);
String indexerName = getIndexerName(indexerId);
String[] indexerList = fIndexersComboBox.getItems();
@ -266,6 +273,7 @@ public class IndexerBlock extends AbstractCOptionPage {
page.setContainer(getContainer());
page.createControl(fIndexerPageComposite);
fIndexerPageComposite.layout(true);
fParent.layout(true);
}
}
@ -362,9 +370,14 @@ public class IndexerBlock extends AbstractCOptionPage {
public void performDefaults() {
fCurrentProperties= null;
fPrefScopeBlock.setInstanceScope();
onPreferenceScopeChange();
if (fPrefScopeBlock != null) {
fPrefScopeBlock.setInstanceScope();
onPreferenceScopeChange();
}
else {
fCurrentProperties= IndexerPreferences.getDefaultIndexerProperties();
updateForNewProperties(IndexerPreferences.SCOPE_INSTANCE);
}
}
/**

View file

@ -0,0 +1,30 @@
/*******************************************************************************
* Copyright (c) 2007 Wind River Systems, Inc. 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.dialogs;
import org.eclipse.osgi.util.NLS;
public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.cdt.ui.dialogs.messages"; //$NON-NLS-1$
public static String CacheSizeBlock_absoluteLimit;
public static String CacheSizeBlock_cacheLimitGroup;
public static String CacheSizeBlock_headerFileCache;
public static String CacheSizeBlock_indexDatabaseCache;
public static String CacheSizeBlock_limitRelativeToMaxHeapSize;
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
}
private Messages() {
}
}

View file

@ -0,0 +1,5 @@
CacheSizeBlock_cacheLimitGroup=Cache limits
CacheSizeBlock_indexDatabaseCache=Index database cache:
CacheSizeBlock_limitRelativeToMaxHeapSize=Limit relative to the maximum heap size:
CacheSizeBlock_absoluteLimit=Absolute Limit:
CacheSizeBlock_headerFileCache=Header file cache (used by full indexer and refactoring):