/** * 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 createCompositeTrackerMethod(CtClass managedCtClass) { try { MethodWriter.write( managedCtClass, "" + "public void %1$s(String name, %3$s tracker) {%n" + " if (%2$s == null) { %2$s = new %4$s(); }%n" + " %2$s.add(name, tracker);%n" + "}", EnhancerConstants.TRACKER_COMPOSITE_SET_OWNER, EnhancerConstants.TRACKER_COMPOSITE_FIELD_NAME, CompositeOwner.class.getName(), CompositeOwnerTracker.class.getName() ); MethodWriter.write( managedCtClass, "" + "public void %1$s(String name) {%n" + " if (%2$s != null) { %2$s.removeOwner(name); }%n" + "}", EnhancerConstants.TRACKER_COMPOSITE_CLEAR_OWNER, EnhancerConstants.TRACKER_COMPOSITE_FIELD_NAME ); } catch (CannotCompileException cce) { throw new RuntimeException( "createCompositeTrackerMethod failed", cce ); } }
tmpSuperReader = MethodWriter.addGetter( persistentField.getDeclaringClass(), persistentField.getName(), readerName ); tmpSuperWriter = MethodWriter.addSetter( persistentField.getDeclaringClass(), persistentField.getName(), writerName ); reader = MethodWriter.write( managedCtClass, "public %s %s() { return %s;%n}", persistentField.getType().getName(), reader = MethodWriter.write( managedCtClass, "public %s %s() {%n%s%n return %s;%n}", persistentField.getType().getName(),
@Override protected CtMethod generateFieldReader( CtClass managedCtClass, CtField persistentField, AttributeTypeDescriptor typeDescriptor) { String fieldName = persistentField.getName(); String readerName = EnhancerConstants.PERSISTENT_FIELD_READER_PREFIX + fieldName; return MethodWriter.addGetter( managedCtClass, fieldName, readerName ); }
@Override protected CtMethod generateFieldWriter( CtClass managedCtClass, CtField persistentField, AttributeTypeDescriptor typeDescriptor) { String fieldName = persistentField.getName(); String writerName = EnhancerConstants.PERSISTENT_FIELD_WRITER_PREFIX + fieldName; return MethodWriter.addSetter( managedCtClass, fieldName, writerName ); }
final int methodIndex = MethodWriter.addMethod( constPool, attributeMethods.getReader() ); itr.writeByte( Opcode.INVOKEVIRTUAL, index ); itr.write16bit( methodIndex, index + 1 ); final int methodIndex = MethodWriter.addMethod( constPool, attributeMethods.getWriter() ); itr.writeByte( Opcode.INVOKEVIRTUAL, index ); itr.write16bit( methodIndex, index + 1 );
tmpSuperReader = MethodWriter.addGetter( persistentField.getDeclaringClass(), persistentField.getName(), readerName ); tmpSuperWriter = MethodWriter.addSetter( persistentField.getDeclaringClass(), persistentField.getName(), writerName ); writer = MethodWriter.write( managedCtClass, "public void %s(%s %s) {%n %s%n}", writer = MethodWriter.write( managedCtClass, "public void %s(%s %s) {%n%s%n}",
@Override protected CtMethod generateFieldReader( CtClass managedCtClass, CtField persistentField, AttributeTypeDescriptor typeDescriptor) { String fieldName = persistentField.getName(); String readerName = EnhancerConstants.PERSISTENT_FIELD_READER_PREFIX + fieldName; return MethodWriter.addGetter( managedCtClass, fieldName, readerName ); }
@Override protected CtMethod generateFieldWriter( CtClass managedCtClass, CtField persistentField, AttributeTypeDescriptor typeDescriptor) { String fieldName = persistentField.getName(); String writerName = EnhancerConstants.PERSISTENT_FIELD_WRITER_PREFIX + fieldName; return MethodWriter.addSetter( managedCtClass, fieldName, writerName ); }
final int methodIndex = MethodWriter.addMethod( constPool, attributeMethods.getReader() ); itr.writeByte( Opcode.INVOKEVIRTUAL, index ); itr.write16bit( methodIndex, index + 1 ); final int methodIndex = MethodWriter.addMethod( constPool, attributeMethods.getWriter() ); itr.writeByte( Opcode.INVOKEVIRTUAL, index ); itr.write16bit( methodIndex, index + 1 );
tmpSuperReader = MethodWriter.addGetter( persistentField.getDeclaringClass(), persistentField.getName(), readerName ); tmpSuperWriter = MethodWriter.addSetter( persistentField.getDeclaringClass(), persistentField.getName(), writerName ); reader = MethodWriter.write( managedCtClass, "public %s %s() { return %s;%n}", persistentField.getType().getName(), reader = MethodWriter.write( managedCtClass, "public %s %s() {%n%s%n return %s;%n}", persistentField.getType().getName(),
private void createDirtyTrackerMethodsWithoutCollections(CtClass managedCtClass) { try { MethodWriter.write( managedCtClass, "public void %1$s(String name) {%n" + ); MethodWriter.write( managedCtClass, "public String[] %1$s() {%n" + ); MethodWriter.write( managedCtClass, "public boolean %1$s() {%n" + MethodWriter.write( managedCtClass, "public void %1$s() {%n" + MethodWriter.write( managedCtClass, "public void %1$s(boolean f) {%n" + MethodWriter.write( managedCtClass, "public %s %s() { return %s.INSTANCE; }",
tmpSuperReader = MethodWriter.addGetter( persistentField.getDeclaringClass(), persistentField.getName(), readerName ); tmpSuperWriter = MethodWriter.addSetter( persistentField.getDeclaringClass(), persistentField.getName(), writerName ); writer = MethodWriter.write( managedCtClass, "public void %s(%s %s) {%n %s%n}", writer = MethodWriter.write( managedCtClass, "public void %s(%s %s) {%n%s%n}",
/** * 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 addEntityInstanceHandling(CtClass managedCtClass) { try { MethodWriter.write( managedCtClass, "public Object %s() { return this; }", EnhancerConstants.ENTITY_INSTANCE_GETTER_NAME ); } catch (CannotCompileException cce) { throw new EnhancementException( String.format( Locale.ROOT, "Could not enhance entity class [%s] to add EntityEntry getter", managedCtClass.getName() ), cce ); } }
private void createDirtyTrackerMethodsWithCollections(CtClass managedCtClass) { try { MethodWriter.write( managedCtClass, "public void %1$s(String name) {%n" + createClearDirtyCollectionMethod( managedCtClass ); MethodWriter.write( managedCtClass, "public String[] %1$s() {%n" + ); MethodWriter.write( managedCtClass, "public boolean %1$s() {%n" + MethodWriter.write( managedCtClass, "public void %1$s() {%n" + MethodWriter.write( managedCtClass, "public void %1$s(boolean f) {%n" + MethodWriter.write( managedCtClass, "public %s %s() { return %s; }",
private void createCollectionDirtyCheckMethod(CtClass managedCtClass) { try { final StringBuilder body = new StringBuilder(); body.append( String.format( "private boolean %1$s() {%n" + " if (%2$s == null) { return false; }%n%n", EnhancerConstants.TRACKER_COLLECTION_CHANGED_NAME, EnhancerConstants.TRACKER_COLLECTION_NAME ) ); for ( CtField ctField : collectCollectionFields( managedCtClass ) ) { body.append( String.format( " // collection field [%1$s]%n" + " if (%1$s == null && %2$s.getSize(\"%1$s\") != -1) { return true; }%n" + " if (%1$s != null && %2$s.getSize(\"%1$s\") != %1$s.size()) { return true; }%n%n", ctField.getName(), EnhancerConstants.TRACKER_COLLECTION_NAME ) ); } body.append( " return false;%n}" ); MethodWriter.write( managedCtClass, body.toString() ); } catch (CannotCompileException cce) { throw new RuntimeException( "createCollectionDirtyCheckMethod failed", cce ); } }
private void createCollectionDirtyCheckGetFieldsMethod(CtClass managedCtClass) { try { final StringBuilder body = new StringBuilder(); body.append( String.format( "private void %1$s(%3$s tracker) {%n" + " if (%2$s == null) { return; }%n%n", EnhancerConstants.TRACKER_COLLECTION_CHANGED_FIELD_NAME, EnhancerConstants.TRACKER_COLLECTION_NAME, DirtyTracker.class.getName() ) ); for ( CtField ctField : collectCollectionFields( managedCtClass ) ) { body.append( String.format( " // Collection field [%1$s]%n" + " if (%1$s == null && %2$s.getSize(\"%1$s\") != -1) { tracker.add(\"%1$s\"); }%n" + " if (%1$s != null && %2$s.getSize(\"%1$s\") != %1$s.size()) { tracker.add(\"%1$s\"); }%n%n", ctField.getName(), EnhancerConstants.TRACKER_COLLECTION_NAME ) ); } body.append( "}" ); MethodWriter.write( managedCtClass, body.toString() ); } catch (CannotCompileException cce) { throw new RuntimeException( "createCollectionDirtyCheckGetFieldsMethod failed", cce ); } }