1 21 package proguard.obfuscate; 22 23 import java.io.*; 24 import java.util.*; 25 26 33 public class DictionaryNameFactory implements NameFactory 34 { 35 private static final char COMMENT_CHARACTER = '#'; 36 37 38 private final NameFactory nameFactory; 39 private final List names = new ArrayList(); 40 41 private int index = 0; 42 43 44 50 public DictionaryNameFactory(File file, 51 NameFactory nameFactory) throws IOException 52 { 53 this.nameFactory = nameFactory; 54 55 Reader reader = new FileReader(file); 56 57 try 58 { 59 StringBuffer buffer = new StringBuffer (); 60 61 while (true) 62 { 63 int c = reader.read(); 65 66 if (c != -1 && 68 (buffer.length() == 0 ? 69 Character.isJavaIdentifierStart((char)c) : 70 Character.isJavaIdentifierPart((char)c))) 71 { 72 buffer.append((char)c); 74 } 75 else 76 { 77 if (buffer.length() > 0) 79 { 80 String name = buffer.toString(); 83 if (!names.contains(name)) 84 { 85 names.add(name); 86 } 87 88 buffer.setLength(0); 90 } 91 92 if (c == COMMENT_CHARACTER) 94 { 95 do 97 { 98 c = reader.read(); 99 } 100 while (c != -1 && 101 c != '\n' && 102 c != '\r'); 103 } 104 105 if (c == -1) 107 { 108 return; 110 } 111 } 112 } 113 } 114 finally 115 { 116 reader.close(); 117 } 118 } 119 120 121 123 public void reset() 124 { 125 index = 0; 126 127 nameFactory.reset(); 128 } 129 130 131 public String nextName() 132 { 133 String name; 134 135 if (index < names.size()) 137 { 138 name = (String )names.get(index++); 140 } 141 else 142 { 143 do 145 { 146 name = nameFactory.nextName(); 147 } 148 while (names.contains(name)); 149 } 150 151 return name; 152 } 153 154 155 public static void main(String [] args) 156 { 157 try 158 { 159 DictionaryNameFactory factory = 160 new DictionaryNameFactory(new File(args[0]), new SimpleNameFactory()); 161 162 for (int counter = 0; counter < 50; counter++) 163 { 164 System.out.println("["+factory.nextName()+"]"); 165 } 166 } 167 catch (IOException ex) 168 { 169 ex.printStackTrace(); 170 } 171 } 172 } 173 | Popular Tags |