00001 package edu.ksu.cis.bandera.jjjc.doc;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 import java.io.*;
00036 import ca.mcgill.sable.soot.*;
00037 import ca.mcgill.sable.util.*;
00038 import edu.ksu.cis.bandera.jjjc.analysis.*;
00039 import edu.ksu.cis.bandera.jjjc.node.*;
00040 import java.util.Vector;
00041 import java.util.Hashtable;
00042 import java.util.StringTokenizer;
00043 public class DocProcessor extends DepthFirstAdapter {
00044 private static DocProcessor dp = new DocProcessor();
00045 private java.lang.Object key;
00046
00047
00048
00049 private DocProcessor() {}
00050
00051
00052
00053
00054 public void caseAAbstractModifier(AAbstractModifier node) {
00055 key = node.getAbstract();
00056 }
00057
00058
00059
00060
00061 public void caseABooleanPrimitiveType(ABooleanPrimitiveType node) {
00062 key = node.getBoolean();
00063 }
00064
00065
00066
00067
00068 public void caseABytePrimitiveType(ABytePrimitiveType node) {
00069 key = node.getByte();
00070 }
00071
00072
00073
00074
00075 public void caseACharPrimitiveType(ACharPrimitiveType node) {
00076 key = node.getChar();
00077 }
00078
00079
00080
00081
00082 public void caseAClassDeclaration(AClassDeclaration node) {
00083 if (node.getModifier().size() > 0)
00084 ((Node) node.getModifier().toArray()[0]).apply(this);
00085 else key = node.getTClass();
00086 }
00087
00088
00089
00090
00091 public void caseAConstructorDeclaration(AConstructorDeclaration node) {
00092 if (node.getModifier().size() > 0)
00093 ((Node) node.getModifier().toArray()[0]).apply(this);
00094 else
00095 node.getConstructorDeclarator().apply(this);
00096 }
00097
00098
00099
00100
00101 public void caseAConstructorDeclarator(AConstructorDeclarator node) {
00102 key = node.getSimpleName();
00103 }
00104
00105
00106
00107
00108 public void caseADoublePrimitiveType(ADoublePrimitiveType node) {
00109 key = node.getDouble();
00110 }
00111
00112
00113
00114
00115 public void caseAFinalModifier(AFinalModifier node) {
00116 key = node.getFinal();
00117 }
00118
00119
00120
00121
00122 public void caseAFloatPrimitiveType(AFloatPrimitiveType node) {
00123 key = node.getFloat();
00124 }
00125
00126
00127
00128
00129 public void caseAIntPrimitiveType(AIntPrimitiveType node) {
00130 key = node.getInt();
00131 }
00132
00133
00134
00135
00136 public void caseALongPrimitiveType(ALongPrimitiveType node) {
00137 key = node.getLong();
00138 }
00139
00140
00141
00142
00143 public void caseAMethodDeclaration(AMethodDeclaration node) {
00144 node.getMethodHeader().apply(this);
00145 }
00146
00147
00148
00149
00150 public void caseANativeModifier(ANativeModifier node) {
00151 key = node.getNative();
00152 }
00153
00154
00155
00156
00157 public void caseAPrivateModifier(APrivateModifier node) {
00158 key = node.getPrivate();
00159 }
00160
00161
00162
00163
00164 public void caseAProtectedModifier(AProtectedModifier node) {
00165 key = node.getProtected();
00166 }
00167
00168
00169
00170
00171 public void caseAPublicModifier(APublicModifier node) {
00172 key = node.getPublic();
00173 }
00174
00175
00176
00177
00178 public void caseAShortPrimitiveType(AShortPrimitiveType node) {
00179 key = node.getShort();
00180 }
00181
00182
00183
00184
00185 public void caseASimpleName(ASimpleName node) {
00186 key = node.getId();
00187 }
00188
00189
00190
00191
00192 public void caseAStaticModifier(AStaticModifier node) {
00193 key = node.getStatic();
00194 }
00195
00196
00197
00198
00199 public void caseATransientModifier(ATransientModifier node) {
00200 key = node.getTransient();
00201 }
00202
00203
00204
00205
00206 public void caseATypedMethodHeader(ATypedMethodHeader node) {
00207 if (node.getModifier().size() > 0)
00208 ((Node) node.getModifier().toArray()[0]).apply(this);
00209 else
00210 node.getType().apply(this);
00211 }
00212
00213
00214
00215
00216 public void caseAVoidMethodHeader(AVoidMethodHeader node) {
00217 if (node.getModifier().size() > 0)
00218 ((Node) node.getModifier().toArray()[0]).apply(this);
00219 else key = node.getVoid();
00220 }
00221
00222
00223
00224
00225 public void caseAVolatileModifier(AVolatileModifier node) {
00226 key = node.getVolatile();
00227 }
00228
00229
00230
00231
00232 public static Object getKey(Node node) {
00233 node.apply(dp);
00234 return dp.key;
00235 }
00236
00237
00238
00239
00240
00241
00242 public static java.util.Vector tags(Node node, Hashtable table) {
00243 node.apply(dp);
00244
00245 if (table.get(dp.key) == null)
00246 return new Vector();
00247 Object[] ignoredTokens = ((List) table.get(dp.key)).toArray();
00248 String comment = "";
00249 for (int i = ignoredTokens.length - 1; i >= 0; i--) {
00250 if (ignoredTokens[i] instanceof TDocumentationComment) {
00251 comment = ignoredTokens[i].toString();
00252 break;
00253 }
00254 }
00255 Vector tags = new Vector();
00256 StringTokenizer t = new StringTokenizer(comment, "@");
00257 t.nextToken();
00258 while (t.hasMoreTokens()) {
00259 tags.add("@" + t.nextToken());
00260 }
00261 Vector result = new Vector();
00262 for (java.util.Iterator i = tags.iterator(); i.hasNext();) {
00263 LineNumberReader r = new LineNumberReader(new StringReader((String) i.next()), 8192);
00264 String line;
00265 String tag = "";
00266 try {
00267 while ((line = r.readLine()) != null) {
00268 try {
00269 int start, end;
00270 boolean f = true;
00271 for (start = 0; (start < line.length()) && f; start++) {
00272 switch(line.charAt(start)) {
00273 case ' ':
00274 case '\n':
00275 case '\t':
00276 case '*':
00277 break;
00278 default: f = false;
00279 }
00280 }
00281 f = true;
00282 for (end = line.length() - 1; (end >= 0) && f; end--) {
00283 switch(line.charAt(end)) {
00284 case ' ':
00285 case '\n':
00286 case '\t':
00287 case '*':
00288 case '/':
00289 break;
00290 default: f = false;
00291 }
00292 }
00293 tag += line.substring(start - 1 , end + 2) + "\n";
00294 } catch (Exception e2) {}
00295 }
00296 } catch (Exception e) {}
00297 result.add(tag);
00298 }
00299 return result;
00300 }
00301 }