922 var bmNode = new MapNodeImpl(FLOW, "bm");
923 bmNode.with(leafs(
924 "index", bm.bsmIndex(),
925 "kind", DirectMethodHandleDesc.Kind.valueOf(mh.kind(),
926 mref instanceof InterfaceMethodRefEntry).name(),
927 "owner", mref.owner().asInternalName(),
928 "name", mref.nameAndType().name().stringValue()));
929 bmNode.with(list("args", "arg", bm.arguments().stream().map(LoadableConstantEntry::constantValue)));
930 return bmNode;
931 })));
932 case ConstantValueAttribute cva ->
933 nodes.add(leaf("constant value", cva.constant().constantValue()));
934 case NestHostAttribute nha ->
935 nodes.add(leaf("nest host", nha.nestHost().name().stringValue()));
936 case NestMembersAttribute nma ->
937 nodes.add(list("nest members", "member", nma.nestMembers().stream()
938 .map(mp -> mp.name().stringValue())));
939 case PermittedSubclassesAttribute psa ->
940 nodes.add(list("permitted subclasses", "subclass", psa.permittedSubclasses().stream()
941 .map(e -> e.name().stringValue())));
942 default -> {}
943 }
944 if (verbosity == Verbosity.TRACE_ALL) switch (attr) {
945 case EnclosingMethodAttribute ema ->
946 nodes.add(map("enclosing method",
947 "class", ema.enclosingClass().name().stringValue(),
948 "method name", ema.enclosingMethodName()
949 .<ConstantDesc>map(Utf8Entry::stringValue).orElse(BSM_NULL_CONSTANT),
950 "method type", ema.enclosingMethodType()
951 .<ConstantDesc>map(Utf8Entry::stringValue).orElse(BSM_NULL_CONSTANT)));
952 case ExceptionsAttribute exa ->
953 nodes.add(list("exceptions", "exc", exa.exceptions().stream()
954 .map(e -> e.name().stringValue())));
955 case InnerClassesAttribute ica ->
956 nodes.add(new ListNodeImpl(BLOCK, "inner classes", ica.classes().stream()
957 .map(ic -> new MapNodeImpl(FLOW, "cls").with(
958 leaf("inner class", ic.innerClass().name().stringValue()),
959 leaf("outer class", ic.outerClass()
960 .map(cle -> (ConstantDesc)cle.name().stringValue()).orElse(BSM_NULL_CONSTANT)),
961 leaf("inner name", ic.innerName().<ConstantDesc>map(Utf8Entry::stringValue).orElse(BSM_NULL_CONSTANT)),
|
922 var bmNode = new MapNodeImpl(FLOW, "bm");
923 bmNode.with(leafs(
924 "index", bm.bsmIndex(),
925 "kind", DirectMethodHandleDesc.Kind.valueOf(mh.kind(),
926 mref instanceof InterfaceMethodRefEntry).name(),
927 "owner", mref.owner().asInternalName(),
928 "name", mref.nameAndType().name().stringValue()));
929 bmNode.with(list("args", "arg", bm.arguments().stream().map(LoadableConstantEntry::constantValue)));
930 return bmNode;
931 })));
932 case ConstantValueAttribute cva ->
933 nodes.add(leaf("constant value", cva.constant().constantValue()));
934 case NestHostAttribute nha ->
935 nodes.add(leaf("nest host", nha.nestHost().name().stringValue()));
936 case NestMembersAttribute nma ->
937 nodes.add(list("nest members", "member", nma.nestMembers().stream()
938 .map(mp -> mp.name().stringValue())));
939 case PermittedSubclassesAttribute psa ->
940 nodes.add(list("permitted subclasses", "subclass", psa.permittedSubclasses().stream()
941 .map(e -> e.name().stringValue())));
942 case LoadableDescriptorsAttribute pa ->
943 nodes.add(list("loadable descriptors", "descriptor", pa.loadableDescriptors().stream()
944 .map(e -> e.stringValue())));
945 default -> {}
946 }
947 if (verbosity == Verbosity.TRACE_ALL) switch (attr) {
948 case EnclosingMethodAttribute ema ->
949 nodes.add(map("enclosing method",
950 "class", ema.enclosingClass().name().stringValue(),
951 "method name", ema.enclosingMethodName()
952 .<ConstantDesc>map(Utf8Entry::stringValue).orElse(BSM_NULL_CONSTANT),
953 "method type", ema.enclosingMethodType()
954 .<ConstantDesc>map(Utf8Entry::stringValue).orElse(BSM_NULL_CONSTANT)));
955 case ExceptionsAttribute exa ->
956 nodes.add(list("exceptions", "exc", exa.exceptions().stream()
957 .map(e -> e.name().stringValue())));
958 case InnerClassesAttribute ica ->
959 nodes.add(new ListNodeImpl(BLOCK, "inner classes", ica.classes().stream()
960 .map(ic -> new MapNodeImpl(FLOW, "cls").with(
961 leaf("inner class", ic.innerClass().name().stringValue()),
962 leaf("outer class", ic.outerClass()
963 .map(cle -> (ConstantDesc)cle.name().stringValue()).orElse(BSM_NULL_CONSTANT)),
964 leaf("inner name", ic.innerName().<ConstantDesc>map(Utf8Entry::stringValue).orElse(BSM_NULL_CONSTANT)),
|