Skip to content

Commit 871214a

Browse files
committed
Don't extend PyReflectedField in PyBeanEventProperty. Fixes Issue1377 by keeping PyJavaType from accessing field spuriously on PyBeanEventProperties.
1 parent 7c13dd9 commit 871214a

File tree

4 files changed

+13
-3
lines changed

4 files changed

+13
-3
lines changed

src/org/python/core/PyBeanEventProperty.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import org.python.util.Generic;
1111

12-
public class PyBeanEventProperty extends PyReflectedField {
12+
public class PyBeanEventProperty extends PyObject {
1313

1414
private static Map<String, Class<?>> adapterClasses = Generic.map();
1515

@@ -38,6 +38,7 @@ public PyBeanEventProperty(String eventName,
3838
this.eventClass = eventClass;
3939
}
4040

41+
@Override
4142
public PyObject _doget(PyObject self) {
4243
if (self == null) {
4344
return this;
@@ -65,6 +66,7 @@ public PyObject _doget(PyObject self) {
6566
return func;
6667
}
6768

69+
@Override
6870
public boolean _doset(PyObject self, PyObject value) {
6971
Object jself = Py.tojava(self, addMethod.getDeclaringClass());
7072
if (!(value instanceof PyCompoundCallable)) {
@@ -77,6 +79,7 @@ public boolean _doset(PyObject self, PyObject value) {
7779
return true;
7880
}
7981

82+
@Override
8083
public String toString() {
8184
return "<beanEventProperty " + __name__ + " for event " + eventClass.toString() + " "
8285
+ Py.idstr(this) + ">";

src/org/python/core/PyBeanProperty.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public PyBeanProperty(String name, Class<?> myType, Method getMethod, Method set
1414
this.myType = myType;
1515
}
1616

17+
@Override
1718
public PyObject _doget(PyObject self) {
1819
if (self == null) {
1920
if (field != null) {
@@ -36,6 +37,7 @@ public PyObject _doget(PyObject self) {
3637
}
3738
}
3839

40+
@Override
3941
public boolean _doset(PyObject self, PyObject value) {
4042
if (self == null) {
4143
if (field != null) {
@@ -72,6 +74,7 @@ public PyBeanProperty copy() {
7274
return new PyBeanProperty(__name__, myType, getMethod, setMethod);
7375
}
7476

77+
@Override
7578
public String toString() {
7679
String typeName = "unknown";
7780
if (myType != null) {

src/org/python/core/PyJavaType.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ public PyJavaType() {
5656
super(TYPE == null ? fromClass(PyType.class) : TYPE);
5757
}
5858

59+
@Override
5960
protected boolean useMetatypeFirst(PyObject attr) {
60-
return !(attr instanceof PyReflectedField || attr instanceof PyReflectedFunction);
61+
return !(attr instanceof PyReflectedField || attr instanceof PyReflectedFunction ||
62+
attr instanceof PyBeanEventProperty);
6163
}
6264

6365
// Java types are ok with things being added and removed from their dicts as long as there isn't

src/org/python/core/PyReflectedField.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.lang.reflect.Field;
55
import java.lang.reflect.Modifier;
66

7-
87
public class PyReflectedField extends PyObject {
98
public Field field;
109

@@ -14,6 +13,7 @@ public PyReflectedField(Field field) {
1413
this.field = field;
1514
}
1615

16+
@Override
1717
public PyObject _doget(PyObject self) {
1818
Object iself = null;
1919
if (!Modifier.isStatic(field.getModifiers())) {
@@ -32,6 +32,7 @@ public PyObject _doget(PyObject self) {
3232
return Py.java2py(value);
3333
}
3434

35+
@Override
3536
public boolean _doset(PyObject self, PyObject value) {
3637
Object iself = null;
3738
if (!Modifier.isStatic(field.getModifiers())) {
@@ -51,6 +52,7 @@ public boolean _doset(PyObject self, PyObject value) {
5152
return true;
5253
}
5354

55+
@Override
5456
public String toString() {
5557
return "<reflected field "+field.toString()+" "+Py.idstr(this)+">";
5658
}

0 commit comments

Comments
 (0)