patch: javap does not show SourceDebugExtension properly
Jonathan Gibbons
jonathan.gibbons at oracle.com
Tue Jun 25 12:01:32 PDT 2013
Dmytro,
Thank you for your suggestion. Can you provide more details on why the
existing code does not work. Presumably you get an exception -- what is
it? Alternative, can you provide a sample class file for which the
existing code does not work, together with info on which version of
which compiler generated the class file?
I agree that the change to visitSourceDebugExtension is probably desirable.
-- Jon
On 06/25/2013 11:32 AM, Dmytro Sheyko wrote:
> Hello,
>
> I was trying to get SourceDebugExtension for compiled jsp class using javap (1.7.0_25, 1.8.0-ea-b91) and it printed something like:
>
> SourceFile: "x_jsp.java"
> SourceDebugExtension: null
> minor version: 0
> major version: 50
>
> where expected output is following:
>
> SourceFile: "x_jsp.java"
> SourceDebugExtension:
> SMAP
> x_jsp.java
> JSP
> *S JSP
> *F
> + 0 x.jsp
> x.jsp
> *L
> 1,3:62
> 4:65,4
> 6,4:70
> 9,4:74
> *E
> minor version: 0
> major version: 50
>
> Getting SourceDebugExtension using JDI works well (i.e. class file is correct).
>
> And I would like to propose a patch to fix this issue. Please review.
>
> diff -r b3458329d060 src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java
> --- a/src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java Mon Jun 24 14:27:32 2013 -0700
> +++ b/src/share/classes/com/sun/tools/classfile/SourceDebugExtension_attribute.java Tue Jun 25 20:22:06 2013 +0300
> @@ -25,9 +25,8 @@
>
> package com.sun.tools.classfile;
>
> -import java.io.ByteArrayInputStream;
> -import java.io.DataInputStream;
> import java.io.IOException;
> +import java.nio.charset.Charset;
>
> /**
> * See JVMS, section 4.8.15.
> @@ -38,6 +37,8 @@
> * deletion without notice.</b>
> */
> public class SourceDebugExtension_attribute extends Attribute {
> + private static final Charset UTF8 = Charset.forName("UTF-8");
> +
> SourceDebugExtension_attribute(ClassReader cr, int name_index, int length) throws IOException {
> super(name_index, length);
> debug_extension = new byte[attribute_length];
> @@ -55,12 +56,7 @@
> }
>
> public String getValue() {
> - DataInputStream d = new DataInputStream(new ByteArrayInputStream(debug_extension));
> - try {
> - return d.readUTF();
> - } catch (IOException e) {
> - return null;
> - }
> + return new String(debug_extension, UTF8);
> }
>
> public <R, D> R accept(Visitor<R, D> visitor, D data) {
> diff -r b3458329d060 src/share/classes/com/sun/tools/javap/AttributeWriter.java
> --- a/src/share/classes/com/sun/tools/javap/AttributeWriter.java Mon Jun 24 14:27:32 2013 -0700
> +++ b/src/share/classes/com/sun/tools/javap/AttributeWriter.java Tue Jun 25 20:22:06 2013 +0300
> @@ -511,7 +511,10 @@
> }
>
> public Void visitSourceDebugExtension(SourceDebugExtension_attribute attr, Void ignore) {
> - println("SourceDebugExtension: " + attr.getValue());
> + println("SourceDebugExtension:");
> + indent(+1);
> + print(attr.getValue());
> + indent(-1);
> return null;
> }
>
> Regards,
> Dmytro
More information about the compiler-dev
mailing list