Class ConstructorInstrumenter
java.lang.Object
com.google.monitoring.runtime.instrumentation.ConstructorInstrumenter
- All Implemented Interfaces:
ClassFileTransformer
Instruments bytecode by inserting a specified call in the
constructor of a given class. This class is intended to be loaded
by a javaagent; end-users will want to add
ConstructorCallback
s by
invoking instrumentClass(Class, ConstructorCallback)
.-
Method Summary
Modifier and TypeMethodDescriptionstatic byte[]
instrument
(byte[] originalBytes, Class<?> classBeingRedefined) Given the bytes representing a class, add invocations of the ConstructorCallback method to the constructor.static void
instrumentClass
(Class<?> c, ConstructorCallback<?> sampler) Ensures that the given sampler will be invoked every time a constructor for class c is invoked.static void
Bytecode is rewritten to invoke this method; it calls the sampler for the given class.byte[]
transform
(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.instrument.ClassFileTransformer
transform
-
Method Details
-
instrumentClass
public static void instrumentClass(Class<?> c, ConstructorCallback<?> sampler) throws UnmodifiableClassException Ensures that the given sampler will be invoked every time a constructor for class c is invoked.- Parameters:
c
- The class to be trackedsampler
- the code to be invoked when an instance of c is constructed- Throws:
UnmodifiableClassException
- if c cannot be modified.
-
transform
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) - Specified by:
transform
in interfaceClassFileTransformer
-
instrument
Given the bytes representing a class, add invocations of the ConstructorCallback method to the constructor.- Parameters:
originalBytes
- the originalbyte[]
code.classBeingRedefined
- the class being redefined.- Returns:
- the instrumented
byte[]
code.
-
invokeSamplers
Bytecode is rewritten to invoke this method; it calls the sampler for the given class. Note that, unless the javaagent command line argument "subclassesAlso" is specified, it won't do anything if o is a subclass of the class that was supposed to be tracked.- Parameters:
o
- the object passed to the samplers.
-