public class HotswapTransformer extends Object implements ClassFileTransformer
| Modifier and Type | Field and Description |
|---|---|
protected Map<ClassFileTransformer,ClassLoader> |
classLoaderTransformers |
protected Map<String,org.hotswap.agent.util.HotswapTransformer.RegisteredTransformersRecord> |
registeredTransformers |
protected Map<ClassLoader,Object> |
seenClassLoaders |
| Constructor and Description |
|---|
HotswapTransformer() |
| Modifier and Type | Method and Description |
|---|---|
void |
closeClassLoader(ClassLoader classLoader)
Remove all transformers registered with a classloader
|
protected void |
ensureClassLoaderInitialized(ClassLoader classLoader,
ProtectionDomain protectionDomain)
Every classloader should be initialized.
|
protected String |
normalizeTypeRegexp(String registeredType)
Transform type to ^regexp$ form - match only whole pattern.
|
void |
registerTransformer(ClassLoader classLoader,
String classNameRegexp,
ClassFileTransformer transformer)
Register a transformer for a regexp matching class names.
|
void |
removeTransformer(String classNameRegexp,
ClassFileTransformer transformer)
Remove registered transformer.
|
void |
setExcludedClassLoaderPatterns(List<Pattern> excludedClassLoaderPatterns) |
byte[] |
transform(ClassLoader classLoader,
String className,
Class<?> redefiningClass,
ProtectionDomain protectionDomain,
byte[] bytes)
Main transform method called by Java instrumentation.
|
protected Map<String,org.hotswap.agent.util.HotswapTransformer.RegisteredTransformersRecord> registeredTransformers
protected Map<ClassFileTransformer,ClassLoader> classLoaderTransformers
protected Map<ClassLoader,Object> seenClassLoaders
public void setExcludedClassLoaderPatterns(List<Pattern> excludedClassLoaderPatterns)
excludedClassLoaderPatterns - the excludedClassLoaderPatterns to setpublic void registerTransformer(ClassLoader classLoader, String classNameRegexp, ClassFileTransformer transformer)
OnClassLoadEvent annotation respective
OnClassLoadedHandler.classLoader - the classloader to which this transformation is associatedclassNameRegexp - regexp to match fully qualified class name.
Because "." is any character in regexp, this will match / in the transform method as well
(diffentence between java/lang/String and java.lang.String).transformer - the transformer to be called for each class matching regexp.public void removeTransformer(String classNameRegexp, ClassFileTransformer transformer)
classNameRegexp - regexp to match fully qualified class name.transformer - currently registered transformerpublic void closeClassLoader(ClassLoader classLoader)
classLoader - public byte[] transform(ClassLoader classLoader, String className, Class<?> redefiningClass, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException
It does not do the instrumentation itself, instead iterates registered transformers and compares registration class regexp - if the regexp matches, the classloader is called.
Note that class bytes may be send to multiple transformers, but the order is not defined.
transform in interface ClassFileTransformerIllegalClassFormatExceptionClassFileTransformer.transform(ClassLoader, String, Class, java.security.ProtectionDomain, byte[])protected void ensureClassLoaderInitialized(ClassLoader classLoader, ProtectionDomain protectionDomain)
classLoader - the classloader to which this transformation is associatedprotectionDomain - associated protection domain (if any)Copyright © 2018. All rights reserved.