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
ConstructorCallbacks 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 voidinstrumentClass(Class<?> c, ConstructorCallback<?> sampler) Ensures that the given sampler will be invoked every time a constructor for class c is invoked.static voidBytecode 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, waitMethods 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:
transformin 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.
-