langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java
changeset 1039 ca7b8a8c9268
parent 1038 fbe81cf1123d
child 2979 ea39317acd3d
equal deleted inserted replaced
1038:fbe81cf1123d 1039:ca7b8a8c9268
    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 }