Resolves an org.opalj.br.instructions.INCOMPLETE_INVOKEDYNAMIC instruction using the BootstrapMethodTable of the class.
Resolves an org.opalj.br.instructions.INCOMPLETE_INVOKEDYNAMIC instruction using the BootstrapMethodTable of the class.
Deferred resolution is necessary since the BootstrapMethodTable – which is an attribute of the class file – is loaded after the methods.
The ClassFile with which the deferred action was registered.
The class file's Constant_Pool.
The org.opalj.br.instructions.INVOKEDYNAMIC instruction's constant pool entry.
This method's array of instructions.Instructions. (The array returned by the #Instructions method.)
The program counter of the invokedynamic instruction.
This method is called (back) after the class file was completely loaded.
Registration as a callback method happens whenever an invokedynamic
instruction is found in a method's byte code.
To perform additional analyses on invokedynamic instructions, e.g. to
fully resolve the call target, a subclass may override this method to do so.
When you override this method, you should call this method
(super.deferredResolveInvokedynamicInstruction) to ensure that the default resolution
is carried out.
Provides support for rewriting Java 8 lambda or method reference expressions that werwe compiled to org.opalj.br.instructions.INVOKEDYNAMIC instructions. This trait should be mixed in alongside a BytecodeReaderAndBinding, which extracts basic
invokedynamicinformation from the BootstrapMethodTable.Specifically, whenever an
invokedynamicinstruction is encountered that is the result of a lambda/method reference expression compiled by Oracle's JDK8, it creates a proxy class file that represents the synthetic object that the JVM generates after executing theinvokedynamiccall site. This proxy is then stored in the temporary ClassFile attribute SynthesizedClassFiles. All such ClassFiles will be picked up later for inclusion in the project.