public class BytecodeRecorderImpl extends Object implements RecorderContext
A class recorder is simply a stateless class with a no arg constructor. This recorder will contain the runtime logic used to bootstrap the various frameworks.
A recording proxy is a proxy of a recorder that records all invocations on the recorder, and then writes out a sequence of java bytecode that performs the same invocations.
There are some limitations on what can be recorded. Only the following objects are allowed as parameters to recording proxies:
- primitives
- String
- Class
- Objects returned from a previous recorder invocation
- Objects with a no-arg constructor and getter/setters for all properties (or public fields)
- Objects with a constructor annotated with @RecordableConstructor with parameter names that match field names
- Any arbitrary object via the registerSubstitution(Class, Class, Class) mechanism
- arrays, lists and maps of the above
| Modifier and Type | Class and Description |
|---|---|
(package private) static interface |
BytecodeRecorderImpl.BytecodeInstruction |
(package private) class |
BytecodeRecorderImpl.DeferredArrayStoreParameter |
(package private) class |
BytecodeRecorderImpl.DeferredParameter
A bytecode serialized value.
|
(package private) static class |
BytecodeRecorderImpl.FixedMethodContext |
(package private) static interface |
BytecodeRecorderImpl.InstructionGroup
A group of instructions that will always be exectued in the same method
|
static interface |
BytecodeRecorderImpl.MethodContext |
(package private) static class |
BytecodeRecorderImpl.NewInstance |
(package private) static class |
BytecodeRecorderImpl.NonDefaultConstructorHolder |
static interface |
BytecodeRecorderImpl.ReturnedProxy |
(package private) static interface |
BytecodeRecorderImpl.SerialzationStep
A step that must be executed to serialize a complex object
|
(package private) static class |
BytecodeRecorderImpl.SplitMethodContext
class responsible for splitting the bytecode into smaller methods, to make sure that even large objects and large
numbers of invocations do not put us over the method limit.
|
(package private) static class |
BytecodeRecorderImpl.StoredMethodCall |
(package private) static class |
BytecodeRecorderImpl.SubstitutionHolder |
| Constructor and Description |
|---|
BytecodeRecorderImpl(boolean staticInit,
String buildStepName,
String methodName,
String uniqueHash) |
BytecodeRecorderImpl(ClassLoader classLoader,
boolean staticInit,
String className) |
| Modifier and Type | Method and Description |
|---|---|
(package private) static io.quarkus.gizmo.ResultHandle |
arrayValue(org.jboss.jandex.AnnotationValue value,
io.quarkus.gizmo.BytecodeCreator valueMethod,
org.jboss.jandex.MethodInfo method,
org.jboss.jandex.ClassInfo annotationClass) |
Class<?> |
classProxy(String name)
Creates a Class instance that can be passed to a recording proxy as a substitute for a class that is not loadable
at processing time.
|
(package private) static String |
componentType(org.jboss.jandex.MethodInfo method) |
String |
getClassName() |
<T> T |
getRecordingProxy(Class<T> theClass) |
boolean |
isEmpty() |
(package private) BytecodeRecorderImpl.DeferredParameter |
loadValue(org.jboss.jandex.AnnotationValue value,
org.jboss.jandex.ClassInfo annotationClass,
org.jboss.jandex.MethodInfo method) |
<T> RuntimeValue<T> |
newInstance(String name)
Creates a RuntimeValue object that represents an object created via the default constructor.
|
<T> void |
registerNonDefaultConstructor(Constructor<T> constructor,
Function<T,List<Object>> parameters)
Registers a way to construct an object via a non-default constructor.
|
void |
registerObjectLoader(ObjectLoader loader)
Register an object loader.
|
<F,T> void |
registerSubstitution(Class<F> from,
Class<T> to,
Class<? extends ObjectSubstitution<F,T>> substitution)
Registers a substitution to allow objects that are not serialisable to bytecode to be substituted for an object
that is.
|
void |
writeBytecode(io.quarkus.gizmo.ClassOutput classOutput) |
public BytecodeRecorderImpl(boolean staticInit,
String buildStepName,
String methodName,
String uniqueHash)
BytecodeRecorderImpl(ClassLoader classLoader, boolean staticInit, String className)
public boolean isEmpty()
public <F,T> void registerSubstitution(Class<F> from, Class<T> to, Class<? extends ObjectSubstitution<F,T>> substitution)
RecorderContextregisterSubstitution in interface RecorderContextfrom - The class of the non serializable objectto - The class to serialize tosubstitution - The subclass of ObjectSubstitution that performs the substitutionpublic <T> void registerNonDefaultConstructor(Constructor<T> constructor, Function<T,List<Object>> parameters)
RecorderContextregisterNonDefaultConstructor in interface RecorderContextT - The type of the objectconstructor - The constructorparameters - A function that maps the object to a list of constructor parameterspublic void registerObjectLoader(ObjectLoader loader)
RecorderContextregisterObjectLoader in interface RecorderContextloader - the object loader (must not be null)public Class<?> classProxy(String name)
RecorderContextclassProxy in interface RecorderContextname - The class namepublic <T> RuntimeValue<T> newInstance(String name)
RecorderContextThis object can be passed into recorders, but must not be used directly at deployment time
newInstance in interface RecorderContextT - The type of the classname - The name of the classpublic <T> T getRecordingProxy(Class<T> theClass)
public String getClassName()
public void writeBytecode(io.quarkus.gizmo.ClassOutput classOutput)
BytecodeRecorderImpl.DeferredParameter loadValue(org.jboss.jandex.AnnotationValue value, org.jboss.jandex.ClassInfo annotationClass, org.jboss.jandex.MethodInfo method)
static io.quarkus.gizmo.ResultHandle arrayValue(org.jboss.jandex.AnnotationValue value,
io.quarkus.gizmo.BytecodeCreator valueMethod,
org.jboss.jandex.MethodInfo method,
org.jboss.jandex.ClassInfo annotationClass)
static String componentType(org.jboss.jandex.MethodInfo method)
Copyright © 2020 JBoss by Red Hat. All rights reserved.