mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
2004-04-06 Chris Wiebe
initial placement of non-ui code into org.eclipse.cdt.core.browser
This commit is contained in:
parent
6f5c560309
commit
4acf3441ad
8 changed files with 297 additions and 179 deletions
|
@ -1,2 +1,6 @@
|
|||
2004-04-06 Chris Wiebe
|
||||
initial placement of non-ui code into org.eclipse.cdt.core.browser
|
||||
|
||||
2004-04-20 Chris Wiebe
|
||||
refactored TypeCacheDeltaListener into standalone class
|
||||
added option in Work In Progress prefs page to disable background cache
|
||||
|
|
|
@ -11,23 +11,23 @@
|
|||
package org.eclipse.cdt.core.browser;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||
import org.eclipse.cdt.core.search.SearchEngine;
|
||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCache;
|
||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheDeltaListener;
|
||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCacherJob;
|
||||
import org.eclipse.cdt.internal.core.browser.util.ArrayUtil;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.Preferences;
|
||||
import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
|
||||
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
|
||||
import org.eclipse.core.runtime.jobs.IJobManager;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
|
||||
/**
|
||||
|
@ -47,6 +47,11 @@ public class AllTypesCache {
|
|||
private static TypeCache fgCache;
|
||||
private static TypeCacherJob fgJob;
|
||||
private static TypeCacheDeltaListener fgDeltaListener;
|
||||
private static IPropertyChangeListener fgPropertyChangeListener;
|
||||
private static boolean fBackgroundJobEnabled;
|
||||
|
||||
/** Preference key for enabling background cache */
|
||||
public final static String ENABLE_BACKGROUND_TYPE_CACHE = "enableBackgroundTypeCache"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Defines a simple interface in order to provide
|
||||
|
@ -63,13 +68,44 @@ public class AllTypesCache {
|
|||
* @param provider A working copy provider.
|
||||
*/
|
||||
public static void initialize(IWorkingCopyProvider provider) {
|
||||
|
||||
// load prefs
|
||||
Preferences prefs= CCorePlugin.getDefault().getPluginPreferences();
|
||||
if (prefs.contains(ENABLE_BACKGROUND_TYPE_CACHE)) {
|
||||
fBackgroundJobEnabled= prefs.getBoolean(ENABLE_BACKGROUND_TYPE_CACHE);
|
||||
} else {
|
||||
prefs.setDefault(ENABLE_BACKGROUND_TYPE_CACHE, true);
|
||||
prefs.setValue(ENABLE_BACKGROUND_TYPE_CACHE, true);
|
||||
CCorePlugin.getDefault().savePluginPreferences();
|
||||
fBackgroundJobEnabled= true;
|
||||
}
|
||||
|
||||
fgCache= new TypeCache();
|
||||
fgJob= new TypeCacherJob(fgCache, provider);
|
||||
fgDeltaListener= new TypeCacheDeltaListener(fgCache, fgJob);
|
||||
fgDeltaListener= new TypeCacheDeltaListener(fgCache, fBackgroundJobEnabled, fgJob);
|
||||
|
||||
fgPropertyChangeListener= new IPropertyChangeListener() {
|
||||
public void propertyChange(PropertyChangeEvent event) {
|
||||
String property= event.getProperty();
|
||||
if (property.equals(ENABLE_BACKGROUND_TYPE_CACHE)) {
|
||||
String value= (String)event.getNewValue();
|
||||
fBackgroundJobEnabled= Boolean.valueOf(value).booleanValue();
|
||||
fgDeltaListener.setBackgroundJobEnabled(fBackgroundJobEnabled);
|
||||
if (!fBackgroundJobEnabled) {
|
||||
// terminate all background jobs
|
||||
IJobManager jobMgr = Platform.getJobManager();
|
||||
jobMgr.cancel(TypeCacherJob.FAMILY);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
// add property change listener
|
||||
prefs.addPropertyChangeListener(fgPropertyChangeListener);
|
||||
|
||||
// add delta listener
|
||||
CoreModel.getDefault().addElementChangedListener(fgDeltaListener);
|
||||
|
||||
if (fBackgroundJobEnabled) {
|
||||
// schedule job to run after INITIAL_DELAY
|
||||
if (fgJob.getState() != Job.RUNNING) {
|
||||
fgJob.setSearchPaths(null);
|
||||
|
@ -77,6 +113,7 @@ public class AllTypesCache {
|
|||
fgJob.schedule(INITIAL_DELAY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Terminates the service provided by AllTypesCache.
|
||||
|
@ -140,156 +177,4 @@ public class AllTypesCache {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener for changes to CModel.
|
||||
* @see org.eclipse.cdt.core.model.IElementChangedListener
|
||||
* @since 3.0
|
||||
*/
|
||||
private static class TypeCacheDeltaListener implements IElementChangedListener {
|
||||
|
||||
private TypeCache fTypeCache;
|
||||
private TypeCacherJob fTypeCacherJob;
|
||||
private Set fPaths= new HashSet(5);
|
||||
private Set fPrefixes= new HashSet(5);
|
||||
private boolean fFlushAll= false;
|
||||
|
||||
public TypeCacheDeltaListener(TypeCache cache, TypeCacherJob job) {
|
||||
fTypeCache= cache;
|
||||
fTypeCacherJob= job;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see IElementChangedListener#elementChanged
|
||||
*/
|
||||
public void elementChanged(ElementChangedEvent event) {
|
||||
fPaths.clear();
|
||||
fPrefixes.clear();
|
||||
fFlushAll= false;
|
||||
|
||||
boolean needsFlushing= processDelta(event.getDelta());
|
||||
if (needsFlushing) {
|
||||
// cancel background job
|
||||
if (fTypeCacherJob.getState() == Job.RUNNING) {
|
||||
// wait for job to finish?
|
||||
try {
|
||||
fTypeCacherJob.cancel();
|
||||
fTypeCacherJob.join();
|
||||
} catch (InterruptedException ex) {
|
||||
}
|
||||
}
|
||||
|
||||
if (fFlushAll) {
|
||||
// flush the entire cache
|
||||
fTypeCacherJob.setSearchPaths(null);
|
||||
fTypeCache.flushAll();
|
||||
} else {
|
||||
// flush affected files from cache
|
||||
Set searchPaths= new HashSet(10);
|
||||
getPrefixMatches(fPrefixes, searchPaths);
|
||||
searchPaths.addAll(fPaths);
|
||||
fTypeCacherJob.setSearchPaths(searchPaths);
|
||||
fTypeCache.flush(searchPaths);
|
||||
}
|
||||
|
||||
// restart the background job
|
||||
fTypeCacherJob.setPriority(Job.BUILD);
|
||||
fTypeCacherJob.schedule();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* returns true if the cache needs to be flushed
|
||||
*/
|
||||
private boolean processDelta(ICElementDelta delta) {
|
||||
ICElement elem= delta.getElement();
|
||||
int pathEntryChanged= ICElementDelta.F_ADDED_PATHENTRY_SOURCE | ICElementDelta.F_REMOVED_PATHENTRY_SOURCE |
|
||||
ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE | ICElementDelta.F_CHANGED_PATHENTRY_MACRO;
|
||||
boolean isAddedOrRemoved= (delta.getKind() != ICElementDelta.CHANGED)
|
||||
|| ((delta.getFlags() & pathEntryChanged) != 0);
|
||||
|
||||
switch (elem.getElementType()) {
|
||||
case ICElement.C_MODEL:
|
||||
{
|
||||
if (isAddedOrRemoved) {
|
||||
// CModel has changed
|
||||
// flush the entire cache
|
||||
fFlushAll= true;
|
||||
return true;
|
||||
}
|
||||
return processDeltaChildren(delta);
|
||||
}
|
||||
|
||||
case ICElement.C_PROJECT:
|
||||
case ICElement.C_CCONTAINER:
|
||||
{
|
||||
if (isAddedOrRemoved) {
|
||||
// project or folder has changed
|
||||
// flush all files with matching prefix
|
||||
IPath path= elem.getPath();
|
||||
if (path != null)
|
||||
fPrefixes.add(path);
|
||||
return true;
|
||||
}
|
||||
return processDeltaChildren(delta);
|
||||
}
|
||||
|
||||
case ICElement.C_NAMESPACE:
|
||||
case ICElement.C_TEMPLATE_CLASS:
|
||||
case ICElement.C_CLASS:
|
||||
case ICElement.C_STRUCT:
|
||||
case ICElement.C_UNION:
|
||||
case ICElement.C_ENUMERATION:
|
||||
case ICElement.C_TYPEDEF:
|
||||
case ICElement.C_INCLUDE:
|
||||
case ICElement.C_UNIT:
|
||||
{
|
||||
if (isAddedOrRemoved) {
|
||||
// CElement has changed
|
||||
// flush file from cache
|
||||
IPath path= elem.getPath();
|
||||
if (path != null)
|
||||
fPaths.add(path);
|
||||
return true;
|
||||
}
|
||||
return processDeltaChildren(delta);
|
||||
}
|
||||
|
||||
default:
|
||||
// fields, methods, imports ect
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean processDeltaChildren(ICElementDelta delta) {
|
||||
ICElementDelta[] children= delta.getAffectedChildren();
|
||||
for (int i= 0; i < children.length; i++) {
|
||||
if (processDelta(children[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean getPrefixMatches(Set prefixes, Set results) {
|
||||
Set pathSet= fTypeCache.getAllFiles();
|
||||
if (pathSet.isEmpty() || prefixes == null || prefixes.isEmpty())
|
||||
return false;
|
||||
|
||||
for (Iterator pathIter= pathSet.iterator(); pathIter.hasNext(); ) {
|
||||
IPath path= (IPath) pathIter.next();
|
||||
|
||||
// find paths which match prefix
|
||||
for (Iterator prefixIter= prefixes.iterator(); prefixIter.hasNext(); ) {
|
||||
IPath prefix= (IPath) prefixIter.next();
|
||||
if (prefix.isPrefixOf(path)) {
|
||||
results.add(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return !results.isEmpty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,179 @@
|
|||
/*
|
||||
* Created on Apr 20, 2004
|
||||
*
|
||||
* To change the template for this generated file go to
|
||||
* Window - Preferences - Java - Code Generation - Code and Comments
|
||||
*/
|
||||
package org.eclipse.cdt.internal.core.browser.cache;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
|
||||
|
||||
/**
|
||||
* Listener for changes to CModel.
|
||||
* @see org.eclipse.cdt.core.model.IElementChangedListener
|
||||
* @since 3.0
|
||||
*/
|
||||
public class TypeCacheDeltaListener implements IElementChangedListener {
|
||||
|
||||
private TypeCache fTypeCache;
|
||||
private TypeCacherJob fTypeCacherJob;
|
||||
private Set fPaths= new HashSet(5);
|
||||
private Set fPrefixes= new HashSet(5);
|
||||
private boolean fFlushAll= false;
|
||||
private boolean fCreateBackgroundJob= true;
|
||||
|
||||
public TypeCacheDeltaListener(TypeCache cache, boolean createBackgroundJob, TypeCacherJob job) {
|
||||
fTypeCache= cache;
|
||||
fTypeCacherJob= job;
|
||||
fCreateBackgroundJob= createBackgroundJob;
|
||||
}
|
||||
|
||||
public void setBackgroundJobEnabled(boolean enabled) {
|
||||
fCreateBackgroundJob= enabled;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see IElementChangedListener#elementChanged
|
||||
*/
|
||||
public void elementChanged(ElementChangedEvent event) {
|
||||
fPaths.clear();
|
||||
fPrefixes.clear();
|
||||
fFlushAll= false;
|
||||
|
||||
boolean needsFlushing= processDelta(event.getDelta());
|
||||
if (needsFlushing) {
|
||||
// cancel background job
|
||||
if (fTypeCacherJob.getState() == Job.RUNNING) {
|
||||
// wait for job to finish?
|
||||
try {
|
||||
fTypeCacherJob.cancel();
|
||||
fTypeCacherJob.join();
|
||||
} catch (InterruptedException ex) {
|
||||
}
|
||||
}
|
||||
|
||||
if (fFlushAll) {
|
||||
// flush the entire cache
|
||||
fTypeCacherJob.setSearchPaths(null);
|
||||
fTypeCache.flushAll();
|
||||
} else {
|
||||
// flush affected files from cache
|
||||
Set searchPaths= new HashSet(10);
|
||||
getPrefixMatches(fPrefixes, searchPaths);
|
||||
searchPaths.addAll(fPaths);
|
||||
fTypeCacherJob.setSearchPaths(searchPaths);
|
||||
fTypeCache.flush(searchPaths);
|
||||
}
|
||||
|
||||
// restart the background job
|
||||
if (fCreateBackgroundJob) {
|
||||
fTypeCacherJob.setPriority(Job.BUILD);
|
||||
fTypeCacherJob.schedule();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* returns true if the cache needs to be flushed
|
||||
*/
|
||||
private boolean processDelta(ICElementDelta delta) {
|
||||
ICElement elem= delta.getElement();
|
||||
int pathEntryChanged= ICElementDelta.F_ADDED_PATHENTRY_SOURCE | ICElementDelta.F_REMOVED_PATHENTRY_SOURCE |
|
||||
ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE | ICElementDelta.F_CHANGED_PATHENTRY_MACRO;
|
||||
boolean isAddedOrRemoved= (delta.getKind() != ICElementDelta.CHANGED)
|
||||
|| ((delta.getFlags() & pathEntryChanged) != 0);
|
||||
|
||||
switch (elem.getElementType()) {
|
||||
case ICElement.C_MODEL:
|
||||
{
|
||||
if (isAddedOrRemoved) {
|
||||
// CModel has changed
|
||||
// flush the entire cache
|
||||
fFlushAll= true;
|
||||
return true;
|
||||
}
|
||||
return processDeltaChildren(delta);
|
||||
}
|
||||
|
||||
case ICElement.C_PROJECT:
|
||||
case ICElement.C_CCONTAINER:
|
||||
{
|
||||
if (isAddedOrRemoved) {
|
||||
// project or folder has changed
|
||||
// flush all files with matching prefix
|
||||
IPath path= elem.getPath();
|
||||
if (path != null)
|
||||
fPrefixes.add(path);
|
||||
return true;
|
||||
}
|
||||
return processDeltaChildren(delta);
|
||||
}
|
||||
|
||||
case ICElement.C_NAMESPACE:
|
||||
case ICElement.C_TEMPLATE_CLASS:
|
||||
case ICElement.C_CLASS:
|
||||
case ICElement.C_STRUCT:
|
||||
case ICElement.C_UNION:
|
||||
case ICElement.C_ENUMERATION:
|
||||
case ICElement.C_TYPEDEF:
|
||||
case ICElement.C_INCLUDE:
|
||||
case ICElement.C_UNIT:
|
||||
{
|
||||
if (isAddedOrRemoved) {
|
||||
// CElement has changed
|
||||
// flush file from cache
|
||||
IPath path= elem.getPath();
|
||||
if (path != null)
|
||||
fPaths.add(path);
|
||||
return true;
|
||||
}
|
||||
return processDeltaChildren(delta);
|
||||
}
|
||||
|
||||
default:
|
||||
// fields, methods, imports ect
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean processDeltaChildren(ICElementDelta delta) {
|
||||
ICElementDelta[] children= delta.getAffectedChildren();
|
||||
for (int i= 0; i < children.length; i++) {
|
||||
if (processDelta(children[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean getPrefixMatches(Set prefixes, Set results) {
|
||||
Set pathSet= fTypeCache.getAllFiles();
|
||||
if (pathSet.isEmpty() || prefixes == null || prefixes.isEmpty())
|
||||
return false;
|
||||
|
||||
for (Iterator pathIter= pathSet.iterator(); pathIter.hasNext(); ) {
|
||||
IPath path= (IPath) pathIter.next();
|
||||
|
||||
// find paths which match prefix
|
||||
for (Iterator prefixIter= prefixes.iterator(); prefixIter.hasNext(); ) {
|
||||
IPath prefix= (IPath) prefixIter.next();
|
||||
if (prefix.isPrefixOf(path)) {
|
||||
results.add(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return !results.isEmpty();
|
||||
}
|
||||
}
|
|
@ -61,12 +61,12 @@ public class TypeCacherJob extends Job {
|
|||
* @see IJobManager#join(Object, IProgressMonitor)
|
||||
* @since 3.0
|
||||
*/
|
||||
private static final Object FAMILY= new Object();
|
||||
public static final Object FAMILY= new Object();
|
||||
|
||||
private DelegatedProgressMonitor fProgressMonitor;
|
||||
private Set fSearchPaths= new HashSet(50);
|
||||
private TypeCache fTypeCache;
|
||||
private IWorkingCopyProvider fWorkingCopyProvider;
|
||||
private DelegatedProgressMonitor fProgressMonitor= new DelegatedProgressMonitor();
|
||||
|
||||
public TypeCacherJob(TypeCache cache, IWorkingCopyProvider provider) {
|
||||
super(TypeCacheMessages.getString("TypeCacherJob.jobName")); //$NON-NLS-1$
|
||||
|
@ -94,7 +94,11 @@ public class TypeCacherJob extends Job {
|
|||
* @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor)
|
||||
*/
|
||||
public IStatus run(IProgressMonitor monitor) {
|
||||
fProgressMonitor= new DelegatedProgressMonitor(monitor);
|
||||
if (monitor.isCanceled())
|
||||
return Status.CANCEL_STATUS;
|
||||
|
||||
fProgressMonitor.init();
|
||||
fProgressMonitor.addDelegate(monitor);
|
||||
|
||||
try {
|
||||
search(fProgressMonitor);
|
||||
|
@ -104,7 +108,8 @@ public class TypeCacherJob extends Job {
|
|||
} catch (OperationCanceledException ex) {
|
||||
return Status.CANCEL_STATUS;
|
||||
} finally {
|
||||
fProgressMonitor= null;
|
||||
fProgressMonitor.removeAllDelegates();
|
||||
fProgressMonitor.init();
|
||||
}
|
||||
|
||||
return Status.OK_STATUS;
|
||||
|
@ -120,7 +125,6 @@ public class TypeCacherJob extends Job {
|
|||
* @see Job#join
|
||||
*/
|
||||
public void join(IProgressMonitor monitor) throws InterruptedException {
|
||||
if (fProgressMonitor != null)
|
||||
fProgressMonitor.addDelegate(monitor);
|
||||
super.join();
|
||||
}
|
||||
|
|
|
@ -28,24 +28,38 @@ public class DelegatedProgressMonitor implements IProgressMonitor, IProgressMoni
|
|||
private final ArrayList fDelegateList = new ArrayList(INITIAL_DELEGATE_COUNT);
|
||||
private String fTaskName;
|
||||
private String fSubTask;
|
||||
private int fTotalWork = IProgressMonitor.UNKNOWN;
|
||||
private int fTotalWork;
|
||||
private double fWorked;
|
||||
private boolean fIsBlocked = false;
|
||||
private boolean fIsCanceled = false;
|
||||
private boolean fIsBlocked;
|
||||
private boolean fIsCanceled;
|
||||
|
||||
/**
|
||||
* Creates a new delegated monitor.
|
||||
*/
|
||||
public DelegatedProgressMonitor() {
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new delegated monitor, and adds a delegate.
|
||||
*/
|
||||
public DelegatedProgressMonitor(IProgressMonitor delegate) {
|
||||
init();
|
||||
addDelegate(delegate);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets delegated monitor to initial state.
|
||||
*/
|
||||
public synchronized void init() {
|
||||
fTaskName= null;
|
||||
fSubTask= null;
|
||||
fTotalWork= IProgressMonitor.UNKNOWN;
|
||||
fWorked= 0.0f;
|
||||
fIsBlocked= false;
|
||||
fIsCanceled= false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see IProgressMonitor#beginTask
|
||||
*/
|
||||
|
@ -198,6 +212,13 @@ public class DelegatedProgressMonitor implements IProgressMonitor, IProgressMoni
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all delegates.
|
||||
*/
|
||||
public synchronized void removeAllDelegates() {
|
||||
fDelegateList.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the delegate list.
|
||||
*
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
2004-04-06 Chris Wiebe
|
||||
initial placement of non-ui code into org.eclipse.cdt.core.browser
|
||||
|
||||
2004-04-20 Bogdan Gheorghe
|
||||
Added clear() to CSearchResultPage to solve refresh problem on Linux.
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ public class OpenTypeAction implements IWorkbenchWindowActionDelegate {
|
|||
}
|
||||
|
||||
protected Shell getShell() {
|
||||
return CUIPlugin.getDefault().getActiveWorkbenchShell();
|
||||
return CUIPlugin.getActiveWorkbenchShell();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,6 +9,7 @@ package org.eclipse.cdt.internal.ui.preferences;
|
|||
import java.util.ArrayList;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.browser.AllTypesCache;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchPage;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
@ -45,6 +46,7 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
|||
private Combo fExternLinks;
|
||||
private Button fExternEnabled;
|
||||
private Button fIProblemMarkers;
|
||||
private Button fBackgroundTypeCacheEnabled;
|
||||
|
||||
protected OverlayPreferenceStore fOverlayStore;
|
||||
private Text fTextControl;
|
||||
|
@ -59,6 +61,7 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
|||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CSearchPage.EXTERNALMATCH_ENABLED));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSearchPage.EXTERNALMATCH_VISIBLE));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, SourceIndexer.CDT_INDEXER_TIMEOUT));
|
||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
||||
|
||||
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
||||
overlayKeys.toArray(keys);
|
||||
|
@ -120,7 +123,22 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
|||
indexerTimeoutGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
indexerTimeoutGroup.setText("Indexer Timeout"); //$NON-NLS-1$
|
||||
|
||||
fTextControl = (Text) addTextField( indexerTimeoutGroup, "Time out (ms)","TimeOut",6,0,true);
|
||||
fTextControl = (Text) addTextField( indexerTimeoutGroup, "Time out (ms)","TimeOut",6,0,true); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
Group backgroundTypeCacheGroup= new Group(result, SWT.NONE);
|
||||
backgroundTypeCacheGroup.setLayout(new GridLayout());
|
||||
backgroundTypeCacheGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
backgroundTypeCacheGroup.setText("Open Type"); //$NON-NLS-1$
|
||||
|
||||
fBackgroundTypeCacheEnabled = createCheckButton(backgroundTypeCacheGroup, "Cache types in background"); //$NON-NLS-1$
|
||||
fBackgroundTypeCacheEnabled.addSelectionListener(new SelectionListener() {
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
}
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
Button button = (Button) e.widget;
|
||||
fOverlayStore.setValue(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, button.getSelection());
|
||||
}
|
||||
});
|
||||
|
||||
initialize();
|
||||
|
||||
|
@ -137,7 +155,7 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
|||
|
||||
fTextControl.setText(fOverlayStore.getString(SourceIndexer.CDT_INDEXER_TIMEOUT));
|
||||
|
||||
|
||||
fBackgroundTypeCacheEnabled.setSelection(fOverlayStore.getBoolean(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -199,6 +217,9 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
|||
// Store IProblem Marker value in CCorePlugin Preferences
|
||||
Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
|
||||
prefs.setValue(SourceIndexer.CDT_INDEXER_TIMEOUT,fOverlayStore.getString(SourceIndexer.CDT_INDEXER_TIMEOUT));
|
||||
|
||||
prefs.setValue(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, fOverlayStore.getString(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
||||
|
||||
CCorePlugin.getDefault().savePluginPreferences();
|
||||
|
||||
return true;
|
||||
|
@ -210,7 +231,8 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
|||
public static void initDefaults(IPreferenceStore store) {
|
||||
store.setDefault(CSearchPage.EXTERNALMATCH_ENABLED, false);
|
||||
store.setDefault(CSearchPage.EXTERNALMATCH_VISIBLE, 0);
|
||||
store.setDefault(SourceIndexer.CDT_INDEXER_TIMEOUT, "20000");
|
||||
store.setDefault(SourceIndexer.CDT_INDEXER_TIMEOUT, "20000"); //$NON-NLS-1$
|
||||
store.setDefault(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, true);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue