Class ConstructorInstrumenter
- java.lang.Object
-
- com.google.monitoring.runtime.instrumentation.ConstructorInstrumenter
-
- All Implemented Interfaces:
ClassFileTransformer
public class ConstructorInstrumenter extends Object implements 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 addConstructorCallback
s by invokinginstrumentClass(Class, ConstructorCallback)
.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static 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
invokeSamplers(Object o)
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 Detail
-
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
public static byte[] instrument(byte[] originalBytes, Class<?> classBeingRedefined)
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
public static void invokeSamplers(Object o)
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.
-
-