-
CSR
-
Resolution: Approved
-
P3
-
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):
incrementInstruction
remove as duplicate ofiinc
lookupSwitchInstruction
remove as duplicate oflookupswitch
tableSwitchInstruction
remove as duplicate oftableswitch
throwInstruction
remove as duplicate ofathrow
invokeDynamicInstruction
remove as duplicate ofinvokedynamic
stackInstruction
remove as obsolete with suggested replacements:with(StackInstruction.of(...))
monitorInstruction
remove as obsolete with suggested replacements:monitorenter
,monitorexit
, orwith(MonitorInstruction.of(...))
nopInstruction
remove as duplicate ofnop
typecheckInstruction
remove as obsolete with suggested replacements:checkcast
,instanceOf
, orwith(TypeCheckInstruction.of(...))
loadInstruction
rename toloadLocal
storeInstruction
rename tostoreLocal
branchInstruction
rename tobranch
invokeInstruction
rename toinvoke
newObjectInstruction
remove as duplicate ofnew_
newPrimitiveArrayInstruction
rename tonewPrimitiveArray
newReferenceArrayInstruction
rename tonewReferenceArray
newMultidimensionalArrayInstruction
rename tonewMultidimensionalArray
arrayLoadInstruction
rename toarrayLoad
arrayStoreInstruction
rename toarrayStore
convertInstruction
rename toconversion
operatorInstruction
rename tooperator
constantInstruction
rename toloadConstant
fieldInstruction
rename tofieldAccess
instanceof_
rename toinstanceOf
returnInstruction
rename 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
-