-
-
Notifications
You must be signed in to change notification settings - Fork 5
CReplaceCallback
Lenni0451 edited this page Jun 4, 2024
·
2 revisions
The CReplaceCallback
annotation can be used to replace all InjectionCallback
s used for the CInject
annotation in the target class.
All checks implemented in the InjectionCallback
class are reimplemented in plain ASM code resulting in no drawbacks when using this annotation.
This is useful when the InjectionCallback
class is not available in the target environment.
For example:
- Injecting into Java internals which can't access library classes
- Transforming an external jar file that doesn't include the library
All InjectionCallback
s are replaced with an Object
array with a length of 4.
The elements are:
index | description |
---|---|
0 | If the callback can be cancelled (cancellable = true in the CInject annotation) |
1 | If the callback is currently cancelled |
2 | The new return value if the target method returns a value |
3 | If a return value is set |
After applying all other transformers, the InjectionCallbackReplacer#replaceCallback(ClassNode)
method is called with the target class node.
This method can also be called manually to achieve the same effect without requiring the CReplaceCallback
annotation.
@CReplaceCallback
@CTransformer(TestClass.class)
public class Transformer {