org.eclipse.xtext.ui.editor.reconciler
Class XtextReconciler

java.lang.Object
  extended by org.eclipse.core.runtime.PlatformObject
      extended by org.eclipse.core.internal.jobs.InternalJob
          extended by org.eclipse.core.runtime.jobs.Job
              extended by org.eclipse.xtext.ui.editor.reconciler.XtextReconciler
All Implemented Interfaces:
java.lang.Comparable, org.eclipse.core.runtime.IAdaptable, org.eclipse.jface.text.reconciler.IReconciler

public class XtextReconciler
extends org.eclipse.core.runtime.jobs.Job
implements org.eclipse.jface.text.reconciler.IReconciler

Standard JFace Reconcilers, e.g. the MonoReconciler, convert an replace event into a delete and an insert DirtyRegion. This leads to significant overhead, as DRs of different types cannot be merged, and the partial parsing has to be performed for each DR in the queue. We overcome this situation by writing our own reconciler that only creates ReplaceRegions which can always be merged, such that we have to call the partial parser only once. Additionally, we simplify the reconciler by using the Job API.

Author:
Jan Köhnlein - Initial contribution and API, Michael Clay

Nested Class Summary
protected  class XtextReconciler.DocumentListener
           
protected  class XtextReconciler.TextInputListener
          Reconciles the entire document when the document in the viewer is changed.
 
Field Summary
 
Fields inherited from class org.eclipse.core.runtime.jobs.Job
ASYNC_FINISH, BUILD, DECORATE, INTERACTIVE, LONG, NONE, RUNNING, SHORT, SLEEPING, WAITING
 
Fields inherited from class org.eclipse.core.internal.jobs.InternalJob
manager
 
Constructor Summary
XtextReconciler(XtextDocumentReconcileStrategy strategy)
           
 
Method Summary
 boolean belongsTo(java.lang.Object family)
          Returns whether this job belongs to the given family.
protected  ReplaceRegion getAndResetReplaceRegion()
           
 org.eclipse.jface.text.reconciler.IReconcilingStrategy getReconcilingStrategy(java.lang.String contentType)
          Returns the reconciling strategy registered with the reconciler for the specified content type.
protected  void handleInputDocumentChanged(org.eclipse.jface.text.IDocument oldInput, org.eclipse.jface.text.IDocument newInput)
           
 void install(org.eclipse.jface.text.ITextViewer textViewer)
          Installs the reconciler on the given text viewer.
protected  void pause()
           
protected  void resume()
           
protected  org.eclipse.core.runtime.IStatus run(org.eclipse.core.runtime.IProgressMonitor monitor)
          Executes this job.
 void setDelay(int delay)
           
 void setReconcilingStrategy(org.eclipse.jface.text.reconciler.IReconcilingStrategy strategy)
           
 void uninstall()
          Removes the reconciler from the text viewer it has previously been installed on.
 
Methods inherited from class org.eclipse.core.runtime.jobs.Job
addJobChangeListener, cancel, canceling, done, getJobManager, getName, getPriority, getProperty, getResult, getRule, getState, getThread, isBlocking, isSystem, isUser, join, removeJobChangeListener, schedule, schedule, setName, setPriority, setProgressGroup, setProperty, setRule, setSystem, setThread, setUser, shouldRun, shouldSchedule, sleep, toString, wakeUp, wakeUp, yieldRule
 
Methods inherited from class org.eclipse.core.internal.jobs.InternalJob
compareTo
 
Methods inherited from class org.eclipse.core.runtime.PlatformObject
getAdapter
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.eclipse.core.runtime.IAdaptable
getAdapter
 

Constructor Detail

XtextReconciler

@Inject
public XtextReconciler(XtextDocumentReconcileStrategy strategy)
Method Detail

getReconcilingStrategy

public org.eclipse.jface.text.reconciler.IReconcilingStrategy getReconcilingStrategy(java.lang.String contentType)
Description copied from interface: org.eclipse.jface.text.reconciler.IReconciler
Returns the reconciling strategy registered with the reconciler for the specified content type.

Specified by:
getReconcilingStrategy in interface org.eclipse.jface.text.reconciler.IReconciler
Parameters:
contentType - the content type for which to determine the reconciling strategy
Returns:
the reconciling strategy registered for the given content type, or null if there is no such strategy

setReconcilingStrategy

public void setReconcilingStrategy(org.eclipse.jface.text.reconciler.IReconcilingStrategy strategy)

install

public void install(org.eclipse.jface.text.ITextViewer textViewer)
Description copied from interface: org.eclipse.jface.text.reconciler.IReconciler
Installs the reconciler on the given text viewer. After this method has been finished, the reconciler is operational, i.e., it works without requesting further client actions until uninstall is called.

Specified by:
install in interface org.eclipse.jface.text.reconciler.IReconciler
Parameters:
textViewer - the viewer on which the reconciler is installed

uninstall

public void uninstall()
Description copied from interface: org.eclipse.jface.text.reconciler.IReconciler
Removes the reconciler from the text viewer it has previously been installed on.

Specified by:
uninstall in interface org.eclipse.jface.text.reconciler.IReconciler

handleInputDocumentChanged

protected void handleInputDocumentChanged(org.eclipse.jface.text.IDocument oldInput,
                                          org.eclipse.jface.text.IDocument newInput)

pause

protected void pause()

resume

protected void resume()

setDelay

public void setDelay(int delay)

belongsTo

public boolean belongsTo(java.lang.Object family)
Description copied from class: org.eclipse.core.runtime.jobs.Job
Returns whether this job belongs to the given family. Job families are represented as objects that are not interpreted or specified in any way by the job manager. Thus, a job can choose to belong to any number of families.

Clients may override this method. This default implementation always returns false. Overriding implementations must return false for families they do not recognize.

Overrides:
belongsTo in class org.eclipse.core.runtime.jobs.Job
Parameters:
family - the job family identifier
Returns:
true if this job belongs to the given family, and false otherwise.

run

protected org.eclipse.core.runtime.IStatus run(org.eclipse.core.runtime.IProgressMonitor monitor)
Description copied from class: org.eclipse.core.runtime.jobs.Job
Executes this job. Returns the result of the execution.

The provided monitor can be used to report progress and respond to cancellation. If the progress monitor has been canceled, the job should finish its execution at the earliest convenience and return a result status of severity IStatus.CANCEL. The singleton cancel status Status.CANCEL_STATUS can be used for this purpose. The monitor is only valid for the duration of the invocation of this method.

This method must not be called directly by clients. Clients should call schedule, which will in turn cause this method to be called.

Jobs can optionally finish their execution asynchronously (in another thread) by returning a result status of Job.ASYNC_FINISH. Jobs that finish asynchronously must specify the execution thread by calling setThread, and must indicate when they are finished by calling the method done.

Specified by:
run in class org.eclipse.core.runtime.jobs.Job
Parameters:
monitor - the monitor to be used for reporting progress and responding to cancelation. The monitor is never null
Returns:
resulting status of the run. The result must not be null
See Also:
Job.ASYNC_FINISH, Job.done(IStatus)

getAndResetReplaceRegion

protected ReplaceRegion getAndResetReplaceRegion()