From: <fwi...@us...> - 2009-03-31 16:31:10
|
Revision: 6137 http://jython.svn.sourceforge.net/jython/?rev=6137&view=rev Author: fwierzbicki Date: 2009-03-31 16:31:06 +0000 (Tue, 31 Mar 2009) Log Message: ----------- Fix for http://bugs.jython.org/issue1295 Setting a write-only bean property causes a NPE. Modified Paths: -------------- trunk/jython/NEWS trunk/jython/src/org/python/core/PyJavaType.java Added Paths: ----------- trunk/jython/tests/java/org/python/tests/props/ trunk/jython/tests/java/org/python/tests/props/Readonly.java trunk/jython/tests/java/org/python/tests/props/ReadonlyTest.java Modified: trunk/jython/NEWS =================================================================== --- trunk/jython/NEWS 2009-03-31 15:14:19 UTC (rev 6136) +++ trunk/jython/NEWS 2009-03-31 16:31:06 UTC (rev 6137) @@ -2,6 +2,7 @@ Jython 2.5.0 rc 1 Bugs fixed (new numbering due to move to Roundup) + - [ 1295 ] Setting a write-only bean property causes a NPE - [ 1272 ] ASTList ClassCastException - [ 1261 ] jython -c "import sys; sys.exit(1)" not giving correct exit code. - [ 1215 ] extra spaces in import statement break importing Modified: trunk/jython/src/org/python/core/PyJavaType.java =================================================================== --- trunk/jython/src/org/python/core/PyJavaType.java 2009-03-31 15:14:19 UTC (rev 6136) +++ trunk/jython/src/org/python/core/PyJavaType.java 2009-03-31 16:31:06 UTC (rev 6137) @@ -304,6 +304,17 @@ prop.myType = meth.getReturnType(); } else { prop.setMethod = meth; + // Needed for readonly properties. Getter will be used instead + // if there is one. Only works if setX method has exactly one + // param, which is the only reasonable case. + // XXX: should we issue a warning if setX and getX have different + // types? + if (prop.myType == null) { + Class[] params = meth.getParameterTypes(); + if (params.length == 1) { + prop.myType = params[0]; + } + } } } } Added: trunk/jython/tests/java/org/python/tests/props/Readonly.java =================================================================== --- trunk/jython/tests/java/org/python/tests/props/Readonly.java (rev 0) +++ trunk/jython/tests/java/org/python/tests/props/Readonly.java 2009-03-31 16:31:06 UTC (rev 6137) @@ -0,0 +1,8 @@ +package org.python.tests.props; + +public class Readonly { + private String a; + public void setA(String a) { this.a = a; } + //public String getA() { return a; } +} + Added: trunk/jython/tests/java/org/python/tests/props/ReadonlyTest.java =================================================================== --- trunk/jython/tests/java/org/python/tests/props/ReadonlyTest.java (rev 0) +++ trunk/jython/tests/java/org/python/tests/props/ReadonlyTest.java 2009-03-31 16:31:06 UTC (rev 6137) @@ -0,0 +1,21 @@ +package org.python.tests.props; + +import junit.framework.TestCase; + +import org.python.core.PyStringMap; +import org.python.core.PySystemState; +import org.python.util.PythonInterpreter; + +public class ReadonlyTest extends TestCase { + + private PythonInterpreter interp; + + @Override + protected void setUp() throws Exception { + interp = new PythonInterpreter(new PyStringMap(), new PySystemState()); + } + + public void testReadonly() { + interp.exec("from org.python.tests.props import Readonly;Readonly().a = 'test'"); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |