884 bm -> {
885 var mh = bm.bootstrapMethod();
886 var mref = mh.reference();
887 return map("bm",
888 "kind", DirectMethodHandleDesc.Kind.valueOf(mh.kind(),
889 mref instanceof InterfaceMethodRefEntry).name(),
890 "owner", mref.owner().name().stringValue(),
891 "name", mref.nameAndType().name().stringValue(),
892 "type", mref.nameAndType().type().stringValue());
893 })));
894 case ConstantValueAttribute cva ->
895 nodes.add(leaf("constant value", cva.constant().constantValue()));
896 case NestHostAttribute nha ->
897 nodes.add(leaf("nest host", nha.nestHost().name().stringValue()));
898 case NestMembersAttribute nma ->
899 nodes.add(list("nest members", "member", nma.nestMembers().stream()
900 .map(mp -> mp.name().stringValue())));
901 case PermittedSubclassesAttribute psa ->
902 nodes.add(list("permitted subclasses", "subclass", psa.permittedSubclasses().stream()
903 .map(e -> e.name().stringValue())));
904 default -> {}
905 }
906 if (verbosity == Verbosity.TRACE_ALL) switch (attr) {
907 case EnclosingMethodAttribute ema ->
908 nodes.add(map("enclosing method",
909 "class", ema.enclosingClass().name().stringValue(),
910 "method name", ema.enclosingMethodName()
911 .map(Utf8Entry::stringValue).orElse("null"),
912 "method type", ema.enclosingMethodType()
913 .map(Utf8Entry::stringValue).orElse("null")));
914 case ExceptionsAttribute exa ->
915 nodes.add(list("exceptions", "exc", exa.exceptions().stream()
916 .map(e -> e.name().stringValue())));
917 case InnerClassesAttribute ica ->
918 nodes.add(new ListNodeImpl(BLOCK, "inner classes", ica.classes().stream()
919 .map(ic -> new MapNodeImpl(FLOW, "cls").with(
920 leaf("inner class", ic.innerClass().name().stringValue()),
921 leaf("outer class", ic.outerClass()
922 .map(cle -> cle.name().stringValue()).orElse("null")),
923 leaf("inner name", ic.innerName().map(Utf8Entry::stringValue).orElse("null")),
|
884 bm -> {
885 var mh = bm.bootstrapMethod();
886 var mref = mh.reference();
887 return map("bm",
888 "kind", DirectMethodHandleDesc.Kind.valueOf(mh.kind(),
889 mref instanceof InterfaceMethodRefEntry).name(),
890 "owner", mref.owner().name().stringValue(),
891 "name", mref.nameAndType().name().stringValue(),
892 "type", mref.nameAndType().type().stringValue());
893 })));
894 case ConstantValueAttribute cva ->
895 nodes.add(leaf("constant value", cva.constant().constantValue()));
896 case NestHostAttribute nha ->
897 nodes.add(leaf("nest host", nha.nestHost().name().stringValue()));
898 case NestMembersAttribute nma ->
899 nodes.add(list("nest members", "member", nma.nestMembers().stream()
900 .map(mp -> mp.name().stringValue())));
901 case PermittedSubclassesAttribute psa ->
902 nodes.add(list("permitted subclasses", "subclass", psa.permittedSubclasses().stream()
903 .map(e -> e.name().stringValue())));
904 case PreloadAttribute pa ->
905 nodes.add(list("preload classes", "class", pa.preloads().stream()
906 .map(e -> e.name().stringValue())));
907 default -> {}
908 }
909 if (verbosity == Verbosity.TRACE_ALL) switch (attr) {
910 case EnclosingMethodAttribute ema ->
911 nodes.add(map("enclosing method",
912 "class", ema.enclosingClass().name().stringValue(),
913 "method name", ema.enclosingMethodName()
914 .map(Utf8Entry::stringValue).orElse("null"),
915 "method type", ema.enclosingMethodType()
916 .map(Utf8Entry::stringValue).orElse("null")));
917 case ExceptionsAttribute exa ->
918 nodes.add(list("exceptions", "exc", exa.exceptions().stream()
919 .map(e -> e.name().stringValue())));
920 case InnerClassesAttribute ica ->
921 nodes.add(new ListNodeImpl(BLOCK, "inner classes", ica.classes().stream()
922 .map(ic -> new MapNodeImpl(FLOW, "cls").with(
923 leaf("inner class", ic.innerClass().name().stringValue()),
924 leaf("outer class", ic.outerClass()
925 .map(cle -> cle.name().stringValue()).orElse("null")),
926 leaf("inner name", ic.innerName().map(Utf8Entry::stringValue).orElse("null")),
|