@Override // change visibility protected -> public public CtClass loadCtClassFromClass(Class<?> aClass) { return super.loadCtClassFromClass( aClass ); } }
@Override public Enhancer getEnhancer(EnhancementContext enhancementContext) { return new EnhancerImpl( enhancementContext ); } }
EnhancerImpl(JavassistEnhancementContext enhancementContext) { this.enhancementContext = enhancementContext; this.classPool = buildClassPool( enhancementContext ); }
/** * Performs the enhancement. * * @param className The name of the class whose bytecode is being enhanced. * @param originalBytes The class's original (pre-enhancement) byte code * * @return The enhanced bytecode. Could be the same as the original bytecode if the original was * already enhanced or we could not enhance it for some reason. * * @throws EnhancementException Indicates a problem performing the enhancement */ @Override public synchronized byte[] enhance(String className, byte[] originalBytes) throws EnhancementException { CtClass managedCtClass = null; try { managedCtClass = classPool.makeClassIfNew( new ByteArrayInputStream( originalBytes ) ); return enhance( managedCtClass ) ? getByteCode( managedCtClass ) : null; } catch (IOException e) { log.unableToBuildEnhancementMetamodel( className ); return null; } finally { if ( managedCtClass != null ) { managedCtClass.detach(); } } }
if ( alreadyEnhanced( managedCtClass ) ) { log.debugf( "Skipping enhancement of [%s]: already enhanced", managedCtClass.getName() ); return false;
/** * Performs the enhancement. * * @param className The name of the class whose bytecode is being enhanced. * @param originalBytes The class's original (pre-enhancement) byte code * * @return The enhanced bytecode. Could be the same as the original bytecode if the original was * already enhanced or we could not enhance it for some reason. * * @throws EnhancementException Indicates a problem performing the enhancement */ @Override public synchronized byte[] enhance(String className, byte[] originalBytes) throws EnhancementException { CtClass managedCtClass = null; try { managedCtClass = classPool.makeClassIfNew( new ByteArrayInputStream( originalBytes ) ); return enhance( managedCtClass ) ? getByteCode( managedCtClass ) : null; } catch (IOException e) { log.unableToBuildEnhancementMetamodel( className ); return null; } finally { if ( managedCtClass != null ) { managedCtClass.detach(); } } }
if ( alreadyEnhanced( managedCtClass ) ) { log.debugf( "Skipping enhancement of [%s]: already enhanced", managedCtClass.getName() ); return false;
protected void addInterceptorHandling(CtClass managedCtClass) { // interceptor handling is only needed if class has lazy-loadable attributes if ( !enhancementContext.hasLazyLoadableAttributes( managedCtClass ) ) { return; } log.debugf( "Weaving in PersistentAttributeInterceptable implementation on [%s]", managedCtClass.getName() ); managedCtClass.addInterface( loadCtClassFromClass( PersistentAttributeInterceptable.class ) ); FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( PersistentAttributeInterceptor.class ), EnhancerConstants.INTERCEPTOR_FIELD_NAME, EnhancerConstants.INTERCEPTOR_GETTER_NAME, EnhancerConstants.INTERCEPTOR_SETTER_NAME ); } }
/** * Constructs the Enhancer, using the given context. * * @param enhancementContext Describes the context in which enhancement will occur so as to give access * to contextual/environmental information. */ public EnhancerImpl(EnhancementContext enhancementContext) { this.enhancementContext = new JavassistEnhancementContext( enhancementContext ); this.classPool = buildClassPool( this.enhancementContext ); }
@Override public Enhancer getEnhancer(EnhancementContext enhancementContext) { return new EnhancerImpl( enhancementContext ); } }
protected void addInterceptorHandling(CtClass managedCtClass) { // interceptor handling is only needed if class has lazy-loadable attributes if ( !enhancementContext.hasLazyLoadableAttributes( managedCtClass ) ) { return; } log.debugf( "Weaving in PersistentAttributeInterceptable implementation on [%s]", managedCtClass.getName() ); managedCtClass.addInterface( loadCtClassFromClass( PersistentAttributeInterceptable.class ) ); FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( PersistentAttributeInterceptor.class ), EnhancerConstants.INTERCEPTOR_FIELD_NAME, EnhancerConstants.INTERCEPTOR_GETTER_NAME, EnhancerConstants.INTERCEPTOR_SETTER_NAME ); } }
EnhancerImpl(JavassistEnhancementContext enhancementContext) { this.enhancementContext = enhancementContext; this.classPool = buildClassPool( enhancementContext ); }
/** * Constructs the Enhancer, using the given context. * * @param enhancementContext Describes the context in which enhancement will occur so as to give access * to contextual/environmental information. */ public EnhancerImpl(EnhancementContext enhancementContext) { this.enhancementContext = new JavassistEnhancementContext( enhancementContext ); this.classPool = buildClassPool( this.enhancementContext ); }