001: /*******************************************************************************
002: * Copyright (c) 2004, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.internal.core.util;
011:
012: import org.eclipse.jdt.internal.core.JavaElement;
013:
014: public class MementoTokenizer {
015: private static final String COUNT = Character
016: .toString(JavaElement.JEM_COUNT);
017: private static final String JAVAPROJECT = Character
018: .toString(JavaElement.JEM_JAVAPROJECT);
019: private static final String PACKAGEFRAGMENTROOT = Character
020: .toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
021: private static final String PACKAGEFRAGMENT = Character
022: .toString(JavaElement.JEM_PACKAGEFRAGMENT);
023: private static final String FIELD = Character
024: .toString(JavaElement.JEM_FIELD);
025: private static final String METHOD = Character
026: .toString(JavaElement.JEM_METHOD);
027: private static final String INITIALIZER = Character
028: .toString(JavaElement.JEM_INITIALIZER);
029: private static final String COMPILATIONUNIT = Character
030: .toString(JavaElement.JEM_COMPILATIONUNIT);
031: private static final String CLASSFILE = Character
032: .toString(JavaElement.JEM_CLASSFILE);
033: private static final String TYPE = Character
034: .toString(JavaElement.JEM_TYPE);
035: private static final String PACKAGEDECLARATION = Character
036: .toString(JavaElement.JEM_PACKAGEDECLARATION);
037: private static final String IMPORTDECLARATION = Character
038: .toString(JavaElement.JEM_IMPORTDECLARATION);
039: private static final String LOCALVARIABLE = Character
040: .toString(JavaElement.JEM_LOCALVARIABLE);
041: private static final String TYPE_PARAMETER = Character
042: .toString(JavaElement.JEM_TYPE_PARAMETER);
043:
044: private final char[] memento;
045: private final int length;
046: private int index = 0;
047:
048: public MementoTokenizer(String memento) {
049: this .memento = memento.toCharArray();
050: this .length = this .memento.length;
051: }
052:
053: public boolean hasMoreTokens() {
054: return this .index < this .length;
055: }
056:
057: public String nextToken() {
058: int start = this .index;
059: StringBuffer buffer = null;
060: switch (this .memento[this .index++]) {
061: case JavaElement.JEM_ESCAPE:
062: buffer = new StringBuffer();
063: buffer.append(this .memento[this .index]);
064: start = ++this .index;
065: break;
066: case JavaElement.JEM_COUNT:
067: return COUNT;
068: case JavaElement.JEM_JAVAPROJECT:
069: return JAVAPROJECT;
070: case JavaElement.JEM_PACKAGEFRAGMENTROOT:
071: return PACKAGEFRAGMENTROOT;
072: case JavaElement.JEM_PACKAGEFRAGMENT:
073: return PACKAGEFRAGMENT;
074: case JavaElement.JEM_FIELD:
075: return FIELD;
076: case JavaElement.JEM_METHOD:
077: return METHOD;
078: case JavaElement.JEM_INITIALIZER:
079: return INITIALIZER;
080: case JavaElement.JEM_COMPILATIONUNIT:
081: return COMPILATIONUNIT;
082: case JavaElement.JEM_CLASSFILE:
083: return CLASSFILE;
084: case JavaElement.JEM_TYPE:
085: return TYPE;
086: case JavaElement.JEM_PACKAGEDECLARATION:
087: return PACKAGEDECLARATION;
088: case JavaElement.JEM_IMPORTDECLARATION:
089: return IMPORTDECLARATION;
090: case JavaElement.JEM_LOCALVARIABLE:
091: return LOCALVARIABLE;
092: case JavaElement.JEM_TYPE_PARAMETER:
093: return TYPE_PARAMETER;
094: }
095: loop: while (this .index < this .length) {
096: switch (this .memento[this .index]) {
097: case JavaElement.JEM_ESCAPE:
098: if (buffer == null)
099: buffer = new StringBuffer();
100: buffer.append(this .memento, start, this .index - start);
101: start = ++this .index;
102: break;
103: case JavaElement.JEM_COUNT:
104: case JavaElement.JEM_JAVAPROJECT:
105: case JavaElement.JEM_PACKAGEFRAGMENTROOT:
106: case JavaElement.JEM_PACKAGEFRAGMENT:
107: case JavaElement.JEM_FIELD:
108: case JavaElement.JEM_METHOD:
109: case JavaElement.JEM_INITIALIZER:
110: case JavaElement.JEM_COMPILATIONUNIT:
111: case JavaElement.JEM_CLASSFILE:
112: case JavaElement.JEM_TYPE:
113: case JavaElement.JEM_PACKAGEDECLARATION:
114: case JavaElement.JEM_IMPORTDECLARATION:
115: case JavaElement.JEM_LOCALVARIABLE:
116: case JavaElement.JEM_TYPE_PARAMETER:
117: break loop;
118: }
119: this .index++;
120: }
121: if (buffer != null) {
122: buffer.append(this .memento, start, this .index - start);
123: return buffer.toString();
124: } else {
125: return new String(this.memento, start, this.index - start);
126: }
127: }
128:
129: }
|