23 * have any questions. |
23 * have any questions. |
24 */ |
24 */ |
25 |
25 |
26 package com.sun.tools.javap; |
26 package com.sun.tools.javap; |
27 |
27 |
|
28 import java.net.URI; |
28 import java.util.Collection; |
29 import java.util.Collection; |
29 import java.util.List; |
30 import java.util.List; |
30 |
31 |
31 import com.sun.tools.classfile.AccessFlags; |
32 import com.sun.tools.classfile.AccessFlags; |
32 import com.sun.tools.classfile.Attribute; |
33 import com.sun.tools.classfile.Attribute; |
44 import com.sun.tools.classfile.Signature; |
45 import com.sun.tools.classfile.Signature; |
45 import com.sun.tools.classfile.Signature_attribute; |
46 import com.sun.tools.classfile.Signature_attribute; |
46 import com.sun.tools.classfile.SourceFile_attribute; |
47 import com.sun.tools.classfile.SourceFile_attribute; |
47 import com.sun.tools.classfile.Type; |
48 import com.sun.tools.classfile.Type; |
48 |
49 |
|
50 import java.text.DateFormat; |
|
51 import java.util.Date; |
49 import static com.sun.tools.classfile.AccessFlags.*; |
52 import static com.sun.tools.classfile.AccessFlags.*; |
50 |
53 |
51 /* |
54 /* |
52 * The main javap class to write the contents of a class file as text. |
55 * The main javap class to write the contents of a class file as text. |
53 * |
56 * |
71 attrWriter = AttributeWriter.instance(context); |
74 attrWriter = AttributeWriter.instance(context); |
72 codeWriter = CodeWriter.instance(context); |
75 codeWriter = CodeWriter.instance(context); |
73 constantWriter = ConstantWriter.instance(context); |
76 constantWriter = ConstantWriter.instance(context); |
74 } |
77 } |
75 |
78 |
|
79 void setDigest(String name, byte[] digest) { |
|
80 this.digestName = name; |
|
81 this.digest = digest; |
|
82 } |
|
83 |
|
84 void setFile(URI uri) { |
|
85 this.uri = uri; |
|
86 } |
|
87 |
|
88 void setFileSize(int size) { |
|
89 this.size = size; |
|
90 } |
|
91 |
|
92 void setLastModified(long lastModified) { |
|
93 this.lastModified = lastModified; |
|
94 } |
|
95 |
76 ClassFile getClassFile() { |
96 ClassFile getClassFile() { |
77 return classFile; |
97 return classFile; |
78 } |
98 } |
79 |
99 |
80 Method getMethod() { |
100 Method getMethod() { |
82 } |
102 } |
83 |
103 |
84 public void write(ClassFile cf) { |
104 public void write(ClassFile cf) { |
85 classFile = cf; |
105 classFile = cf; |
86 constant_pool = classFile.constant_pool; |
106 constant_pool = classFile.constant_pool; |
|
107 |
|
108 if ((options.sysInfo || options.verbose) && !options.compat) { |
|
109 if (uri != null) { |
|
110 if (uri.getScheme().equals("file")) |
|
111 println("Classfile " + uri.getPath()); |
|
112 else |
|
113 println("Classfile " + uri); |
|
114 } |
|
115 if (lastModified != -1) { |
|
116 Date lm = new Date(lastModified); |
|
117 DateFormat df = DateFormat.getDateInstance(); |
|
118 if (size > 0) { |
|
119 println("Last modified " + df.format(lm) + "; size " + size + " bytes"); |
|
120 } else { |
|
121 println("Last modified " + df.format(lm)); |
|
122 } |
|
123 } else if (size > 0) { |
|
124 println("Size " + size + " bytes"); |
|
125 } |
|
126 if (digestName != null && digest != null) { |
|
127 StringBuilder sb = new StringBuilder(); |
|
128 for (byte b: digest) |
|
129 sb.append(String.format("%02x", b)); |
|
130 println(digestName + " checksum " + sb); |
|
131 } |
|
132 } |
87 |
133 |
88 Attribute sfa = cf.getAttribute(Attribute.SourceFile); |
134 Attribute sfa = cf.getAttribute(Attribute.SourceFile); |
89 if (sfa instanceof SourceFile_attribute) { |
135 if (sfa instanceof SourceFile_attribute) { |
90 println("Compiled from \"" + getSourceFile((SourceFile_attribute) sfa) + "\""); |
136 println("Compiled from \"" + getSourceFile((SourceFile_attribute) sfa) + "\""); |
91 } |
137 } |
568 private Options options; |
614 private Options options; |
569 private AttributeWriter attrWriter; |
615 private AttributeWriter attrWriter; |
570 private CodeWriter codeWriter; |
616 private CodeWriter codeWriter; |
571 private ConstantWriter constantWriter; |
617 private ConstantWriter constantWriter; |
572 private ClassFile classFile; |
618 private ClassFile classFile; |
|
619 private URI uri; |
|
620 private long lastModified; |
|
621 private String digestName; |
|
622 private byte[] digest; |
|
623 private int size; |
573 private ConstantPool constant_pool; |
624 private ConstantPool constant_pool; |
574 private Method method; |
625 private Method method; |
575 private static final String NEWLINE = System.getProperty("line.separator", "\n"); |
626 private static final String NEWLINE = System.getProperty("line.separator", "\n"); |
576 } |
627 } |