Classfile API proposal to integrate basic print functionality directly to ClassModel and MethodModel
Brian Goetz
brian.goetz at oracle.com
Thu Jul 21 17:31:43 UTC 2022
To be more explicit: all the format strings go away, replaced by some mechanical logic about “lists are rendered in [ … ], maps are rendered in { … }”.
And the code like:
case ModuleAttribute ma -> {
out.accept(template.module.header.formatted(ma.moduleName().name().stringValue(), quoteFlags(ma.moduleFlags()), ma.moduleVersion().map(Utf8Entry::stringValue).orElse(""), typesToString(ma.uses().stream().map(ce -> ce.asInternalName()))));
printTable(template.requires, ma.requires(), req -> new Object[] {req.requires().name().stringValue(), quoteFlags(req.requiresFlags()), req.requiresVersion().map(Utf8Entry::stringValue).orElse(null)});
printTable(template.exports, ma.exports(), exp -> new Object[] {exp.exportedPackage().name().stringValue(), quoteFlags(exp.exportsFlags()), typesToString(exp.exportsTo().stream().map(me -> me.name().stringValue()))});
printTable(template.opens, ma.opens(), open -> new Object[] {open.openedPackage().name().stringValue(), quoteFlags(open.opensFlags()), typesToString(open.opensTo().stream().map(me -> me.name().stringValue()))});
printTable(template.provides, ma.provides(), provide -> new Object[] {provide.provides().asInternalName(), typesToString(provide.providesWith().stream().map(me -> me.asInternalName()))});
out.accept(template.module.footer.formatted());
}
Becomes adding the following to the map:
{ moduleName -> ma.moduleName().name().stringValue(), …, requires -> ma.requires().stream().map(…).toList(), … }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20220721/ab792f2a/attachment.htm>
More information about the classfile-api-dev
mailing list