1 /*******************************************************************************
2 * Copyright (c) 2004 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Common Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/cpl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package net.sourceforge.phpdt.internal.core.util;
13 import net.sourceforge.phpdt.core.compiler.CharOperation;
14 import net.sourceforge.phpdt.internal.core.JavaElement;
16 public class MementoTokenizer {
17 private static final String COUNT = Character
18 .toString(JavaElement.JEM_COUNT);
20 private static final String JAVAPROJECT = Character
21 .toString(JavaElement.JEM_JAVAPROJECT);
23 private static final String PACKAGEFRAGMENTROOT = Character
24 .toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
26 private static final String PACKAGEFRAGMENT = Character
27 .toString(JavaElement.JEM_PACKAGEFRAGMENT);
29 private static final String FIELD = Character
30 .toString(JavaElement.JEM_FIELD);
32 private static final String METHOD = Character
33 .toString(JavaElement.JEM_METHOD);
35 private static final String INITIALIZER = Character
36 .toString(JavaElement.JEM_INITIALIZER);
38 private static final String COMPILATIONUNIT = Character
39 .toString(JavaElement.JEM_COMPILATIONUNIT);
41 // private static final String CLASSFILE =
42 // Character.toString(JavaElement.JEM_CLASSFILE);
43 private static final String TYPE = Character.toString(JavaElement.JEM_TYPE);
45 private static final String PACKAGEDECLARATION = Character
46 .toString(JavaElement.JEM_PACKAGEDECLARATION);
48 private static final String IMPORTDECLARATION = Character
49 .toString(JavaElement.JEM_IMPORTDECLARATION);
51 private static final String LOCALVARIABLE = Character
52 .toString(JavaElement.JEM_LOCALVARIABLE);
54 private final char[] memento;
56 private final int length;
58 private int index = 0;
60 public MementoTokenizer(String memento) {
61 this.memento = memento.toCharArray();
62 this.length = this.memento.length;
65 public boolean hasMoreTokens() {
66 return this.index < this.length;
69 public String nextToken() {
70 int start = this.index;
71 StringBuffer buffer = null;
72 switch (this.memento[this.index++]) {
73 case JavaElement.JEM_ESCAPE:
74 buffer = new StringBuffer();
75 buffer.append(this.memento[this.index]);
78 case JavaElement.JEM_COUNT:
80 case JavaElement.JEM_JAVAPROJECT:
82 case JavaElement.JEM_PACKAGEFRAGMENTROOT:
83 return PACKAGEFRAGMENTROOT;
84 case JavaElement.JEM_PACKAGEFRAGMENT:
85 return PACKAGEFRAGMENT;
86 case JavaElement.JEM_FIELD:
88 case JavaElement.JEM_METHOD:
90 case JavaElement.JEM_INITIALIZER:
92 case JavaElement.JEM_COMPILATIONUNIT:
93 return COMPILATIONUNIT;
94 // case JavaElement.JEM_CLASSFILE:
96 case JavaElement.JEM_TYPE:
98 case JavaElement.JEM_PACKAGEDECLARATION:
99 return PACKAGEDECLARATION;
100 case JavaElement.JEM_IMPORTDECLARATION:
101 return IMPORTDECLARATION;
102 case JavaElement.JEM_LOCALVARIABLE:
103 return LOCALVARIABLE;
105 loop: while (this.index < this.length) {
106 switch (this.memento[this.index]) {
107 case JavaElement.JEM_ESCAPE:
109 buffer = new StringBuffer();
110 buffer.append(CharOperation.subarray(this.memento, start,
112 start = ++this.index;
114 case JavaElement.JEM_COUNT:
115 case JavaElement.JEM_JAVAPROJECT:
116 case JavaElement.JEM_PACKAGEFRAGMENTROOT:
117 case JavaElement.JEM_PACKAGEFRAGMENT:
118 case JavaElement.JEM_FIELD:
119 case JavaElement.JEM_METHOD:
120 case JavaElement.JEM_INITIALIZER:
121 case JavaElement.JEM_COMPILATIONUNIT:
122 // case JavaElement.JEM_CLASSFILE:
123 case JavaElement.JEM_TYPE:
124 case JavaElement.JEM_PACKAGEDECLARATION:
125 case JavaElement.JEM_IMPORTDECLARATION:
126 case JavaElement.JEM_LOCALVARIABLE:
131 if (buffer != null) {
132 buffer.append(CharOperation.subarray(this.memento, start,
134 return buffer.toString();
136 return new String(CharOperation.subarray(this.memento, start,