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);
|