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
|
2004-04-06 Chris Wiebe
|
||||||
initial placement of non-ui code into org.eclipse.cdt.core.browser
|
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;
|
package org.eclipse.cdt.core.browser;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
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.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.model.IWorkingCopy;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCache;
|
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.cache.TypeCacherJob;
|
||||||
import org.eclipse.cdt.internal.core.browser.util.ArrayUtil;
|
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.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;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,6 +47,11 @@ public class AllTypesCache {
|
||||||
private static TypeCache fgCache;
|
private static TypeCache fgCache;
|
||||||
private static TypeCacherJob fgJob;
|
private static TypeCacherJob fgJob;
|
||||||
private static TypeCacheDeltaListener fgDeltaListener;
|
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
|
* Defines a simple interface in order to provide
|
||||||
|
@ -63,18 +68,50 @@ public class AllTypesCache {
|
||||||
* @param provider A working copy provider.
|
* @param provider A working copy provider.
|
||||||
*/
|
*/
|
||||||
public static void initialize(IWorkingCopyProvider 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();
|
fgCache= new TypeCache();
|
||||||
fgJob= new TypeCacherJob(fgCache, provider);
|
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
|
// add delta listener
|
||||||
CoreModel.getDefault().addElementChangedListener(fgDeltaListener);
|
CoreModel.getDefault().addElementChangedListener(fgDeltaListener);
|
||||||
|
|
||||||
// schedule job to run after INITIAL_DELAY
|
if (fBackgroundJobEnabled) {
|
||||||
if (fgJob.getState() != Job.RUNNING) {
|
// schedule job to run after INITIAL_DELAY
|
||||||
fgJob.setSearchPaths(null);
|
if (fgJob.getState() != Job.RUNNING) {
|
||||||
fgJob.setPriority(Job.BUILD);
|
fgJob.setSearchPaths(null);
|
||||||
fgJob.schedule(INITIAL_DELAY);
|
fgJob.setPriority(Job.BUILD);
|
||||||
|
fgJob.schedule(INITIAL_DELAY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
* @see IJobManager#join(Object, IProgressMonitor)
|
||||||
* @since 3.0
|
* @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 Set fSearchPaths= new HashSet(50);
|
||||||
private TypeCache fTypeCache;
|
private TypeCache fTypeCache;
|
||||||
private IWorkingCopyProvider fWorkingCopyProvider;
|
private IWorkingCopyProvider fWorkingCopyProvider;
|
||||||
|
private DelegatedProgressMonitor fProgressMonitor= new DelegatedProgressMonitor();
|
||||||
|
|
||||||
public TypeCacherJob(TypeCache cache, IWorkingCopyProvider provider) {
|
public TypeCacherJob(TypeCache cache, IWorkingCopyProvider provider) {
|
||||||
super(TypeCacheMessages.getString("TypeCacherJob.jobName")); //$NON-NLS-1$
|
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)
|
* @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor)
|
||||||
*/
|
*/
|
||||||
public IStatus run(IProgressMonitor monitor) {
|
public IStatus run(IProgressMonitor monitor) {
|
||||||
fProgressMonitor= new DelegatedProgressMonitor(monitor);
|
if (monitor.isCanceled())
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
|
|
||||||
|
fProgressMonitor.init();
|
||||||
|
fProgressMonitor.addDelegate(monitor);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
search(fProgressMonitor);
|
search(fProgressMonitor);
|
||||||
|
@ -104,7 +108,8 @@ public class TypeCacherJob extends Job {
|
||||||
} catch (OperationCanceledException ex) {
|
} catch (OperationCanceledException ex) {
|
||||||
return Status.CANCEL_STATUS;
|
return Status.CANCEL_STATUS;
|
||||||
} finally {
|
} finally {
|
||||||
fProgressMonitor= null;
|
fProgressMonitor.removeAllDelegates();
|
||||||
|
fProgressMonitor.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status.OK_STATUS;
|
return Status.OK_STATUS;
|
||||||
|
@ -120,8 +125,7 @@ public class TypeCacherJob extends Job {
|
||||||
* @see Job#join
|
* @see Job#join
|
||||||
*/
|
*/
|
||||||
public void join(IProgressMonitor monitor) throws InterruptedException {
|
public void join(IProgressMonitor monitor) throws InterruptedException {
|
||||||
if (fProgressMonitor != null)
|
fProgressMonitor.addDelegate(monitor);
|
||||||
fProgressMonitor.addDelegate(monitor);
|
|
||||||
super.join();
|
super.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,24 +28,38 @@ public class DelegatedProgressMonitor implements IProgressMonitor, IProgressMoni
|
||||||
private final ArrayList fDelegateList = new ArrayList(INITIAL_DELEGATE_COUNT);
|
private final ArrayList fDelegateList = new ArrayList(INITIAL_DELEGATE_COUNT);
|
||||||
private String fTaskName;
|
private String fTaskName;
|
||||||
private String fSubTask;
|
private String fSubTask;
|
||||||
private int fTotalWork = IProgressMonitor.UNKNOWN;
|
private int fTotalWork;
|
||||||
private double fWorked;
|
private double fWorked;
|
||||||
private boolean fIsBlocked = false;
|
private boolean fIsBlocked;
|
||||||
private boolean fIsCanceled = false;
|
private boolean fIsCanceled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new delegated monitor.
|
* Creates a new delegated monitor.
|
||||||
*/
|
*/
|
||||||
public DelegatedProgressMonitor() {
|
public DelegatedProgressMonitor() {
|
||||||
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new delegated monitor, and adds a delegate.
|
* Creates a new delegated monitor, and adds a delegate.
|
||||||
*/
|
*/
|
||||||
public DelegatedProgressMonitor(IProgressMonitor delegate) {
|
public DelegatedProgressMonitor(IProgressMonitor delegate) {
|
||||||
|
init();
|
||||||
addDelegate(delegate);
|
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
|
* @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.
|
* 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
|
2004-04-20 Bogdan Gheorghe
|
||||||
Added clear() to CSearchResultPage to solve refresh problem on Linux.
|
Added clear() to CSearchResultPage to solve refresh problem on Linux.
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ public class OpenTypeAction implements IWorkbenchWindowActionDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Shell getShell() {
|
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 java.util.ArrayList;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
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.core.search.indexing.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchPage;
|
import org.eclipse.cdt.internal.ui.search.CSearchPage;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
@ -45,6 +46,7 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
||||||
private Combo fExternLinks;
|
private Combo fExternLinks;
|
||||||
private Button fExternEnabled;
|
private Button fExternEnabled;
|
||||||
private Button fIProblemMarkers;
|
private Button fIProblemMarkers;
|
||||||
|
private Button fBackgroundTypeCacheEnabled;
|
||||||
|
|
||||||
protected OverlayPreferenceStore fOverlayStore;
|
protected OverlayPreferenceStore fOverlayStore;
|
||||||
private Text fTextControl;
|
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.BOOLEAN, CSearchPage.EXTERNALMATCH_ENABLED));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSearchPage.EXTERNALMATCH_VISIBLE));
|
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.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()];
|
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
||||||
overlayKeys.toArray(keys);
|
overlayKeys.toArray(keys);
|
||||||
|
@ -120,7 +123,22 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
||||||
indexerTimeoutGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
indexerTimeoutGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||||
indexerTimeoutGroup.setText("Indexer Timeout"); //$NON-NLS-1$
|
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();
|
initialize();
|
||||||
|
|
||||||
|
@ -137,7 +155,7 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
||||||
|
|
||||||
fTextControl.setText(fOverlayStore.getString(SourceIndexer.CDT_INDEXER_TIMEOUT));
|
fTextControl.setText(fOverlayStore.getString(SourceIndexer.CDT_INDEXER_TIMEOUT));
|
||||||
|
|
||||||
|
fBackgroundTypeCacheEnabled.setSelection(fOverlayStore.getBoolean(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -199,6 +217,9 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
||||||
// Store IProblem Marker value in CCorePlugin Preferences
|
// Store IProblem Marker value in CCorePlugin Preferences
|
||||||
Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
|
Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
|
||||||
prefs.setValue(SourceIndexer.CDT_INDEXER_TIMEOUT,fOverlayStore.getString(SourceIndexer.CDT_INDEXER_TIMEOUT));
|
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();
|
CCorePlugin.getDefault().savePluginPreferences();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -210,7 +231,8 @@ public class WorkInProgressPreferencePage extends PreferencePage
|
||||||
public static void initDefaults(IPreferenceStore store) {
|
public static void initDefaults(IPreferenceStore store) {
|
||||||
store.setDefault(CSearchPage.EXTERNALMATCH_ENABLED, false);
|
store.setDefault(CSearchPage.EXTERNALMATCH_ENABLED, false);
|
||||||
store.setDefault(CSearchPage.EXTERNALMATCH_VISIBLE, 0);
|
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