PageRenderTime 26ms CodeModel.GetById 4ms RepoModel.GetById 0ms app.codeStats 0ms

/QingTingFanBianYi/src/com/alibaba/fastjson/asm/ClassWriter.java

https://gitlab.com/qt-prometheus/qt-prometheus
Java | 339 lines | 313 code | 22 blank | 4 comment | 48 complexity | 559bef8da0c9334357d3c01d7afc751a MD5 | raw file
  1. package com.alibaba.fastjson.asm;
  2. public class ClassWriter
  3. {
  4. static final int ACC_SYNTHETIC_ATTRIBUTE = 262144;
  5. static final int CLASS = 7;
  6. public static final int COMPUTE_FRAMES = 2;
  7. public static final int COMPUTE_MAXS = 1;
  8. static final int DOUBLE = 6;
  9. static final int FIELD = 9;
  10. static final int FIELDORMETH_INSN = 6;
  11. static final int FLOAT = 4;
  12. static final int IINC_INSN = 12;
  13. static final int IMETH = 11;
  14. static final int IMPLVAR_INSN = 4;
  15. static final int INT = 3;
  16. static final int ITFDYNMETH_INSN = 7;
  17. static final int LABELW_INSN = 9;
  18. static final int LABEL_INSN = 8;
  19. static final int LDCW_INSN = 11;
  20. static final int LDC_INSN = 10;
  21. static final int LONG = 5;
  22. static final int LOOK_INSN = 14;
  23. static final int MANA_INSN = 15;
  24. static final int METH = 10;
  25. static final int NAME_TYPE = 12;
  26. static final int NOARG_INSN = 0;
  27. static final int SBYTE_INSN = 1;
  28. static final int SHORT_INSN = 2;
  29. static final int STR = 8;
  30. static final int TABL_INSN = 13;
  31. static final byte[] TYPE = arrayOfByte;
  32. static final int TYPE_INSN = 5;
  33. static final int TYPE_MERGED = 15;
  34. static final int TYPE_NORMAL = 13;
  35. static final int TYPE_UNINIT = 14;
  36. static final int UTF8 = 1;
  37. static final int VAR_INSN = 3;
  38. static final int WIDE_INSN = 16;
  39. private int access;
  40. FieldWriter firstField;
  41. MethodWriter firstMethod;
  42. int index = 1;
  43. private int interfaceCount;
  44. private int[] interfaces;
  45. Item[] items = new Item[256];
  46. final Item key = new Item();
  47. final Item key2 = new Item();
  48. final Item key3 = new Item();
  49. FieldWriter lastField;
  50. MethodWriter lastMethod;
  51. private int name;
  52. final ByteVector pool = new ByteVector();
  53. private int superName;
  54. String thisName;
  55. int threshold = (int)(0.75D * this.items.length);
  56. Item[] typeTable;
  57. int version;
  58. static
  59. {
  60. byte[] arrayOfByte = new byte['Ü'];
  61. int i = 0;
  62. while (i < arrayOfByte.length)
  63. {
  64. arrayOfByte[i] = ((byte)("AAAAAAAAAAAAAAAABCKLLDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAIIIIIIIIIIIIIIIIDNOAAAAAAGGGGGGGHHFBFAAFFAAQPIIJJIIIIIIIIIIIIIIIIII".charAt(i) - 'A'));
  65. i += 1;
  66. }
  67. }
  68. public ClassWriter()
  69. {
  70. this(0);
  71. }
  72. private ClassWriter(int paramInt)
  73. {
  74. }
  75. private Item get(Item paramItem)
  76. {
  77. for (Item localItem = this.items[(paramItem.hashCode % this.items.length)]; (localItem != null) && ((localItem.type != paramItem.type) || (!paramItem.isEqualTo(localItem))); localItem = localItem.next);
  78. return localItem;
  79. }
  80. private Item newString(String paramString)
  81. {
  82. this.key2.set(8, paramString, null, null);
  83. Item localItem2 = get(this.key2);
  84. Item localItem1 = localItem2;
  85. if (localItem2 == null)
  86. {
  87. this.pool.put12(8, newUTF8(paramString));
  88. int i = this.index;
  89. this.index = (i + 1);
  90. localItem1 = new Item(i, this.key2);
  91. put(localItem1);
  92. }
  93. return localItem1;
  94. }
  95. private void put(Item paramItem)
  96. {
  97. if (this.index > this.threshold)
  98. {
  99. i = this.items.length;
  100. int j = i * 2 + 1;
  101. Item[] arrayOfItem = new Item[j];
  102. i -= 1;
  103. while (i >= 0)
  104. {
  105. Item localItem;
  106. for (Object localObject = this.items[i]; localObject != null; localObject = localItem)
  107. {
  108. int k = ((Item)localObject).hashCode % arrayOfItem.length;
  109. localItem = ((Item)localObject).next;
  110. ((Item)localObject).next = arrayOfItem[k];
  111. arrayOfItem[k] = localObject;
  112. }
  113. i -= 1;
  114. }
  115. this.items = arrayOfItem;
  116. this.threshold = ((int)(j * 0.75D));
  117. }
  118. int i = paramItem.hashCode % this.items.length;
  119. paramItem.next = this.items[i];
  120. this.items[i] = paramItem;
  121. }
  122. private void put122(int paramInt1, int paramInt2, int paramInt3)
  123. {
  124. this.pool.put12(paramInt1, paramInt2).putShort(paramInt3);
  125. }
  126. public int newClass(String paramString)
  127. {
  128. return newClassItem(paramString).index;
  129. }
  130. Item newClassItem(String paramString)
  131. {
  132. this.key2.set(7, paramString, null, null);
  133. Item localItem2 = get(this.key2);
  134. Item localItem1 = localItem2;
  135. if (localItem2 == null)
  136. {
  137. this.pool.put12(7, newUTF8(paramString));
  138. int i = this.index;
  139. this.index = (i + 1);
  140. localItem1 = new Item(i, this.key2);
  141. put(localItem1);
  142. }
  143. return localItem1;
  144. }
  145. Item newConstItem(Object paramObject)
  146. {
  147. if ((paramObject instanceof Integer))
  148. return newInteger(((Integer)paramObject).intValue());
  149. if ((paramObject instanceof String))
  150. return newString((String)paramObject);
  151. if ((paramObject instanceof Type))
  152. {
  153. paramObject = (Type)paramObject;
  154. if (paramObject.getSort() == 10);
  155. for (paramObject = paramObject.getInternalName(); ; paramObject = paramObject.getDescriptor())
  156. return newClassItem(paramObject);
  157. }
  158. throw new IllegalArgumentException("value " + paramObject);
  159. }
  160. Item newFieldItem(String paramString1, String paramString2, String paramString3)
  161. {
  162. this.key3.set(9, paramString1, paramString2, paramString3);
  163. Item localItem2 = get(this.key3);
  164. Item localItem1 = localItem2;
  165. if (localItem2 == null)
  166. {
  167. put122(9, newClass(paramString1), newNameType(paramString2, paramString3));
  168. int i = this.index;
  169. this.index = (i + 1);
  170. localItem1 = new Item(i, this.key3);
  171. put(localItem1);
  172. }
  173. return localItem1;
  174. }
  175. Item newInteger(int paramInt)
  176. {
  177. this.key.set(paramInt);
  178. Item localItem2 = get(this.key);
  179. Item localItem1 = localItem2;
  180. if (localItem2 == null)
  181. {
  182. this.pool.putByte(3).putInt(paramInt);
  183. paramInt = this.index;
  184. this.index = (paramInt + 1);
  185. localItem1 = new Item(paramInt, this.key);
  186. put(localItem1);
  187. }
  188. return localItem1;
  189. }
  190. Item newMethodItem(String paramString1, String paramString2, String paramString3, boolean paramBoolean)
  191. {
  192. if (paramBoolean);
  193. for (int i = 11; ; i = 10)
  194. {
  195. this.key3.set(i, paramString1, paramString2, paramString3);
  196. Item localItem2 = get(this.key3);
  197. Item localItem1 = localItem2;
  198. if (localItem2 == null)
  199. {
  200. put122(i, newClass(paramString1), newNameType(paramString2, paramString3));
  201. i = this.index;
  202. this.index = (i + 1);
  203. localItem1 = new Item(i, this.key3);
  204. put(localItem1);
  205. }
  206. return localItem1;
  207. }
  208. }
  209. public int newNameType(String paramString1, String paramString2)
  210. {
  211. return newNameTypeItem(paramString1, paramString2).index;
  212. }
  213. Item newNameTypeItem(String paramString1, String paramString2)
  214. {
  215. this.key2.set(12, paramString1, paramString2, null);
  216. Item localItem2 = get(this.key2);
  217. Item localItem1 = localItem2;
  218. if (localItem2 == null)
  219. {
  220. put122(12, newUTF8(paramString1), newUTF8(paramString2));
  221. int i = this.index;
  222. this.index = (i + 1);
  223. localItem1 = new Item(i, this.key2);
  224. put(localItem1);
  225. }
  226. return localItem1;
  227. }
  228. public int newUTF8(String paramString)
  229. {
  230. this.key.set(1, paramString, null, null);
  231. Item localItem2 = get(this.key);
  232. Item localItem1 = localItem2;
  233. if (localItem2 == null)
  234. {
  235. this.pool.putByte(1).putUTF8(paramString);
  236. int i = this.index;
  237. this.index = (i + 1);
  238. localItem1 = new Item(i, this.key);
  239. put(localItem1);
  240. }
  241. return localItem1.index;
  242. }
  243. public byte[] toByteArray()
  244. {
  245. int i = this.interfaceCount * 2 + 24;
  246. int j = 0;
  247. for (Object localObject = this.firstField; localObject != null; localObject = ((FieldWriter)localObject).next)
  248. {
  249. j += 1;
  250. i += ((FieldWriter)localObject).getSize();
  251. }
  252. int m = 0;
  253. localObject = this.firstMethod;
  254. int k = i;
  255. i = m;
  256. while (localObject != null)
  257. {
  258. i += 1;
  259. k += ((MethodWriter)localObject).getSize();
  260. localObject = ((MethodWriter)localObject).next;
  261. }
  262. ByteVector localByteVector = new ByteVector(k + this.pool.length);
  263. localByteVector.putInt(-889275714).putInt(this.version);
  264. localByteVector.putShort(this.index).putByteArray(this.pool.data, 0, this.pool.length);
  265. k = (this.access & 0x40000) / 64;
  266. localByteVector.putShort(this.access & ((0x60000 | k) ^ 0xFFFFFFFF)).putShort(this.name).putShort(this.superName);
  267. localByteVector.putShort(this.interfaceCount);
  268. k = 0;
  269. while (k < this.interfaceCount)
  270. {
  271. localByteVector.putShort(this.interfaces[k]);
  272. k += 1;
  273. }
  274. localByteVector.putShort(j);
  275. for (localObject = this.firstField; localObject != null; localObject = ((FieldWriter)localObject).next)
  276. ((FieldWriter)localObject).put(localByteVector);
  277. localByteVector.putShort(i);
  278. for (localObject = this.firstMethod; localObject != null; localObject = ((MethodWriter)localObject).next)
  279. ((MethodWriter)localObject).put(localByteVector);
  280. localByteVector.putShort(0);
  281. return localByteVector.data;
  282. }
  283. public void visit(int paramInt1, int paramInt2, String paramString1, String paramString2, String[] paramArrayOfString)
  284. {
  285. this.version = paramInt1;
  286. this.access = paramInt2;
  287. this.name = newClass(paramString1);
  288. this.thisName = paramString1;
  289. if (paramString2 == null);
  290. for (paramInt1 = 0; ; paramInt1 = newClass(paramString2))
  291. {
  292. this.superName = paramInt1;
  293. if ((paramArrayOfString == null) || (paramArrayOfString.length <= 0))
  294. break;
  295. this.interfaceCount = paramArrayOfString.length;
  296. this.interfaces = new int[this.interfaceCount];
  297. paramInt1 = 0;
  298. while (paramInt1 < this.interfaceCount)
  299. {
  300. this.interfaces[paramInt1] = newClass(paramArrayOfString[paramInt1]);
  301. paramInt1 += 1;
  302. }
  303. }
  304. }
  305. public FieldVisitor visitField(int paramInt, String paramString1, String paramString2)
  306. {
  307. return new FieldWriter(this, paramInt, paramString1, paramString2);
  308. }
  309. public MethodVisitor visitMethod(int paramInt, String paramString1, String paramString2, String paramString3, String[] paramArrayOfString)
  310. {
  311. return new MethodWriter(this, paramInt, paramString1, paramString2, paramString3, paramArrayOfString);
  312. }
  313. }
  314. /* Location: C:\Users\User\dex2jar-2.0\dex\qting\classes-dex2jar.jar
  315. * Qualified Name: com.alibaba.fastjson.asm.ClassWriter
  316. * JD-Core Version: 0.6.2
  317. */