< prev index next >

test/tools/pack200/pack200-verifier/src/xmlkit/ClassReader.java

Print this page




  24  */
  25 package xmlkit; // -*- mode: java; indent-tabs-mode: nil -*-
  26 
  27 import com.sun.tools.classfile.AccessFlags;
  28 import com.sun.tools.classfile.Annotation;
  29 import com.sun.tools.classfile.Annotation.Annotation_element_value;
  30 import com.sun.tools.classfile.Annotation.Array_element_value;
  31 import com.sun.tools.classfile.Annotation.Class_element_value;
  32 import com.sun.tools.classfile.Annotation.Enum_element_value;
  33 import com.sun.tools.classfile.Annotation.Primitive_element_value;
  34 import com.sun.tools.classfile.AnnotationDefault_attribute;
  35 import com.sun.tools.classfile.Attribute;
  36 import com.sun.tools.classfile.Attributes;
  37 import com.sun.tools.classfile.BootstrapMethods_attribute;
  38 import com.sun.tools.classfile.CharacterRangeTable_attribute;
  39 import com.sun.tools.classfile.ClassFile;
  40 import com.sun.tools.classfile.Code_attribute;
  41 import com.sun.tools.classfile.CompilationID_attribute;
  42 import com.sun.tools.classfile.ConstantPool;
  43 import com.sun.tools.classfile.ConstantPool.CONSTANT_Class_info;


  44 import com.sun.tools.classfile.ConstantPool.CONSTANT_Double_info;
  45 import com.sun.tools.classfile.ConstantPool.CONSTANT_Fieldref_info;
  46 import com.sun.tools.classfile.ConstantPool.CONSTANT_Float_info;
  47 import com.sun.tools.classfile.ConstantPool.CONSTANT_Integer_info;
  48 import com.sun.tools.classfile.ConstantPool.CONSTANT_InterfaceMethodref_info;
  49 import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info;
  50 import com.sun.tools.classfile.ConstantPool.CONSTANT_Long_info;
  51 import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info;
  52 import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodType_info;
  53 import com.sun.tools.classfile.ConstantPool.CONSTANT_Methodref_info;
  54 import com.sun.tools.classfile.ConstantPool.CONSTANT_NameAndType_info;
  55 import com.sun.tools.classfile.ConstantPool.CONSTANT_String_info;
  56 import com.sun.tools.classfile.ConstantPool.CONSTANT_Utf8_info;
  57 import com.sun.tools.classfile.ConstantPool.CPInfo;
  58 import com.sun.tools.classfile.ConstantPool.InvalidIndex;
  59 import com.sun.tools.classfile.ConstantPoolException;
  60 import com.sun.tools.classfile.ConstantValue_attribute;
  61 import com.sun.tools.classfile.DefaultAttribute;
  62 import com.sun.tools.classfile.Deprecated_attribute;
  63 import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
  64 import com.sun.tools.classfile.EnclosingMethod_attribute;
  65 import com.sun.tools.classfile.Exceptions_attribute;
  66 import com.sun.tools.classfile.Field;
  67 import com.sun.tools.classfile.InnerClasses_attribute;
  68 import com.sun.tools.classfile.InnerClasses_attribute.Info;
  69 import com.sun.tools.classfile.Instruction;
  70 import com.sun.tools.classfile.Instruction.TypeKind;
  71 import com.sun.tools.classfile.LineNumberTable_attribute;
  72 import com.sun.tools.classfile.LocalVariableTable_attribute;
  73 import com.sun.tools.classfile.LocalVariableTypeTable_attribute;
  74 import com.sun.tools.classfile.Method;
  75 import com.sun.tools.classfile.MethodParameters_attribute;
  76 import com.sun.tools.classfile.Module_attribute;
  77 import com.sun.tools.classfile.Module_attribute.ExportsEntry;
  78 import com.sun.tools.classfile.Module_attribute.ProvidesEntry;
  79 import com.sun.tools.classfile.Module_attribute.RequiresEntry;
  80 import com.sun.tools.classfile.ModuleHashes_attribute;
  81 import com.sun.tools.classfile.ModuleHashes_attribute.Entry;
  82 import com.sun.tools.classfile.ModuleMainClass_attribute;

  83 import com.sun.tools.classfile.ModuleTarget_attribute;
  84 import com.sun.tools.classfile.ModulePackages_attribute;
  85 import com.sun.tools.classfile.ModuleVersion_attribute;
  86 import com.sun.tools.classfile.Opcode;
  87 import com.sun.tools.classfile.RuntimeInvisibleAnnotations_attribute;
  88 import com.sun.tools.classfile.RuntimeInvisibleParameterAnnotations_attribute;
  89 import com.sun.tools.classfile.RuntimeInvisibleTypeAnnotations_attribute;
  90 import com.sun.tools.classfile.RuntimeVisibleAnnotations_attribute;
  91 import com.sun.tools.classfile.RuntimeVisibleParameterAnnotations_attribute;
  92 import com.sun.tools.classfile.RuntimeVisibleTypeAnnotations_attribute;
  93 import com.sun.tools.classfile.Signature_attribute;
  94 import com.sun.tools.classfile.SourceDebugExtension_attribute;
  95 import com.sun.tools.classfile.SourceFile_attribute;
  96 import com.sun.tools.classfile.SourceID_attribute;
  97 import com.sun.tools.classfile.StackMapTable_attribute;
  98 import com.sun.tools.classfile.StackMapTable_attribute.append_frame;
  99 import com.sun.tools.classfile.StackMapTable_attribute.chop_frame;
 100 import com.sun.tools.classfile.StackMapTable_attribute.full_frame;
 101 import com.sun.tools.classfile.StackMapTable_attribute.same_frame;
 102 import com.sun.tools.classfile.StackMapTable_attribute.same_frame_extended;
 103 import com.sun.tools.classfile.StackMapTable_attribute.same_locals_1_stack_item_frame;
 104 import com.sun.tools.classfile.StackMapTable_attribute.same_locals_1_stack_item_frame_extended;
 105 import com.sun.tools.classfile.StackMap_attribute;


 653     }
 654 
 655     @Override
 656     public String visitClass(CONSTANT_Class_info c, Integer p) {
 657         String value = slist.get(p);
 658         if (value == null) {
 659             try {
 660                 value = visit(cfpool.get(c.name_index), c.name_index);
 661                 slist.set(p, value);
 662                 xpool.add(new Element("CONSTANT_Class",
 663                         new String[]{"id", p.toString()},
 664                         value));
 665             } catch (ConstantPoolException ex) {
 666                 ex.printStackTrace();
 667             }
 668         }
 669         return value;
 670     }
 671 
 672     @Override


































 673     public String visitDouble(CONSTANT_Double_info c, Integer p) {
 674         String value = slist.get(p);
 675         if (value == null) {
 676             value = Double.toString(c.value);
 677             slist.set(p, value);
 678             xpool.add(new Element("CONSTANT_Double",
 679                       new String[]{"id", p.toString()},
 680                       value));
 681         }
 682         return value;
 683     }
 684 
 685     @Override
 686     public String visitFieldref(CONSTANT_Fieldref_info c, Integer p) {
 687     String value = slist.get(p);
 688         if (value == null) {
 689             try {
 690                 value = visit(cfpool.get(c.class_index), c.class_index);
 691                 value = value.concat(" " + visit(cfpool.get(c.name_and_type_index),
 692                                      c.name_and_type_index));


1478             ee.setAttr("hash", sb.toString());
1479             ee.trimToSize();
1480             e.add(ee);
1481         }
1482         e.trimToSize();
1483         e.sort();
1484         p.add(e);
1485         return null;
1486     }
1487 
1488     @Override
1489     public Element visitModuleMainClass(ModuleMainClass_attribute attr, Element p) {
1490         Element e = new Element(x.getCpString(attr.attribute_name_index));
1491         e.add(x.getCpString(attr.main_class_index));
1492         e.trimToSize();
1493         p.add(e);
1494         return null;
1495     }
1496 
1497     @Override
1498     public Element visitModuleTarget(ModuleTarget_attribute attr, Element p) {
1499         Element e = new Element(x.getCpString(attr.attribute_name_index));
1500         e.add(x.getCpString(attr.os_name_index));
1501         e.add(x.getCpString(attr.os_arch_index));
1502         e.add(x.getCpString(attr.os_version_index));
1503         e.trimToSize();
1504         p.add(e);
1505         return null;
1506     }
1507 
1508     @Override
1509     public Element visitModuleVersion(ModuleVersion_attribute attr, Element p) {
1510         Element e = new Element(x.getCpString(attr.attribute_name_index));
1511         e.add(x.getCpString(attr.version_index));


1512         e.trimToSize();
1513         p.add(e);
1514         return null;
1515     }
1516 }
1517 
1518 class StackMapVisitor implements StackMapTable_attribute.stack_map_frame.Visitor<Element, Void> {
1519 
1520     final ClassFile cf;
1521     final ClassReader x;
1522     final Element parent;
1523 
1524     public StackMapVisitor(ClassReader x, ClassFile cf, Element parent) {
1525         this.x = x;
1526         this.cf = cf;
1527         this.parent = parent;
1528     }
1529 
1530     public Element visit(StackMapTable_attribute.stack_map_frame frame) {
1531         return frame.accept(this, null);




  24  */
  25 package xmlkit; // -*- mode: java; indent-tabs-mode: nil -*-
  26 
  27 import com.sun.tools.classfile.AccessFlags;
  28 import com.sun.tools.classfile.Annotation;
  29 import com.sun.tools.classfile.Annotation.Annotation_element_value;
  30 import com.sun.tools.classfile.Annotation.Array_element_value;
  31 import com.sun.tools.classfile.Annotation.Class_element_value;
  32 import com.sun.tools.classfile.Annotation.Enum_element_value;
  33 import com.sun.tools.classfile.Annotation.Primitive_element_value;
  34 import com.sun.tools.classfile.AnnotationDefault_attribute;
  35 import com.sun.tools.classfile.Attribute;
  36 import com.sun.tools.classfile.Attributes;
  37 import com.sun.tools.classfile.BootstrapMethods_attribute;
  38 import com.sun.tools.classfile.CharacterRangeTable_attribute;
  39 import com.sun.tools.classfile.ClassFile;
  40 import com.sun.tools.classfile.Code_attribute;
  41 import com.sun.tools.classfile.CompilationID_attribute;
  42 import com.sun.tools.classfile.ConstantPool;
  43 import com.sun.tools.classfile.ConstantPool.CONSTANT_Class_info;
  44 import com.sun.tools.classfile.ConstantPool.CONSTANT_Module_info;
  45 import com.sun.tools.classfile.ConstantPool.CONSTANT_Package_info;
  46 import com.sun.tools.classfile.ConstantPool.CONSTANT_Double_info;
  47 import com.sun.tools.classfile.ConstantPool.CONSTANT_Fieldref_info;
  48 import com.sun.tools.classfile.ConstantPool.CONSTANT_Float_info;
  49 import com.sun.tools.classfile.ConstantPool.CONSTANT_Integer_info;
  50 import com.sun.tools.classfile.ConstantPool.CONSTANT_InterfaceMethodref_info;
  51 import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info;
  52 import com.sun.tools.classfile.ConstantPool.CONSTANT_Long_info;
  53 import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info;
  54 import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodType_info;
  55 import com.sun.tools.classfile.ConstantPool.CONSTANT_Methodref_info;
  56 import com.sun.tools.classfile.ConstantPool.CONSTANT_NameAndType_info;
  57 import com.sun.tools.classfile.ConstantPool.CONSTANT_String_info;
  58 import com.sun.tools.classfile.ConstantPool.CONSTANT_Utf8_info;
  59 import com.sun.tools.classfile.ConstantPool.CPInfo;
  60 import com.sun.tools.classfile.ConstantPool.InvalidIndex;
  61 import com.sun.tools.classfile.ConstantPoolException;
  62 import com.sun.tools.classfile.ConstantValue_attribute;
  63 import com.sun.tools.classfile.DefaultAttribute;
  64 import com.sun.tools.classfile.Deprecated_attribute;
  65 import com.sun.tools.classfile.Descriptor.InvalidDescriptor;
  66 import com.sun.tools.classfile.EnclosingMethod_attribute;
  67 import com.sun.tools.classfile.Exceptions_attribute;
  68 import com.sun.tools.classfile.Field;
  69 import com.sun.tools.classfile.InnerClasses_attribute;
  70 import com.sun.tools.classfile.InnerClasses_attribute.Info;
  71 import com.sun.tools.classfile.Instruction;
  72 import com.sun.tools.classfile.Instruction.TypeKind;
  73 import com.sun.tools.classfile.LineNumberTable_attribute;
  74 import com.sun.tools.classfile.LocalVariableTable_attribute;
  75 import com.sun.tools.classfile.LocalVariableTypeTable_attribute;
  76 import com.sun.tools.classfile.Method;
  77 import com.sun.tools.classfile.MethodParameters_attribute;
  78 import com.sun.tools.classfile.Module_attribute;
  79 import com.sun.tools.classfile.Module_attribute.ExportsEntry;
  80 import com.sun.tools.classfile.Module_attribute.ProvidesEntry;
  81 import com.sun.tools.classfile.Module_attribute.RequiresEntry;
  82 import com.sun.tools.classfile.ModuleHashes_attribute;
  83 import com.sun.tools.classfile.ModuleHashes_attribute.Entry;
  84 import com.sun.tools.classfile.ModuleMainClass_attribute;
  85 import com.sun.tools.classfile.ModuleResolution_attribute;
  86 import com.sun.tools.classfile.ModuleTarget_attribute;
  87 import com.sun.tools.classfile.ModulePackages_attribute;

  88 import com.sun.tools.classfile.Opcode;
  89 import com.sun.tools.classfile.RuntimeInvisibleAnnotations_attribute;
  90 import com.sun.tools.classfile.RuntimeInvisibleParameterAnnotations_attribute;
  91 import com.sun.tools.classfile.RuntimeInvisibleTypeAnnotations_attribute;
  92 import com.sun.tools.classfile.RuntimeVisibleAnnotations_attribute;
  93 import com.sun.tools.classfile.RuntimeVisibleParameterAnnotations_attribute;
  94 import com.sun.tools.classfile.RuntimeVisibleTypeAnnotations_attribute;
  95 import com.sun.tools.classfile.Signature_attribute;
  96 import com.sun.tools.classfile.SourceDebugExtension_attribute;
  97 import com.sun.tools.classfile.SourceFile_attribute;
  98 import com.sun.tools.classfile.SourceID_attribute;
  99 import com.sun.tools.classfile.StackMapTable_attribute;
 100 import com.sun.tools.classfile.StackMapTable_attribute.append_frame;
 101 import com.sun.tools.classfile.StackMapTable_attribute.chop_frame;
 102 import com.sun.tools.classfile.StackMapTable_attribute.full_frame;
 103 import com.sun.tools.classfile.StackMapTable_attribute.same_frame;
 104 import com.sun.tools.classfile.StackMapTable_attribute.same_frame_extended;
 105 import com.sun.tools.classfile.StackMapTable_attribute.same_locals_1_stack_item_frame;
 106 import com.sun.tools.classfile.StackMapTable_attribute.same_locals_1_stack_item_frame_extended;
 107 import com.sun.tools.classfile.StackMap_attribute;


 655     }
 656 
 657     @Override
 658     public String visitClass(CONSTANT_Class_info c, Integer p) {
 659         String value = slist.get(p);
 660         if (value == null) {
 661             try {
 662                 value = visit(cfpool.get(c.name_index), c.name_index);
 663                 slist.set(p, value);
 664                 xpool.add(new Element("CONSTANT_Class",
 665                         new String[]{"id", p.toString()},
 666                         value));
 667             } catch (ConstantPoolException ex) {
 668                 ex.printStackTrace();
 669             }
 670         }
 671         return value;
 672     }
 673 
 674     @Override
 675     public String visitModule(CONSTANT_Module_info info, Integer p) {
 676         String value = slist.get(p);
 677         if (value == null) {
 678             try {
 679                 value = visit(cfpool.get(info.name_index), info.name_index);
 680                 slist.set(p, value);
 681                 xpool.add(new Element("CONSTANT_Module",
 682                         new String[]{"id", p.toString()},
 683                         value));
 684             } catch (ConstantPoolException ex) {
 685                 ex.printStackTrace();
 686             }
 687         }
 688         return value;
 689     }
 690 
 691     @Override
 692     public String visitPackage(CONSTANT_Package_info info, Integer p) {
 693         String value = slist.get(p);
 694         if (value == null) {
 695             try {
 696                 value = visit(cfpool.get(info.name_index), info.name_index);
 697                 slist.set(p, value);
 698                 xpool.add(new Element("CONSTANT_Package",
 699                         new String[]{"id", p.toString()},
 700                         value));
 701             } catch (ConstantPoolException ex) {
 702                 ex.printStackTrace();
 703             }
 704         }
 705         return value;
 706     }
 707 
 708     @Override
 709     public String visitDouble(CONSTANT_Double_info c, Integer p) {
 710         String value = slist.get(p);
 711         if (value == null) {
 712             value = Double.toString(c.value);
 713             slist.set(p, value);
 714             xpool.add(new Element("CONSTANT_Double",
 715                       new String[]{"id", p.toString()},
 716                       value));
 717         }
 718         return value;
 719     }
 720 
 721     @Override
 722     public String visitFieldref(CONSTANT_Fieldref_info c, Integer p) {
 723     String value = slist.get(p);
 724         if (value == null) {
 725             try {
 726                 value = visit(cfpool.get(c.class_index), c.class_index);
 727                 value = value.concat(" " + visit(cfpool.get(c.name_and_type_index),
 728                                      c.name_and_type_index));


1514             ee.setAttr("hash", sb.toString());
1515             ee.trimToSize();
1516             e.add(ee);
1517         }
1518         e.trimToSize();
1519         e.sort();
1520         p.add(e);
1521         return null;
1522     }
1523 
1524     @Override
1525     public Element visitModuleMainClass(ModuleMainClass_attribute attr, Element p) {
1526         Element e = new Element(x.getCpString(attr.attribute_name_index));
1527         e.add(x.getCpString(attr.main_class_index));
1528         e.trimToSize();
1529         p.add(e);
1530         return null;
1531     }
1532 
1533     @Override
1534     public Element visitModuleResolution(ModuleResolution_attribute attr, Element p) {
1535         Element e = new Element("ModuleResolution");
1536         e.setAttr("flags", Integer.toString(attr.resolution_flags));


1537         e.trimToSize();
1538         p.add(e);
1539         return null;
1540     }
1541 
1542     @Override
1543     public Element visitModuleTarget(ModuleTarget_attribute attr, Element p) {
1544         Element e = new Element(x.getCpString(attr.attribute_name_index));
1545         e.add(x.getCpString(attr.os_name_index));
1546         e.add(x.getCpString(attr.os_arch_index));
1547         e.add(x.getCpString(attr.os_version_index));
1548         e.trimToSize();
1549         p.add(e);
1550         return null;
1551     }
1552 }
1553 
1554 class StackMapVisitor implements StackMapTable_attribute.stack_map_frame.Visitor<Element, Void> {
1555 
1556     final ClassFile cf;
1557     final ClassReader x;
1558     final Element parent;
1559 
1560     public StackMapVisitor(ClassReader x, ClassFile cf, Element parent) {
1561         this.x = x;
1562         this.cf = cf;
1563         this.parent = parent;
1564     }
1565 
1566     public Element visit(StackMapTable_attribute.stack_map_frame frame) {
1567         return frame.accept(this, null);


< prev index next >