1 33 34 package edu.rice.cs.drjava.model; 35 36 import java.io.*; 37 38 40 41 public class ClassAndInterfaceFinder { 42 43 private StreamTokenizer tokenizer; 44 45 46 public ClassAndInterfaceFinder(Reader r) { 47 initialize(r); 48 } 49 50 51 public ClassAndInterfaceFinder(File f) { 52 Reader r; 53 try { r = new FileReader(f); } 54 catch(FileNotFoundException e) { 55 r = new StringReader(""); 56 } 57 initialize(r); 58 } 59 60 private void initialize(Reader r) { 61 62 tokenizer = new StreamTokenizer(r); 63 tokenizer.slashSlashComments(true); 64 tokenizer.slashStarComments(true); 65 tokenizer.lowerCaseMode(false); 66 tokenizer.wordChars('_','_'); 67 tokenizer.wordChars('.','.'); 68 } 69 70 74 public String getClassOrInterfaceName() { return getName(true); } 75 76 80 public String getClassName() { return getName(false); } 81 82 87 String getName(boolean interfaceOK) { 88 try { 89 String package_name = ""; 90 int tokenType; 91 92 do { 94 tokenType = tokenizer.nextToken(); 95 } while(! isClassOrInterfaceWord(tokenType,interfaceOK) && ! isPackageWord(tokenType)); 96 97 if (isEOF(tokenType)) return ""; 98 99 100 String keyword = tokenizer.sval; 101 102 do { 104 tokenType = tokenizer.nextToken(); 105 } while (! isWord(tokenType)); 106 107 if (isEOF(tokenType)) return ""; 108 109 if (keyword.equals("class")) return tokenizer.sval; 111 if (interfaceOK && keyword.equals("interface")) return tokenizer.sval; 113 if (keyword.equals("package")) package_name = tokenizer.sval; 114 115 do { tokenType = tokenizer.nextToken(); } while (! isClassOrInterfaceWord(tokenType, interfaceOK)); 117 118 do { tokenType = tokenizer.nextToken(); } while (! isWord(tokenType)); 120 121 if (tokenType == StreamTokenizer.TT_EOF) return ""; 122 123 if (package_name.length() > 0) return package_name + "." + tokenizer.sval; 124 125 return tokenizer.sval; 126 127 } catch(IOException e) { 128 return ""; 129 } 130 } 131 132 135 private static boolean isWord(int tt) { return tt == StreamTokenizer.TT_WORD || isEOF(tt); } 136 137 private static boolean isEOF(int tt) { return tt == StreamTokenizer.TT_EOF; } 138 139 140 143 private boolean isClassOrInterfaceWord(int tt, boolean interfaceOK) { 144 return isEOF(tt) || 145 (tt == StreamTokenizer.TT_WORD && tokenizer.sval.equals("class")) || 146 (tt == StreamTokenizer.TT_WORD && interfaceOK && tokenizer.sval.equals("interface")); 147 } 148 149 152 private boolean isPackageWord(int tt) { 153 return (tt == StreamTokenizer.TT_WORD && tokenizer.sval.equals("package") || 154 tt == StreamTokenizer.TT_EOF); 155 } 156 } 157 158 159 160 | Popular Tags |