-
Type:
CSR
-
Resolution: Approved
-
Priority:
P3
-
Component/s: core-libs
-
None
-
source
-
low
-
Modification of preview API is a low compatibility risk.
-
Java API
-
SE
Summary
Remove redundancies and fix naming of java.lang.classfile.CodeBuilder API methods.
Problem
CodeBuilder contains more than 230 API methods.
Existing ClassFile API use cases proved that having one big CodeBuilder class works well in practice. However there are some redundant methods, glitches in the naming conventions, some frequently used methods are hard to find and some methods have low practical use.
Solution
Suggested changes in CodeBuilder methods (all overrides):
incrementInstructionremove as duplicate ofiinclookupSwitchInstructionremove as duplicate oflookupswitchtableSwitchInstructionremove as duplicate oftableswitchthrowInstructionremove as duplicate ofathrowinvokeDynamicInstructionremove as duplicate ofinvokedynamicstackInstructionremove as obsolete with suggested replacements:with(StackInstruction.of(...))monitorInstructionremove as obsolete with suggested replacements:monitorenter,monitorexit, orwith(MonitorInstruction.of(...))nopInstructionremove as duplicate ofnoptypecheckInstructionremove as obsolete with suggested replacements:checkcast,instanceOf, orwith(TypeCheckInstruction.of(...))loadInstructionrename toloadLocalstoreInstructionrename tostoreLocalbranchInstructionrename tobranchinvokeInstructionrename toinvokenewObjectInstructionremove as duplicate ofnew_newPrimitiveArrayInstructionrename tonewPrimitiveArraynewReferenceArrayInstructionrename tonewReferenceArraynewMultidimensionalArrayInstructionrename tonewMultidimensionalArrayarrayLoadInstructionrename toarrayLoadarrayStoreInstructionrename toarrayStoreconvertInstructionrename toconversionoperatorInstructionrename tooperatorconstantInstructionrename toloadConstantfieldInstructionrename tofieldAccessinstanceof_rename toinstanceOfreturnInstructionrename toreturn_
Specification
src/java.base/share/classes/java/lang/classfile/CodeBuilder.java:
+ arrayLoad(java.lang.classfile.TypeKind)
- arrayLoadInstruction(java.lang.classfile.TypeKind)
+ arrayStore(java.lang.classfile.TypeKind)
- arrayStoreInstruction(java.lang.classfile.TypeKind)
+ branch(java.lang.classfile.Opcode,java.lang.classfile.Label)
- branchInstruction(java.lang.classfile.Opcode,java.lang.classfile.Label)
- constantInstruction(java.lang.classfile.Opcode,java.lang.constant.ConstantDesc)
- constantInstruction(java.lang.constant.ConstantDesc)
+ conversion(java.lang.classfile.TypeKind,java.lang.classfile.TypeKind)
- convertInstruction(java.lang.classfile.TypeKind,java.lang.classfile.TypeKind)
+ fieldAccess(java.lang.classfile.Opcode,java.lang.classfile.constantpool.FieldRefEntry)
+ fieldAccess(java.lang.classfile.Opcode,java.lang.constant.ClassDesc,java.lang.String,java.lang.constant.ClassDesc)
- fieldInstruction(java.lang.classfile.Opcode,java.lang.classfile.constantpool.FieldRefEntry)
- fieldInstruction(java.lang.classfile.Opcode,java.lang.constant.ClassDesc,java.lang.String,java.lang.constant.ClassDesc)
- incrementInstruction(int,int)
+ instanceOf(java.lang.classfile.constantpool.ClassEntry)
+ instanceOf(java.lang.constant.ClassDesc)
- instanceof_(java.lang.classfile.constantpool.ClassEntry)
- instanceof_(java.lang.constant.ClassDesc)
+ invoke(java.lang.classfile.Opcode,java.lang.classfile.constantpool.MemberRefEntry)
+ invoke(java.lang.classfile.Opcode,java.lang.constant.ClassDesc,java.lang.String,java.lang.constant.MethodTypeDesc,boolean)
- invokeDynamicInstruction(java.lang.classfile.constantpool.InvokeDynamicEntry)
- invokeDynamicInstruction(java.lang.constant.DynamicCallSiteDesc)
- invokeInstruction(java.lang.classfile.Opcode,java.lang.classfile.constantpool.MemberRefEntry)
- invokeInstruction(java.lang.classfile.Opcode,java.lang.constant.ClassDesc,java.lang.String,java.lang.constant.MethodTypeDesc,boolean)
+ loadConstant(java.lang.classfile.Opcode,java.lang.constant.ConstantDesc)
+ loadConstant(java.lang.constant.ConstantDesc)
- loadInstruction(java.lang.classfile.TypeKind,int)
+ loadLocal(java.lang.classfile.TypeKind,int)
- lookupSwitchInstruction(java.lang.classfile.Label,java.util.List)
- monitorInstruction(java.lang.classfile.Opcode)
- newMultidimensionalArrayInstruction(int,java.lang.classfile.constantpool.ClassEntry)
- newMultidimensionalArrayInstruction(int,java.lang.constant.ClassDesc)
- newObjectInstruction(java.lang.classfile.constantpool.ClassEntry)
- newObjectInstruction(java.lang.constant.ClassDesc)
- newPrimitiveArrayInstruction(java.lang.classfile.TypeKind)
- newReferenceArrayInstruction(java.lang.classfile.constantpool.ClassEntry)
- newReferenceArrayInstruction(java.lang.constant.ClassDesc)
- nopInstruction()
- operatorInstruction(java.lang.classfile.Opcode)
- returnInstruction(java.lang.classfile.TypeKind)
+ return_(java.lang.classfile.TypeKind)
- stackInstruction(java.lang.classfile.Opcode)
- storeInstruction(java.lang.classfile.TypeKind,int)
+ storeLocal(java.lang.classfile.TypeKind,int)
- tableSwitchInstruction(int,int,java.lang.classfile.Label,java.util.List)
- throwInstruction()
- typeCheckInstruction(java.lang.classfile.Opcode,java.lang.classfile.constantpool.ClassEntry)
- typeCheckInstruction(java.lang.classfile.Opcode,java.lang.constant.ClassDesc)
- csr of
-
JDK-8323058 Revisit j.l.classfile.CodeBuilder API surface
-
- Resolved
-
- relates to
-
JDK-8324965 JEP 466: Class-File API (Second Preview)
-
- Closed
-
-
JDK-8326748 Class-File API transition to Second Preview
-
- Closed
-