diff --git a/accessors-smart/src/main/java/net/minidev/asm/Accessor.java b/accessors-smart/src/main/java/net/minidev/asm/Accessor.java index 7c0e45f7..464bd598 100644 --- a/accessors-smart/src/main/java/net/minidev/asm/Accessor.java +++ b/accessors-smart/src/main/java/net/minidev/asm/Accessor.java @@ -125,7 +125,7 @@ public boolean isReadable() { * @return true if the field can be write */ public boolean isWritable() { - return field != null || getter != null; + return field != null || setter != null; } /** diff --git a/accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java b/accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java new file mode 100644 index 00000000..315a7be9 --- /dev/null +++ b/accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java @@ -0,0 +1,30 @@ +package com.mindev.pojos; + +public class AccessorTestPojo { + + // Field with only setter method + private int writeOnlyField; + + // Field with only getter method + private int readOnlyField; + + // Field with both getter and setter methods + private int readAndWriteableField; + + public void setWriteOnlyField(int writeOnlyField) { + this.writeOnlyField = writeOnlyField; + } + + public int getReadOnlyField() { + return readOnlyField; + } + + public int getReadAndWriteableField() { + return readAndWriteableField; + } + + public void setReadAndWriteableField(int readAndWriteableField) { + this.readAndWriteableField = readAndWriteableField; + } + +} diff --git a/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java b/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java new file mode 100644 index 00000000..6d0c9d08 --- /dev/null +++ b/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java @@ -0,0 +1,106 @@ +package net.minidev.asm; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import org.junit.jupiter.api.Test; + +import com.mindev.pojos.AccessorTestPojo; + +public class AccessorTest { + + private static class AcceptAllFilter implements FieldFilter { + + @Override + public boolean canUse(Field field) { + return true; + } + + @Override + public boolean canUse(Field field, Method method) { + return true; + } + + @Override + public boolean canRead(Field field) { + return true; + } + + @Override + public boolean canWrite(Field field) { + return true; + } + + } + + private static class AcceptNoneFilter implements FieldFilter { + + @Override + public boolean canUse(Field field) { + return false; + } + + @Override + public boolean canUse(Field field, Method method) { + return false; + } + + @Override + public boolean canRead(Field field) { + return false; + } + + @Override + public boolean canWrite(Field field) { + return false; + } + + } + + @Test + public void testWriteOnlyField() throws NoSuchFieldException, SecurityException { + + Field writeOnlyField = AccessorTestPojo.class.getDeclaredField("writeOnlyField"); + Accessor accessor = new Accessor(AccessorTestPojo.class, writeOnlyField, new AcceptAllFilter()); + + assertTrue(accessor.isWritable()); + assertFalse(accessor.isReadable()); + + accessor = new Accessor(AccessorTestPojo.class, writeOnlyField, new AcceptNoneFilter()); + assertFalse(accessor.isWritable()); + assertFalse(accessor.isReadable()); + + } + + @Test + public void testReadOnlyField() throws NoSuchFieldException, SecurityException { + + Field readOnlyField = AccessorTestPojo.class.getDeclaredField("readOnlyField"); + Accessor accessor = new Accessor(AccessorTestPojo.class, readOnlyField, new AcceptAllFilter()); + + assertFalse(accessor.isWritable()); + assertTrue(accessor.isReadable()); + + accessor = new Accessor(AccessorTestPojo.class, readOnlyField, new AcceptNoneFilter()); + assertFalse(accessor.isWritable()); + assertFalse(accessor.isReadable()); + } + + @Test + public void testReadAndWriteableField() throws NoSuchFieldException, SecurityException { + + Field readAndWriteableField = AccessorTestPojo.class.getDeclaredField("readAndWriteableField"); + Accessor accessor = new Accessor(AccessorTestPojo.class, readAndWriteableField, new AcceptAllFilter()); + + assertTrue(accessor.isWritable()); + assertTrue(accessor.isReadable()); + + accessor = new Accessor(AccessorTestPojo.class, readAndWriteableField, new AcceptNoneFilter()); + assertFalse(accessor.isWritable()); + assertFalse(accessor.isReadable()); + } + +}