You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LocalVariableTypeTable.java 4.2KB

hace 19 años
hace 19 años
hace 14 años
hace 19 años
hace 14 años
hace 19 años
hace 19 años
hace 14 años
hace 14 años
hace 19 años
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /* *******************************************************************
  2. * Copyright (c) 2004 IBM Corporation
  3. *
  4. * All rights reserved.
  5. * This program and the accompanying materials are made available
  6. * under the terms of the Eclipse Public License v 2.0
  7. * which accompanies this distribution and is available at
  8. * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
  9. *
  10. * Contributors:
  11. * Andy Clement initial implementation
  12. * Heavily based on LocalVariableTable
  13. * ******************************************************************/
  14. package org.aspectj.apache.bcel.classfile;
  15. import java.io.DataInputStream;
  16. import java.io.DataOutputStream;
  17. import java.io.IOException;
  18. import org.aspectj.apache.bcel.Constants;
  19. // The new table is used when generic types are about...
  20. //LocalVariableTable_attribute {
  21. // u2 attribute_name_index;
  22. // u4 attribute_length;
  23. // u2 local_variable_table_length;
  24. // { u2 start_pc;
  25. // u2 length;
  26. // u2 name_index;
  27. // u2 descriptor_index;
  28. // u2 index;
  29. // } local_variable_table[local_variable_table_length];
  30. // }
  31. //LocalVariableTypeTable_attribute {
  32. // u2 attribute_name_index;
  33. // u4 attribute_length;
  34. // u2 local_variable_type_table_length;
  35. // {
  36. // u2 start_pc;
  37. // u2 length;
  38. // u2 name_index;
  39. // u2 signature_index;
  40. // u2 index;
  41. // } local_variable_type_table[local_variable_type_table_length];
  42. // }
  43. // J5TODO: Needs some testing !
  44. public class LocalVariableTypeTable extends Attribute {
  45. private int local_variable_type_table_length; // Table of local
  46. private LocalVariable[] local_variable_type_table; // variables
  47. public LocalVariableTypeTable(LocalVariableTypeTable c) {
  48. this(c.getNameIndex(), c.getLength(), c.getLocalVariableTypeTable(), c.getConstantPool());
  49. }
  50. public LocalVariableTypeTable(int name_index, int length, LocalVariable[] local_variable_table, ConstantPool constant_pool) {
  51. super(Constants.ATTR_LOCAL_VARIABLE_TYPE_TABLE, name_index, length, constant_pool);
  52. setLocalVariableTable(local_variable_table);
  53. }
  54. LocalVariableTypeTable(int nameIdx, int len, DataInputStream dis, ConstantPool cpool) throws IOException {
  55. this(nameIdx, len, (LocalVariable[]) null, cpool);
  56. local_variable_type_table_length = (dis.readUnsignedShort());
  57. local_variable_type_table = new LocalVariable[local_variable_type_table_length];
  58. for (int i = 0; i < local_variable_type_table_length; i++)
  59. local_variable_type_table[i] = new LocalVariable(dis, cpool);
  60. }
  61. @Override
  62. public void accept(ClassVisitor v) {
  63. v.visitLocalVariableTypeTable(this);
  64. }
  65. @Override
  66. public final void dump(DataOutputStream file) throws IOException {
  67. super.dump(file);
  68. file.writeShort(local_variable_type_table_length);
  69. for (int i = 0; i < local_variable_type_table_length; i++)
  70. local_variable_type_table[i].dump(file);
  71. }
  72. public final LocalVariable[] getLocalVariableTypeTable() {
  73. return local_variable_type_table;
  74. }
  75. public final LocalVariable getLocalVariable(int index) {
  76. for (int i = 0; i < local_variable_type_table_length; i++)
  77. if (local_variable_type_table[i].getIndex() == index)
  78. return local_variable_type_table[i];
  79. return null;
  80. }
  81. public final void setLocalVariableTable(LocalVariable[] local_variable_table) {
  82. this.local_variable_type_table = local_variable_table;
  83. local_variable_type_table_length = (local_variable_table == null) ? 0 : local_variable_table.length;
  84. }
  85. /**
  86. * @return String representation.
  87. */
  88. @Override
  89. public final String toString() {
  90. StringBuilder buf = new StringBuilder("");
  91. for (int i = 0; i < local_variable_type_table_length; i++) {
  92. buf.append(local_variable_type_table[i].toString());
  93. if (i < local_variable_type_table_length - 1)
  94. buf.append('\n');
  95. }
  96. return buf.toString();
  97. }
  98. // /**
  99. // * @return deep copy of this attribute
  100. // */
  101. // public Attribute copy(ConstantPool constant_pool) {
  102. // LocalVariableTypeTable c = (LocalVariableTypeTable)clone();
  103. //
  104. // c.local_variable_type_table = new LocalVariable[local_variable_type_table_length];
  105. // for(int i=0; i < local_variable_type_table_length; i++)
  106. // c.local_variable_type_table[i] = local_variable_type_table[i].copy();
  107. //
  108. // c.cpool = constant_pool;
  109. // return c;
  110. // }
  111. public final int getTableLength() {
  112. return local_variable_type_table_length;
  113. }
  114. }