mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Improved halting of indexer when it hits too many erros. Increased max error count to 500.
This commit is contained in:
parent
3954755d03
commit
456f0c229c
4 changed files with 33 additions and 49 deletions
|
@ -26,14 +26,13 @@ import org.eclipse.core.runtime.jobs.Job;
|
||||||
*/
|
*/
|
||||||
public class PDOMIndexerJob extends Job {
|
public class PDOMIndexerJob extends Job {
|
||||||
|
|
||||||
|
private static final int TOTAL_MONITOR_WORK = 1000;
|
||||||
private final PDOMManager pdomManager;
|
private final PDOMManager pdomManager;
|
||||||
private IPDOMIndexerTask currentTask;
|
private IPDOMIndexerTask currentTask;
|
||||||
private boolean cancelledByManager= false;
|
private boolean cancelledByManager= false;
|
||||||
private Object taskMutex = new Object();
|
private Object taskMutex = new Object();
|
||||||
|
|
||||||
private IProgressMonitor monitor;
|
private IProgressMonitor fMonitor;
|
||||||
|
|
||||||
private Job fMonitorJob;
|
|
||||||
|
|
||||||
public PDOMIndexerJob(PDOMManager manager) {
|
public PDOMIndexerJob(PDOMManager manager) {
|
||||||
super(CCorePlugin.getResourceString("pdom.indexer.name")); //$NON-NLS-1$
|
super(CCorePlugin.getResourceString("pdom.indexer.name")); //$NON-NLS-1$
|
||||||
|
@ -42,10 +41,12 @@ public class PDOMIndexerJob extends Job {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
this.monitor = monitor;
|
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
startMonitorJob(monitor);
|
fMonitor = monitor;
|
||||||
|
String taskName = CCorePlugin.getResourceString("pdom.indexer.task"); //$NON-NLS-1$
|
||||||
|
monitor.beginTask(taskName, TOTAL_MONITOR_WORK);
|
||||||
|
Job monitorJob= startMonitorJob(monitor);
|
||||||
try {
|
try {
|
||||||
do {
|
do {
|
||||||
synchronized(taskMutex) {
|
synchronized(taskMutex) {
|
||||||
|
@ -63,12 +64,7 @@ public class PDOMIndexerJob extends Job {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentTask != null) {
|
if (currentTask != null) {
|
||||||
try {
|
currentTask.run(monitor);
|
||||||
currentTask.run(monitor);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (currentTask != null);
|
while (currentTask != null);
|
||||||
|
@ -99,46 +95,35 @@ public class PDOMIndexerJob extends Job {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
stopMonitorJob();
|
monitorJob.cancel();
|
||||||
|
monitor.done();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopMonitorJob() {
|
private Job startMonitorJob(final IProgressMonitor targetMonitor) {
|
||||||
if (fMonitorJob != null) {
|
Job monitorJob= new Job(CCorePlugin.getResourceString("PDOMIndexerJob.updateMonitorJob")) { //$NON-NLS-1$
|
||||||
fMonitorJob.cancel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void startMonitorJob(final IProgressMonitor monitor) {
|
|
||||||
fMonitorJob= new Job(CCorePlugin.getResourceString("PDOMIndexerJob.updateMonitorJob")) { //$NON-NLS-1$
|
|
||||||
protected IStatus run(IProgressMonitor m) {
|
protected IStatus run(IProgressMonitor m) {
|
||||||
String taskName = CCorePlugin.getResourceString("pdom.indexer.task"); //$NON-NLS-1$
|
int currentTick= 0;
|
||||||
monitor.beginTask(taskName, 1000);
|
while(!m.isCanceled() && !targetMonitor.isCanceled()) {
|
||||||
try {
|
currentTick= pdomManager.getMonitorMessage(targetMonitor, currentTick, TOTAL_MONITOR_WORK);
|
||||||
int currentTick= 0;
|
try {
|
||||||
while(!m.isCanceled()) {
|
Thread.sleep(350);
|
||||||
currentTick= pdomManager.getMonitorMessage(monitor, currentTick, 1000);
|
} catch (InterruptedException e) {
|
||||||
try {
|
return Status.CANCEL_STATUS;
|
||||||
Thread.sleep(350);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return Status.OK_STATUS;
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
monitor.done();
|
|
||||||
}
|
}
|
||||||
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
fMonitorJob.setSystem(true);
|
monitorJob.setSystem(true);
|
||||||
fMonitorJob.schedule();
|
monitorJob.schedule();
|
||||||
|
return monitorJob;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancelJobs(IPDOMIndexer indexer) {
|
public void cancelJobs(IPDOMIndexer indexer) {
|
||||||
synchronized (taskMutex) {
|
synchronized (taskMutex) {
|
||||||
if (currentTask != null && currentTask.getIndexer() == indexer) {
|
if (currentTask != null && currentTask.getIndexer() == indexer) {
|
||||||
monitor.setCanceled(true);
|
fMonitor.setCanceled(true);
|
||||||
cancelledByManager = true;
|
cancelledByManager = true;
|
||||||
while (currentTask != null && currentTask.getIndexer() == indexer) {
|
while (currentTask != null && currentTask.getIndexer() == indexer) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -18,6 +18,7 @@ public class Messages extends NLS {
|
||||||
public static String PDOMIndexerTask_collectingFilesTask;
|
public static String PDOMIndexerTask_collectingFilesTask;
|
||||||
public static String PDOMIndexerTask_errorWhileParsing;
|
public static String PDOMIndexerTask_errorWhileParsing;
|
||||||
public static String PDOMIndexerTask_parsingFileTask;
|
public static String PDOMIndexerTask_parsingFileTask;
|
||||||
|
public static String PDOMIndexerTask_tooManyIndexProblems;
|
||||||
static {
|
static {
|
||||||
// initialize resource bundle
|
// initialize resource bundle
|
||||||
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
|
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
|
||||||
|
|
|
@ -142,27 +142,24 @@ public abstract class PDOMIndexerTask implements IPDOMIndexerTask {
|
||||||
doParseTU(tu, pm);
|
doParseTU(tu, pm);
|
||||||
}
|
}
|
||||||
catch (CoreException e) {
|
catch (CoreException e) {
|
||||||
if (!swallowError(path, e))
|
swallowError(path, e);
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
catch (RuntimeException e) {
|
catch (RuntimeException e) {
|
||||||
if (!swallowError(path, e))
|
swallowError(path, e);
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
catch (Error e) {
|
catch (Error e) {
|
||||||
if (!swallowError(path, e))
|
swallowError(path, e);
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean swallowError(IPath file, Throwable e) {
|
private void swallowError(IPath file, Throwable e) throws CoreException {
|
||||||
if (++fErrorCount <= MAX_ERRORS) {
|
IStatus status= CCorePlugin.createStatus(
|
||||||
IStatus status= CCorePlugin.createStatus(
|
|
||||||
MessageFormat.format(Messages.PDOMIndexerTask_errorWhileParsing, new Object[]{file}), e);
|
MessageFormat.format(Messages.PDOMIndexerTask_errorWhileParsing, new Object[]{file}), e);
|
||||||
CCorePlugin.log(status);
|
CCorePlugin.log(status);
|
||||||
return true;
|
if (++fErrorCount > MAX_ERRORS) {
|
||||||
|
throw new CoreException(CCorePlugin.createStatus(
|
||||||
|
MessageFormat.format(Messages.PDOMIndexerTask_tooManyIndexProblems, new Object[]{getIndexer().getProject().getElementName()})));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected void doParseTU(ITranslationUnit tu, IProgressMonitor pm) throws CoreException, InterruptedException;
|
abstract protected void doParseTU(ITranslationUnit tu, IProgressMonitor pm) throws CoreException, InterruptedException;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
PDOMIndexerTask_collectingFilesTask=Collecting files to parse (project ''{0}'')
|
PDOMIndexerTask_collectingFilesTask=Collecting files to parse (project ''{0}'')
|
||||||
|
PDOMIndexerTask_tooManyIndexProblems=Too many problems while indexing project ''{0}'', stopping indexer.
|
||||||
PDOMIndexerTask_parsingFileTask=parsing {0} ({1})
|
PDOMIndexerTask_parsingFileTask=parsing {0} ({1})
|
||||||
PDOMIndexerTask_errorWhileParsing=Error while parsing {0}.
|
PDOMIndexerTask_errorWhileParsing=Error while parsing {0}.
|
||||||
|
|
Loading…
Add table
Reference in a new issue