001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.lib.lexer.inc;
043:
044: import org.netbeans.api.lexer.TokenChange;
045: import org.netbeans.api.lexer.TokenId;
046: import org.netbeans.lib.lexer.LexerApiPackageAccessor;
047: import org.netbeans.lib.lexer.TokenList;
048:
049: /**
050: * Description of the change in a token list.
051: * <br/>
052: * The change is expressed as a list of removed tokens
053: * plus the current list and index and number of the tokens
054: * added to the current list.
055: *
056: * @author Miloslav Metelka
057: * @version 1.00
058: */
059:
060: public final class TokenChangeInfo<T extends TokenId> {
061:
062: private static final TokenChange<?>[] EMPTY_EMBEDDED_CHANGES = (TokenChange<?>[]) new TokenChange[0];
063:
064: private TokenChange<?>[] embeddedChanges = EMPTY_EMBEDDED_CHANGES;
065:
066: private final TokenList<T> currentTokenList;
067:
068: private RemovedTokenList<T> removedTokenList;
069:
070: private int addedTokenCount;
071:
072: private int index;
073:
074: private int offset;
075:
076: private boolean boundsChange;
077:
078: public TokenChangeInfo(TokenList<T> currentTokenList) {
079: this .currentTokenList = currentTokenList;
080: }
081:
082: public TokenChange<?>[] embeddedChanges() {
083: return embeddedChanges;
084: }
085:
086: public void addEmbeddedChange(TokenChangeInfo<?> change) {
087: TokenChange<?>[] tmp = (TokenChange<?>[]) new TokenChange[embeddedChanges.length + 1];
088: System.arraycopy(embeddedChanges, 0, tmp, 0,
089: embeddedChanges.length);
090: tmp[embeddedChanges.length] = LexerApiPackageAccessor.get()
091: .createTokenChange(change);
092: embeddedChanges = tmp;
093: }
094:
095: public int index() {
096: return index;
097: }
098:
099: public void setIndex(int index) {
100: this .index = index;
101: }
102:
103: public int offset() {
104: return offset;
105: }
106:
107: public void setOffset(int offset) {
108: this .offset = offset;
109: }
110:
111: public RemovedTokenList<T> removedTokenList() {
112: return removedTokenList;
113: }
114:
115: public void setRemovedTokenList(RemovedTokenList<T> removedTokenList) {
116: this .removedTokenList = removedTokenList;
117: }
118:
119: public int addedTokenCount() {
120: return addedTokenCount;
121: }
122:
123: public void setAddedTokenCount(int addedTokenCount) {
124: this .addedTokenCount = addedTokenCount;
125: }
126:
127: public TokenList<T> currentTokenList() {
128: return currentTokenList;
129: }
130:
131: public boolean isBoundsChange() {
132: return boundsChange;
133: }
134:
135: public void markBoundsChange() {
136: this .boundsChange = true;
137: }
138:
139: }
|