private static void addWithModifiers(CtClass target, CtClass type, String name, int modifiers, Class<?> ... annotations ) { try { final CtField f = new CtField( type, name, target ); f.setModifiers( f.getModifiers() | modifiers ); addAnnotations( f.getFieldInfo(), annotations ); target.addField( f ); } catch (CannotCompileException cce) { final String msg = String.format( "Could not enhance class [%s] to add field [%s]", target.getName(), name ); throw new EnhancementException( msg, cce ); } }
private void addLinkedNextHandling(CtClass managedCtClass) { FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( ManagedEntity.class ), EnhancerConstants.NEXT_FIELD_NAME, EnhancerConstants.NEXT_GETTER_NAME, EnhancerConstants.NEXT_SETTER_NAME ); }
/** * Add enhancement field */ public static void addField(CtClass target, CtClass type, String field) { addPrivateTransient( target, type, field ); }
private void addInLineDirtyHandling(CtClass managedCtClass) { managedCtClass.addInterface( loadCtClassFromClass( SelfDirtinessTracker.class ) ); FieldWriter.addField( managedCtClass, loadCtClassFromClass( DirtyTracker.class ), EnhancerConstants.TRACKER_FIELD_NAME ); if ( collectCollectionFields( managedCtClass ).isEmpty() ) { createDirtyTrackerMethodsWithoutCollections( managedCtClass ); } else { FieldWriter.addField( managedCtClass, loadCtClassFromClass( CollectionTracker.class ), EnhancerConstants.TRACKER_COLLECTION_NAME ); createDirtyTrackerMethodsWithCollections( managedCtClass ); } }
private static void addPrivateTransient(CtClass target, CtClass type, String name) { addWithModifiers( target, type, name, Modifier.PRIVATE | Modifier.TRANSIENT, Transient.class ); log.debugf( "Wrote field into [%s]: @Transient private transient %s %s;", target.getName(), type.getName(), name ); }
private void addInLineDirtyHandling(CtClass managedCtClass) { managedCtClass.addInterface( loadCtClassFromClass( CompositeTracker.class ) ); final CtClass compositeCtType = loadCtClassFromClass( CompositeOwnerTracker.class ); FieldWriter.addField( managedCtClass, compositeCtType, EnhancerConstants.TRACKER_COMPOSITE_FIELD_NAME ); createCompositeTrackerMethod( managedCtClass ); }
private static void addPrivateTransient(CtClass target, CtClass type, String name) { addWithModifiers( target, type, name, Modifier.PRIVATE | Modifier.TRANSIENT, Transient.class ); log.debugf( "Wrote field into [%s]: @Transient private transient %s %s;", target.getName(), type.getName(), name ); }
private void addEntityEntryHandling(CtClass managedCtClass) { FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( EntityEntry.class ), EnhancerConstants.ENTITY_ENTRY_FIELD_NAME, EnhancerConstants.ENTITY_ENTRY_GETTER_NAME, EnhancerConstants.ENTITY_ENTRY_SETTER_NAME ); }
private void addInLineDirtyHandling(CtClass managedCtClass) { managedCtClass.addInterface( loadCtClassFromClass( SelfDirtinessTracker.class ) ); FieldWriter.addField( managedCtClass, loadCtClassFromClass( DirtyTracker.class ), EnhancerConstants.TRACKER_FIELD_NAME ); if ( collectCollectionFields( managedCtClass ).isEmpty() ) { createDirtyTrackerMethodsWithoutCollections( managedCtClass ); } else { FieldWriter.addField( managedCtClass, loadCtClassFromClass( CollectionTracker.class ), EnhancerConstants.TRACKER_COLLECTION_NAME ); createDirtyTrackerMethodsWithCollections( managedCtClass ); } }
/** * Add enhancement field with getter and setter */ public static void addFieldWithGetterAndSetter(CtClass target, CtClass type, String field, String getter, String setter) { addPrivateTransient( target, type, field ); MethodWriter.addGetter( target, field, getter ); MethodWriter.addSetter( target, field, setter ); }
private static void addWithModifiers(CtClass target, CtClass type, String name, int modifiers, Class<?> ... annotations ) { try { final CtField f = new CtField( type, name, target ); f.setModifiers( f.getModifiers() | modifiers ); addAnnotations( f.getFieldInfo(), annotations ); target.addField( f ); } catch (CannotCompileException cce) { final String msg = String.format( "Could not enhance class [%s] to add field [%s]", target.getName(), name ); throw new EnhancementException( msg, cce ); } }
private void addLinkedPreviousHandling(CtClass managedCtClass) { FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( ManagedEntity.class ), EnhancerConstants.PREVIOUS_FIELD_NAME, EnhancerConstants.PREVIOUS_GETTER_NAME, EnhancerConstants.PREVIOUS_SETTER_NAME ); }
private void addInLineDirtyHandling(CtClass managedCtClass) { managedCtClass.addInterface( loadCtClassFromClass( CompositeTracker.class ) ); final CtClass compositeCtType = loadCtClassFromClass( CompositeOwnerTracker.class ); FieldWriter.addField( managedCtClass, compositeCtType, EnhancerConstants.TRACKER_COMPOSITE_FIELD_NAME ); createCompositeTrackerMethod( managedCtClass ); }
/** * Add enhancement field */ public static void addField(CtClass target, CtClass type, String field) { addPrivateTransient( target, type, field ); }
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 ); } }
/** * Add enhancement field with getter and setter */ public static void addFieldWithGetterAndSetter(CtClass target, CtClass type, String field, String getter, String setter) { addPrivateTransient( target, type, field ); MethodWriter.addGetter( target, field, getter ); MethodWriter.addSetter( target, field, setter ); }
private void addEntityEntryHandling(CtClass managedCtClass) { FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( EntityEntry.class ), EnhancerConstants.ENTITY_ENTRY_FIELD_NAME, EnhancerConstants.ENTITY_ENTRY_GETTER_NAME, EnhancerConstants.ENTITY_ENTRY_SETTER_NAME ); }
private void addLinkedNextHandling(CtClass managedCtClass) { FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( ManagedEntity.class ), EnhancerConstants.NEXT_FIELD_NAME, EnhancerConstants.NEXT_GETTER_NAME, EnhancerConstants.NEXT_SETTER_NAME ); }
private void addLinkedPreviousHandling(CtClass managedCtClass) { FieldWriter.addFieldWithGetterAndSetter( managedCtClass, loadCtClassFromClass( ManagedEntity.class ), EnhancerConstants.PREVIOUS_FIELD_NAME, EnhancerConstants.PREVIOUS_GETTER_NAME, EnhancerConstants.PREVIOUS_SETTER_NAME ); }
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 ); } }