ClassPrinter
is a preview API of the Java platform.
Any ClassModel
PREVIEW, FieldModel
PREVIEW, MethodModel
PREVIEW, or CodeModel
PREVIEW
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
PREVIEW, ClassPrinter.ListNode
PREVIEW, and ClassPrinter.LeafNode
PREVIEW instances.
Level of details to print or to export is driven by ClassPrinter.Verbosity
PREVIEW 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
PREVIEW 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
PREVIEW 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
Modifier and TypeClassDescriptionstatic interface
Preview.A leaf node holding single printable value.static interface
Preview.A tree node holdingList
of nested nodes.static interface
Preview.A tree node holdingMap
of nested nodes.static interface
Preview.Named, traversable, and printable node parent.static enum
Preview.Level of detail to print or export. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
toJson
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in JSON format.static ClassPrinter.MapNodePREVIEW
toTree
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity) Exports provided model into a tree of printable nodes.static void
toXml
(CompoundElementPREVIEW<?> model, ClassPrinter.VerbosityPREVIEW verbosity, Consumer<String> out) Prints provided model as structured text in XML format.static void
toYaml
(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
- aClassModel
PREVIEW,FieldModel
PREVIEW,MethodModel
PREVIEW, orCodeModel
PREVIEW 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
- aClassModel
PREVIEW,FieldModel
PREVIEW,MethodModel
PREVIEW, orCodeModel
PREVIEW 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
- aClassModel
PREVIEW,FieldModel
PREVIEW,MethodModel
PREVIEW, orCodeModel
PREVIEW 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
- aClassModel
PREVIEW,FieldModel
PREVIEW,MethodModel
PREVIEW, orCodeModel
PREVIEW to printverbosity
- level of details to printout
- consumer of the print fragments
-
ClassPrinter
when preview features are enabled.