1 25 package com.yworks.yguard.obf; 26 27 import java.util.HashMap ; 28 import java.util.Map ; 29 30 34 public abstract class NameMakerFactory 35 { 36 37 38 private static NameMakerFactory instance = new DefaultNameMakerFactory(); 39 40 41 protected NameMakerFactory() 42 {} 43 44 48 public static NameMakerFactory getInstance() 49 { 50 return instance; 51 } 52 53 57 protected void setInstance(NameMakerFactory _instance) 58 { 59 instance = _instance; 60 } 61 62 public abstract NameMaker getPackageNameMaker(String [] reservedNames, String packageName); 63 64 public abstract NameMaker getClassNameMaker(String [] reservedNames, String packageName); 65 66 public abstract NameMaker getInnerClassNameMaker(String [] reservedNames, String packageName); 67 68 public abstract NameMaker getMethodNameMaker(String [] reservedNames, String fqClassName); 69 70 public abstract NameMaker getFieldNameMaker(String [] reservedNames, String fqClassName); 71 72 public static class DefaultNameMakerFactory extends NameMakerFactory{ 73 74 private Map classNameMap = new HashMap (); 75 private Map fieldNameMap = new HashMap (); 76 private Map methodNameMap = new HashMap (); 77 private Map innerClassNameMap = new HashMap (); 78 private Map packageNameMap = new HashMap (); 79 80 public NameMaker getClassNameMaker(String [] reservedNames, String fqClassName) 81 { 82 NameMaker res = (NameMaker) classNameMap.get(fqClassName); 83 if (res == null){ 84 res = createClassNameMaker(reservedNames, fqClassName); 85 classNameMap.put(fqClassName, res); 86 } 87 return res; 88 } 89 90 protected NameMaker createClassNameMaker(String [] reservedNames, String fqClassName){ 91 return new KeywordNameMaker(reservedNames); 92 } 93 94 public NameMaker getFieldNameMaker(String [] reservedNames, String fqClassName) 95 { 96 NameMaker res = (NameMaker) fieldNameMap.get(fqClassName); 97 if (res == null){ 98 res = createFieldNameMaker(reservedNames, fqClassName); 99 fieldNameMap.put(fqClassName, res); 100 } 101 return res; 102 } 103 104 protected NameMaker createFieldNameMaker(String [] reservedNames, String fqClassName){ 105 return new KeywordNameMaker(reservedNames, false, true); 106 } 107 108 public NameMaker getInnerClassNameMaker(String [] reservedNames, String fqInnerClassName) 109 { 110 NameMaker res = (NameMaker) innerClassNameMap.get(fqInnerClassName); 111 if (res == null){ 112 res = createInnerClassNameMaker(reservedNames, fqInnerClassName); 113 innerClassNameMap.put(fqInnerClassName, res); 114 } 115 return res; 116 } 117 118 protected NameMaker createInnerClassNameMaker(final String [] reservedNames, String fqInnerClassName){ 119 final NameMaker inner = new KeywordNameMaker(null); 120 return new NameMaker(){ 122 public String nextName(String sig){ 123 while(true){ 124 String name = '_' + inner.nextName(sig); 125 if (reservedNames == null || !Tools.isInArray(name, reservedNames)){ 126 return name; 127 } 128 } 129 } 130 }; 131 } 132 133 public NameMaker getMethodNameMaker(String [] reservedNames, String fqClassName) 134 { 135 NameMaker res = (NameMaker) methodNameMap.get(fqClassName); 136 if (res == null){ 137 res = createMethodNameMaker(reservedNames, fqClassName); 138 methodNameMap.put(fqClassName, res); 139 } 140 return res; 141 } 142 143 protected NameMaker createMethodNameMaker(String [] reservedNames, String fqClassName){ 144 return new KeywordNameMaker(reservedNames, false, true); 145 } 146 147 public NameMaker getPackageNameMaker(String [] reservedNames, String packageName) 148 { 149 NameMaker res = (NameMaker) packageNameMap.get(packageName); 150 if (res == null){ 151 res = createPackageNameMaker(reservedNames, packageName); 152 packageNameMap.put(packageName, res); 153 } 154 return res; 155 } 156 157 protected NameMaker createPackageNameMaker(String [] reservedNames, String packageName){ 158 return new KeywordNameMaker(reservedNames); 159 } 160 161 public String toString(){ 162 return "default"; 163 } 164 } 165 } 166 | Popular Tags |