01: /*******************************************************************************
02: * Copyright (c) 2000, 2005 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.jface.text.reconciler;
11:
12: import org.eclipse.jface.text.IDocument;
13: import org.eclipse.jface.text.IRegion;
14:
15: /**
16: * A reconciling strategy is used by an reconciler to reconcile a model
17: * based on text of a particular content type. It provides methods for
18: * incremental as well as non-incremental reconciling.
19: * <p>
20: * If a reconcile strategy consists of several steps between which
21: * model transformation is desired the each step should implement
22: * {@link org.eclipse.jface.text.reconciler.IReconcileStep}.
23: * </p>
24: * <p>
25: * In order to provide backward compatibility for clients of <code>IReconcilingStrategy</code>, extension
26: * interfaces are used to provide a means of evolution. The following extension interfaces exist:
27: * <ul>
28: * <li>{@link org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension} since version 2.0 introducing
29: * the following functions:
30: * <ul>
31: * <li>usage of a progress monitor</li>
32: * <li>initial reconciling step: if a reconciler runs as periodic activity in the background, this
33: * methods offers the reconciler a chance for initializing its strategies and achieving a
34: * reconciled state before the periodic activity starts.</li>
35: * </ul>
36: * </li>
37: * </ul>
38: * </p>
39: * <p>
40: * This interface must be implemented by clients. Implementers should be
41: * registered with a reconciler in order get involved in the reconciling
42: * process.
43: * </p>
44: */
45: public interface IReconcilingStrategy {
46:
47: /**
48: * Tells this reconciling strategy on which document it will
49: * work. This method will be called before any other method
50: * and can be called multiple times. The regions passed to the
51: * other methods always refer to the most recent document
52: * passed into this method.
53: *
54: * @param document the document on which this strategy will work
55: */
56: void setDocument(IDocument document);
57:
58: /**
59: * Activates incremental reconciling of the specified dirty region.
60: * As a dirty region might span multiple content types, the segment of the
61: * dirty region which should be investigated is also provided to this
62: * reconciling strategy. The given regions refer to the document passed into
63: * the most recent call of {@link #setDocument(IDocument)}.
64: *
65: * @param dirtyRegion the document region which has been changed
66: * @param subRegion the sub region in the dirty region which should be reconciled
67: */
68: void reconcile(DirtyRegion dirtyRegion, IRegion subRegion);
69:
70: /**
71: * Activates non-incremental reconciling. The reconciling strategy is just told
72: * that there are changes and that it should reconcile the given partition of the
73: * document most recently passed into {@link #setDocument(IDocument)}.
74: *
75: * @param partition the document partition to be reconciled
76: */
77: void reconcile(IRegion partition);
78: }
|