< prev index next > src/jdk.jdeps/share/classes/com/sun/tools/javap/AttributeWriter.java
Print this page
/*
! * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
/*
! * Copyright (c) 2007, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
import java.lang.classfile.attribute.*;
import static java.lang.classfile.ClassFile.*;
import static java.lang.classfile.attribute.StackMapFrameInfo.*;
import static java.lang.classfile.instruction.CharacterRange.*;
+ import com.sun.tools.javac.util.Assert;
+ import com.sun.tools.javac.util.StringUtils;
+
/*
* A writer for writing Attributes as text.
*
* <p><b>This is NOT part of any supported API.
* If you write code that depends on this, you do so at your own risk.
for (var sc : attr.permittedSubclasses()) {
println(constantWriter.stringValue(sc));
}
indent(-1);
}
+ case LoadableDescriptorsAttribute attr -> {
+ println("LoadableDescriptors:");
+ indent(+1);
+ for (var sc : attr.loadableDescriptors()) {
+ println(constantWriter.stringValue(sc));
+ }
+ indent(-1);
+ }
case SignatureAttribute attr -> {
print("Signature: #" + attr.signature().index());
tab();
println("// " + attr.signature().stringValue());
}
printHeader(frameType, "/* same_locals_1_stack_item */");
indent(+1);
printMap("stack", frame.stack(), lr);
indent(-1);
} else {
! int offsetDelta = lr.labelToBci(frame.target()) - lastOffset - 1;
switch (frameType) {
case 247 -> {
! printHeader(frameType, "/* same_locals_1_stack_item_frame_extended */");
indent(+1);
println("offset_delta = " + offsetDelta);
printMap("stack", frame.stack(), lr);
indent(-1);
}
printHeader(frameType, "/* same_locals_1_stack_item */");
indent(+1);
printMap("stack", frame.stack(), lr);
indent(-1);
} else {
! int offsetDelta = frameType != 246 ? lr.labelToBci(frame.target()) - lastOffset - 1 : 0;
switch (frameType) {
+ case 246 -> {
+ printHeader(frameType, "/* assert_unset_fields */");
+ indent(+1);
+ println("number of unset_fields = " + frame.unsetFields().size());
+ indent(+1);
+ for (NameAndTypeEntry field : frame.unsetFields()) {
+ print("unset_field = #");
+ constantWriter.write(field.index());
+ println();
+ }
+ indent(-1);
+ indent(-1);
+ }
case 247 -> {
! printHeader(frameType, "/* same_locals_1_stack_item_entry_extended */");
indent(+1);
println("offset_delta = " + offsetDelta);
printMap("stack", frame.stack(), lr);
indent(-1);
}
indent(+1);
println("offset_delta = " + offsetDelta);
indent(-1);
}
case 251 -> {
! printHeader(frameType, "/* same_frame_extended */");
indent(+1);
println("offset_delta = " + offsetDelta);
indent(-1);
}
case 252, 253, 254 -> {
indent(+1);
println("offset_delta = " + offsetDelta);
indent(-1);
}
case 251 -> {
! printHeader(frameType, "/* same_entry_extended */");
indent(+1);
println("offset_delta = " + offsetDelta);
indent(-1);
}
case 252, 253, 254 -> {
printMap("locals", locals.subList(locals.size()
- frameType + 251, locals.size()), lr);
indent(-1);
}
case 255 -> {
! printHeader(frameType, "/* full_frame */");
indent(+1);
println("offset_delta = " + offsetDelta);
printMap("locals", frame.locals(), lr);
printMap("stack", frame.stack(), lr);
indent(-1);
printMap("locals", locals.subList(locals.size()
- frameType + 251, locals.size()), lr);
indent(-1);
}
case 255 -> {
! printHeader(frameType, "/* full_entry */");
indent(+1);
println("offset_delta = " + offsetDelta);
printMap("locals", frame.locals(), lr);
printMap("stack", frame.stack(), lr);
indent(-1);
< prev index next >