Class ClassPrinter
ClassPrinter is a preview API of the Java platform.
Any ClassModelPREVIEW, FieldModelPREVIEW, MethodModelPREVIEW, or CodeModelPREVIEW
can be printed to a human-readable structured text in JSON, XML, or YAML format.
Or it can be exported into a tree of traversable and printable nodes,
more exactly into a tree of ClassPrinter.MapNodePREVIEW, ClassPrinter.ListNodePREVIEW, and ClassPrinter.LeafNodePREVIEW instances.
Level of details to print or to export is driven by ClassPrinter.VerbosityPREVIEW option.
Printing is for debugging purposes only. Printed text schema, tree content and structure not guaranteed. It may change anytime in a future.
The most frequent use case is to simply print a class:
ClassPrinter.toJson(classModel, ClassPrinter.Verbosity.TRACE_ALL, System.out::print);
ClassPrinterPREVIEW allows to traverse tree of simple printable nodes to hook custom printer:
void customPrint(ClassModel classModel) {
print(ClassPrinter.toTree(classModel, ClassPrinter.Verbosity.TRACE_ALL));
}
void print(ClassPrinter.Node node) {
switch (node) {
case ClassPrinter.MapNode mn -> {
// print map header
mn.values().forEach(this::print);
}
case ClassPrinter.ListNode ln -> {
// print list header
ln.forEach(this::print);
}
case ClassPrinter.LeafNode n -> {
// print leaf node
}
}
}
Another use case for ClassPrinterPREVIEW is to simplify writing of automated tests:
@Test
void printNodesInTest(ClassModel classModel) {
var classNode = ClassPrinter.toTree(classModel, ClassPrinter.Verbosity.TRACE_ALL);
assertContains(classNode, "method name", "myFooMethod");
assertContains(classNode, "field name", "myBarField");
assertContains(classNode, "inner class", "MyInnerFooClass");
}
void assertContains(ClassPrinter.Node node, ConstantDesc key, ConstantDesc value) {
if (!node.walk().anyMatch(n -> n instanceof ClassPrinter.LeafNode ln
&& ln.name().equals(key)
&& ln.value().equals(value))) {
node.toYaml(System.out::print);
throw new AssertionError("expected %s: %s".formatted(key, value));
}
}
- Since:
- 22
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfacePreview.A leaf node holding single printable value.static interfacePreview.A tree node holdingListof nested nodes.static interfacePreview.A tree node holdingMapof nested nodes.static interfacePreview.Named, traversable, and printable node parent.static enumPreview.Level of detail to print or export. -
Method Summary
Modifier and TypeMethodDescriptionstatic voidtoJson(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in JSON format.static ClassPrinter.MapNodePREVIEWtoTree(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity) Exports provided model into a tree of printable nodes.static voidtoXml(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in XML format.static voidtoYaml(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in YAML format.
-
Method Details
-
toTree
public static ClassPrinter.MapNodePREVIEW toTree(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity) Exports provided model into a tree of printable nodes.- Parameters:
model- aClassModelPREVIEW,FieldModelPREVIEW,MethodModelPREVIEW, orCodeModelPREVIEW to exportverbosity- level of details to export- Returns:
- root node of the exported tree
-
toJson
public static void toJson(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in JSON format.- Parameters:
model- aClassModelPREVIEW,FieldModelPREVIEW,MethodModelPREVIEW, orCodeModelPREVIEW to printverbosity- level of details to printout- consumer of the print fragments
-
toXml
public static void toXml(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in XML format.- Parameters:
model- aClassModelPREVIEW,FieldModelPREVIEW,MethodModelPREVIEW, orCodeModelPREVIEW to printverbosity- level of details to printout- consumer of the print fragments
-
toYaml
public static void toYaml(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in YAML format.- Parameters:
model- aClassModelPREVIEW,FieldModelPREVIEW,MethodModelPREVIEW, orCodeModelPREVIEW to printverbosity- level of details to printout- consumer of the print fragments
-
ClassPrinterwhen preview features are enabled.