4884240: additional option required for javap

Reviewed-by: ksrini
This commit is contained in:
Jonathan Gibbons 2008-08-04 17:54:15 -07:00
parent 44444bd9c0
commit b6dbc8cf63
6 changed files with 172 additions and 3 deletions

View file

@ -27,11 +27,15 @@ package com.sun.tools.javap;
import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.FilterInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
@ -199,6 +203,12 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask {
}
},
new Option(false, "-sysinfo") {
void process(JavapTask task, String opt, String arg) {
task.options.sysInfo = true;
}
},
new Option(false, "-Xold") {
void process(JavapTask task, String opt, String arg) throws BadArgs {
// -Xold is only supported as first arg when invoked from
@ -494,8 +504,27 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask {
Attribute.Factory attributeFactory = new Attribute.Factory();
attributeFactory.setCompat(options.compat);
attributeFactory.setJSR277(options.jsr277);
ClassFile cf = ClassFile.read(fo.openInputStream(), attributeFactory);
InputStream in = fo.openInputStream();
SizeInputStream sizeIn = null;
MessageDigest md = null;
if (options.sysInfo || options.verbose) {
md = MessageDigest.getInstance("MD5");
in = new DigestInputStream(in, md);
in = sizeIn = new SizeInputStream(in);
}
ClassFile cf = ClassFile.read(in, attributeFactory);
if (options.sysInfo || options.verbose) {
classWriter.setFile(fo.toUri());
classWriter.setLastModified(fo.getLastModified());
classWriter.setDigest("MD5", md.digest());
classWriter.setFileSize(sizeIn.size());
}
classWriter.write(cf);
} catch (ConstantPoolException e) {
diagnosticListener.report(createDiagnostic("err.bad.constant.pool", className, e.getLocalizedMessage()));
ok = false;
@ -665,4 +694,31 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask {
Map<Locale, ResourceBundle> bundles;
private static final String progname = "javap";
private static class SizeInputStream extends FilterInputStream {
SizeInputStream(InputStream in) {
super(in);
}
int size() {
return size;
}
@Override
public int read(byte[] buf, int offset, int length) throws IOException {
int n = super.read(buf, offset, length);
if (n > 0)
size += n;
return n;
}
@Override
public int read() throws IOException {
int b = super.read();
size += 1;
return b;
}
private int size;
}
}