<div dir="ltr">Hello, I just looked over the Classfile API and found a few design issues, aside from simple typos addressed in <a href="https://github.com/openjdk/jdk/pull/14686">https://github.com/openjdk/jdk/pull/14686</a>:<br><div><br></div><div>Specific issues:</div><div>1. LocalVariable and LocalVariableType: They are missing factory methods. In addition, they shouldn't have writeTo(BufWriter) method exposed in the public API.</div><div>2. ConstantPoolBuilder::constantValueEntry/loadableConstantEntry/annotationConstantValueEntry should accept the 4 subword types: Byte, Boolean, Char, Short, which should simply map to int entries.</div><div>3. BufWriter::asByteBuffer is weird: it is a write-allowed buffer that can modify the buf until the old array is discarded when the backing buf is expanded. Currently used by stack map generation and stack counting, we should probably refit this to be user-safe or make this an internal API.</div><div>4. FieldRefEntry, MethodRefEntry, InterfaceMethodRefEntry, ConstantDynamicEntry, InvokeDynamicEntry should have typeSymbol() to easily access the shared field and method type symbols.</div><div>5. AttributeMapper::validSince should be removed, as mentioned by Adam a while ago; it's unused and its implementations are sometimes incorrect.</div><div><br></div><div>General issues:</div><div>1. What about the attributes in Code? Currently, attributes in code aren't delivered in Streaming besides the few hardcoded ones, which means that custom attributes will be lost after a code model undergoes an accept-all code transform. Is that the intended behavior?</div><div>    1.1. If CodeElement is only for streamable elements, then StackMapTableAttribute shouldn't be a CodeElement, as it's never delivered in code streams.</div><div>2. For nullable references, currently Classfile API accepts an Optional<Xxx> argument instead of a nullable argument. Should we switch those to nullable arguments instead, like parameter name for MethodParameterInfo?</div><div>3. We can add @sealedGraph tag to sealed interfaces in the Classfile API, which will render an svg image of the sealed class hierarchy (exists in classes like j.l.i.CallSite already)</div><div><br></div><div>Thank you for taking time and reading through this long list. Feel free to discuss these issues and propose suitable solutions.</div><div><br></div><div>Many thanks,</div><div>Chen Liang</div></div>