Class ClassPrinter
Any ClassModel
, FieldModel
, MethodModel
, or CodeModel
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.MapNode
, ClassPrinter.ListNode
, and ClassPrinter.LeafNode
instances.
Level of details to print or to export is driven by ClassPrinter.Verbosity
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);
ClassPrinter
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 ClassPrinter
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:
- 24
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
A leaf node holding single printable value.static interface
A tree node holdingList
of nested nodes.static interface
A tree node holdingMap
of nested nodes.static interface
Named, traversable, and printable node parent.static enum
Level of detail to print or export. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
toJson
(CompoundElement<?> model, ClassPrinter.Verbosity verbosity, Consumer<String> out) Prints provided model as structured text in JSON format.static ClassPrinter.MapNode
toTree
(CompoundElement<?> model, ClassPrinter.Verbosity verbosity) Exports provided model into a tree of printable nodes.static void
toXml
(CompoundElement<?> model, ClassPrinter.Verbosity verbosity, Consumer<String> out) Prints provided model as structured text in XML format.static void
toYaml
(CompoundElement<?> model, ClassPrinter.Verbosity verbosity, Consumer<String> out) Prints provided model as structured text in YAML format.
-
Method Details
-
toTree
public static ClassPrinter.MapNode toTree(CompoundElement<?> model, ClassPrinter.Verbosity verbosity) Exports provided model into a tree of printable nodes.- Parameters:
model
- aClassModel
,FieldModel
,MethodModel
, orCodeModel
to exportverbosity
- level of details to export- Returns:
- root node of the exported tree
-
toJson
public static void toJson(CompoundElement<?> model, ClassPrinter.Verbosity verbosity, Consumer<String> out) Prints provided model as structured text in JSON format.- Parameters:
model
- aClassModel
,FieldModel
,MethodModel
, orCodeModel
to printverbosity
- level of details to printout
- consumer of the print fragments
-
toXml
public static void toXml(CompoundElement<?> model, ClassPrinter.Verbosity verbosity, Consumer<String> out) Prints provided model as structured text in XML format.- Parameters:
model
- aClassModel
,FieldModel
,MethodModel
, orCodeModel
to printverbosity
- level of details to printout
- consumer of the print fragments
-
toYaml
public static void toYaml(CompoundElement<?> model, ClassPrinter.Verbosity verbosity, Consumer<String> out) Prints provided model as structured text in YAML format.- Parameters:
model
- aClassModel
,FieldModel
,MethodModel
, orCodeModel
to printverbosity
- level of details to printout
- consumer of the print fragments
-