public DynamicType.Builder<?> define(String transformClassName, DynamicType.Builder<?> builder) throws PluginException { String interceptorDefineClassName = this.getClass().getName(); if (StringUtil.isEmpty(transformClassName)) { logger.warn( "classname of being intercepted is not defined by {}.", interceptorDefineClassName); return builder; } logger.debug( "prepare to enhance class {} by {}.", transformClassName, interceptorDefineClassName); /** find witness classes for enhance class */ String[] witnessClasses = witnessClasses(); if (witnessClasses != null) { for (String witnessClass : witnessClasses) { Resolution witnessClassResolution = PluginBootstrap.CLASS_TYPE_POOL.describe(witnessClass); if (!witnessClassResolution.isResolved()) { logger.warn( "enhance class {} by plugin {} is not working. Because witness class {} is not existed.", transformClassName, interceptorDefineClassName, witnessClass); return builder; } } } /** find origin class source code for interceptor */ DynamicType.Builder<?> newClassBuilder = this.enhance(transformClassName, builder); logger.debug( "enhance class {} by {} completely.", transformClassName, interceptorDefineClassName); return newClassBuilder; }