Skip to content

Commit 0ac0212

Browse files
Fix isWritable method (#147)
* Fix isWritable method check for the setter property to verify whether the field is writeable or not * Add test cases * Add test cases
1 parent 87a9d5c commit 0ac0212

File tree

3 files changed

+137
-1
lines changed

3 files changed

+137
-1
lines changed

accessors-smart/src/main/java/net/minidev/asm/Accessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public boolean isReadable() {
125125
* @return true if the field can be write
126126
*/
127127
public boolean isWritable() {
128-
return field != null || getter != null;
128+
return field != null || setter != null;
129129
}
130130

131131
/**
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.mindev.pojos;
2+
3+
public class AccessorTestPojo {
4+
5+
// Field with only setter method
6+
private int writeOnlyField;
7+
8+
// Field with only getter method
9+
private int readOnlyField;
10+
11+
// Field with both getter and setter methods
12+
private int readAndWriteableField;
13+
14+
public void setWriteOnlyField(int writeOnlyField) {
15+
this.writeOnlyField = writeOnlyField;
16+
}
17+
18+
public int getReadOnlyField() {
19+
return readOnlyField;
20+
}
21+
22+
public int getReadAndWriteableField() {
23+
return readAndWriteableField;
24+
}
25+
26+
public void setReadAndWriteableField(int readAndWriteableField) {
27+
this.readAndWriteableField = readAndWriteableField;
28+
}
29+
30+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package net.minidev.asm;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.lang.reflect.Field;
7+
import java.lang.reflect.Method;
8+
9+
import org.junit.jupiter.api.Test;
10+
11+
import com.mindev.pojos.AccessorTestPojo;
12+
13+
public class AccessorTest {
14+
15+
private static class AcceptAllFilter implements FieldFilter {
16+
17+
@Override
18+
public boolean canUse(Field field) {
19+
return true;
20+
}
21+
22+
@Override
23+
public boolean canUse(Field field, Method method) {
24+
return true;
25+
}
26+
27+
@Override
28+
public boolean canRead(Field field) {
29+
return true;
30+
}
31+
32+
@Override
33+
public boolean canWrite(Field field) {
34+
return true;
35+
}
36+
37+
}
38+
39+
private static class AcceptNoneFilter implements FieldFilter {
40+
41+
@Override
42+
public boolean canUse(Field field) {
43+
return false;
44+
}
45+
46+
@Override
47+
public boolean canUse(Field field, Method method) {
48+
return false;
49+
}
50+
51+
@Override
52+
public boolean canRead(Field field) {
53+
return false;
54+
}
55+
56+
@Override
57+
public boolean canWrite(Field field) {
58+
return false;
59+
}
60+
61+
}
62+
63+
@Test
64+
public void testWriteOnlyField() throws NoSuchFieldException, SecurityException {
65+
66+
Field writeOnlyField = AccessorTestPojo.class.getDeclaredField("writeOnlyField");
67+
Accessor accessor = new Accessor(AccessorTestPojo.class, writeOnlyField, new AcceptAllFilter());
68+
69+
assertTrue(accessor.isWritable());
70+
assertFalse(accessor.isReadable());
71+
72+
accessor = new Accessor(AccessorTestPojo.class, writeOnlyField, new AcceptNoneFilter());
73+
assertFalse(accessor.isWritable());
74+
assertFalse(accessor.isReadable());
75+
76+
}
77+
78+
@Test
79+
public void testReadOnlyField() throws NoSuchFieldException, SecurityException {
80+
81+
Field readOnlyField = AccessorTestPojo.class.getDeclaredField("readOnlyField");
82+
Accessor accessor = new Accessor(AccessorTestPojo.class, readOnlyField, new AcceptAllFilter());
83+
84+
assertFalse(accessor.isWritable());
85+
assertTrue(accessor.isReadable());
86+
87+
accessor = new Accessor(AccessorTestPojo.class, readOnlyField, new AcceptNoneFilter());
88+
assertFalse(accessor.isWritable());
89+
assertFalse(accessor.isReadable());
90+
}
91+
92+
@Test
93+
public void testReadAndWriteableField() throws NoSuchFieldException, SecurityException {
94+
95+
Field readAndWriteableField = AccessorTestPojo.class.getDeclaredField("readAndWriteableField");
96+
Accessor accessor = new Accessor(AccessorTestPojo.class, readAndWriteableField, new AcceptAllFilter());
97+
98+
assertTrue(accessor.isWritable());
99+
assertTrue(accessor.isReadable());
100+
101+
accessor = new Accessor(AccessorTestPojo.class, readAndWriteableField, new AcceptNoneFilter());
102+
assertFalse(accessor.isWritable());
103+
assertFalse(accessor.isReadable());
104+
}
105+
106+
}

0 commit comments

Comments
 (0)