From: <pj...@us...> - 2009-10-14 03:19:45
|
Revision: 6855 http://jython.svn.sourceforge.net/jython/?rev=6855&view=rev Author: pjenvey Date: 2009-10-14 03:19:24 +0000 (Wed, 14 Oct 2009) Log Message: ----------- add support for specifying docstrings in ExposedType/ExposedGet annotations. exposed type.__doc__, which for the most part removes the need for PyObject.getDoc Modified Paths: -------------- trunk/jython/src/org/python/core/PyBuiltinCallable.java trunk/jython/src/org/python/core/PyDataDescr.java trunk/jython/src/org/python/core/PyFunction.java trunk/jython/src/org/python/core/PyMethod.java trunk/jython/src/org/python/core/PyMethodDescr.java trunk/jython/src/org/python/core/PyModule.java trunk/jython/src/org/python/core/PyObject.java trunk/jython/src/org/python/core/PyReflectedFunction.java trunk/jython/src/org/python/core/PyType.java trunk/jython/src/org/python/expose/BaseTypeBuilder.java trunk/jython/src/org/python/expose/ExposedGet.java trunk/jython/src/org/python/expose/ExposedType.java trunk/jython/src/org/python/expose/TypeBuilder.java trunk/jython/src/org/python/expose/generate/DescriptorExposer.java trunk/jython/src/org/python/expose/generate/DescriptorVisitor.java trunk/jython/src/org/python/expose/generate/ExposedFieldFinder.java trunk/jython/src/org/python/expose/generate/ExposedMethodFinder.java trunk/jython/src/org/python/expose/generate/ExposedTypeProcessor.java trunk/jython/src/org/python/expose/generate/ExposedTypeVisitor.java trunk/jython/src/org/python/expose/generate/TypeExposer.java trunk/jython/tests/java/org/python/expose/generate/ExposeMethodFinderTest.java trunk/jython/tests/java/org/python/expose/generate/ExposedTypeProcessorTest.java trunk/jython/tests/java/org/python/expose/generate/ExposedTypeVisitorTest.java trunk/jython/tests/java/org/python/expose/generate/SimpleExposed.java trunk/jython/tests/java/org/python/expose/generate/TypeExposerTest.java Modified: trunk/jython/src/org/python/core/PyBuiltinCallable.java =================================================================== --- trunk/jython/src/org/python/core/PyBuiltinCallable.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyBuiltinCallable.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -30,7 +30,7 @@ } @ExposedGet(name = "__doc__") - public String fastGetDoc() { + public String getDoc() { return doc; } Modified: trunk/jython/src/org/python/core/PyDataDescr.java =================================================================== --- trunk/jython/src/org/python/core/PyDataDescr.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyDataDescr.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -17,6 +17,8 @@ protected Class ofType; + private String doc; + /** * @param onType - * the type the descriptor belongs to @@ -25,8 +27,8 @@ * @param ofType - * the type returned by the descriptor */ - public PyDataDescr(PyType onType, String name, Class ofType) { - this(name, ofType); + public PyDataDescr(PyType onType, String name, Class ofType, String doc) { + this(name, ofType, doc); setType(onType); } @@ -39,9 +41,10 @@ * @param ofType - * the type returned by the descriptor */ - public PyDataDescr(String name, Class ofType) { + public PyDataDescr(String name, Class ofType, String doc) { this.name = name; this.ofType = ofType; + this.doc = doc; } /** @@ -116,6 +119,11 @@ return String.format("<attribute '%s' of '%s' objects>", name, dtype.fastGetName()); } + @ExposedGet(name = "__doc__") + public String getDoc() { + return doc; + } + /** * Return the name this descriptor is exposed as. * Modified: trunk/jython/src/org/python/core/PyFunction.java =================================================================== --- trunk/jython/src/org/python/core/PyFunction.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyFunction.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -284,11 +284,6 @@ } @Override - public PyObject getDoc() { - return __doc__; - } - - @Override public PyObject __get__(PyObject obj, PyObject type) { return function___get__(obj, type); } Modified: trunk/jython/src/org/python/core/PyMethod.java =================================================================== --- trunk/jython/src/org/python/core/PyMethod.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyMethod.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -285,9 +285,9 @@ return hashCode ^ im_func.hashCode(); } - @Override + @ExposedGet(name = "__doc__") public PyObject getDoc() { - return im_func.getDoc(); + return im_func.__getattr__("__doc__"); } @Override Modified: trunk/jython/src/org/python/core/PyMethodDescr.java =================================================================== --- trunk/jython/src/org/python/core/PyMethodDescr.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyMethodDescr.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -21,8 +21,8 @@ } @ExposedGet(name = "__doc__") - public String fastGetDoc() { - return meth.fastGetDoc(); + public String getDoc() { + return meth.getDoc(); } public int getMaxargs() { Modified: trunk/jython/src/org/python/core/PyModule.java =================================================================== --- trunk/jython/src/org/python/core/PyModule.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyModule.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -80,18 +80,6 @@ throw Py.TypeError("readonly attribute"); } - @ExposedGet(name = "__doc__") - public PyObject getDoc() { - PyObject dict = fastGetDict(); - if (dict != null) { - PyObject doc = dict.__finditem__("__doc__"); - if (doc != null) { - return doc; - } - } - return moduleDoc; - } - protected PyObject impAttr(String name) { PyObject path = __dict__.__finditem__("__path__"); PyObject pyName = __dict__.__finditem__("__name__"); Modified: trunk/jython/src/org/python/core/PyObject.java =================================================================== --- trunk/jython/src/org/python/core/PyObject.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyObject.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -111,19 +111,6 @@ return objtype; } - //XXX: needs doc - @ExposedGet(name = "__doc__") - public PyObject getDoc() { - PyObject d = fastGetDict(); - if (d != null) { - PyObject doc = d.__finditem__("__doc__"); - if(doc != null) { - return doc; - } - } - return Py.None; - } - /** * Dispatch __init__ behavior */ Modified: trunk/jython/src/org/python/core/PyReflectedFunction.java =================================================================== --- trunk/jython/src/org/python/core/PyReflectedFunction.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyReflectedFunction.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -53,11 +53,6 @@ container, wherefound); } - @Override - public PyObject getDoc() { - return __doc__; - } - private ReflectedArgs makeArgs(Method m) { return new ReflectedArgs(m, m.getParameterTypes(), Modified: trunk/jython/src/org/python/core/PyType.java =================================================================== --- trunk/jython/src/org/python/core/PyType.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/core/PyType.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -292,7 +292,8 @@ * Create the __dict__ descriptor. */ private void createDictSlot() { - dict.__setitem__("__dict__", new PyDataDescr(this, "__dict__", PyObject.class) { + String doc = "dictionary for instance variables (if defined)"; + dict.__setitem__("__dict__", new PyDataDescr(this, "__dict__", PyObject.class, doc) { @Override public Object invokeGet(PyObject obj) { return obj.getDict(); @@ -325,7 +326,8 @@ * Create the __weakref__ descriptor. */ private void createWeakrefSlot() { - dict.__setitem__("__weakref__", new PyDataDescr(this, "__weakref__", PyObject.class) { + String doc = "list of weak references to the object (if defined)"; + dict.__setitem__("__weakref__", new PyDataDescr(this, "__weakref__", PyObject.class, doc) { private static final String writeMsg = "attribute '%s' of '%s' objects is not writable"; @@ -484,6 +486,21 @@ TypeBuilder builder = classToBuilder.get(underlying_class); name = builder.getName(); dict = builder.getDict(this); + String doc = builder.getDoc(); + // XXX: Can't create a __doc__ str until the PyBaseString/PyString types are + // created + if (dict.__finditem__("__doc__") == null && forClass != PyBaseString.class + && forClass != PyString.class) { + PyObject docObj; + if (doc != null) { + docObj = new PyString(doc); + } else { + // XXX: Hack: Py.None may be null during bootstrapping. Most types + // encountered then should have docstrings anyway + docObj = Py.None == null ? new PyString() : Py.None; + } + dict.__setitem__("__doc__", docObj); + } setIsBaseType(builder.getIsBaseType()); instantiable = dict.__finditem__("__new__") != null; fillHasSetAndDelete(); @@ -1543,14 +1560,15 @@ } /** - * Equivalent of CPython's typeobject type_get_doc; handles __doc__ descriptors. + * Equivalent of CPython's typeobject.c::type_get_doc; handles __doc__ descriptors. */ + @ExposedGet(name = "__doc__") public PyObject getDoc() { - PyObject doc = super.getDoc(); - if (!builtin && doc != null && doc.getType().lookup("__get__") != null) { - return doc.__get__(null, this); + PyObject doc = dict.__finditem__("__doc__"); + if (doc == null) { + return Py.None; } - return doc; + return doc.__get__(null, this); } boolean getUsesObjectGetattribute() { Modified: trunk/jython/src/org/python/expose/BaseTypeBuilder.java =================================================================== --- trunk/jython/src/org/python/expose/BaseTypeBuilder.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/BaseTypeBuilder.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -24,16 +24,20 @@ private boolean isBaseType; + private String doc; + public BaseTypeBuilder(String name, Class<?> typeClass, Class<?> baseClass, boolean isBaseType, + String doc, PyBuiltinMethod[] meths, PyDataDescr[] descrs, PyNewWrapper newWrapper) { this.typeClass = typeClass; this.baseClass = baseClass; this.isBaseType = isBaseType; + this.doc = doc; this.name = name; this.descrs = descrs; this.meths = meths; @@ -72,4 +76,8 @@ public boolean getIsBaseType() { return isBaseType; } + + public String getDoc() { + return doc; + } } Modified: trunk/jython/src/org/python/expose/ExposedGet.java =================================================================== --- trunk/jython/src/org/python/expose/ExposedGet.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/ExposedGet.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -10,4 +10,9 @@ public @interface ExposedGet { String name() default ""; + + /** + * Returns the __doc__ String for this descriptor. + */ + String doc() default ""; } Modified: trunk/jython/src/org/python/expose/ExposedType.java =================================================================== --- trunk/jython/src/org/python/expose/ExposedType.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/ExposedType.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -31,4 +31,9 @@ * @return Whether this type allows subclassing. */ boolean isBaseType() default true; + + /** + * Returns the __doc__ String for this type. + */ + String doc() default ""; } Modified: trunk/jython/src/org/python/expose/TypeBuilder.java =================================================================== --- trunk/jython/src/org/python/expose/TypeBuilder.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/TypeBuilder.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -17,4 +17,6 @@ public Class getBase(); public boolean getIsBaseType(); + + public String getDoc(); } Modified: trunk/jython/src/org/python/expose/generate/DescriptorExposer.java =================================================================== --- trunk/jython/src/org/python/expose/generate/DescriptorExposer.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/DescriptorExposer.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -15,6 +15,8 @@ private String name; + private String doc; + private String getterMethodName, getterFieldName, setterMethodName, setterFieldName, deleterMethodName; @@ -36,6 +38,10 @@ } public void addMethodGetter(String methodName, String desc) { + addMethodGetter(methodName, desc, null); + } + + public void addMethodGetter(String methodName, String desc, String doc) { if(hasGetter()) { error("Descriptor can only have one getter"); } @@ -44,14 +50,20 @@ } setOfType(Type.getReturnType(desc)); getterMethodName = methodName; + this.doc = doc; } public void addFieldGetter(String fieldName, Type fieldType) { + addFieldGetter(fieldName, fieldType, null); + } + + public void addFieldGetter(String fieldName, Type fieldType, String doc) { if(hasGetter()) { error("Can only have one getter for a descriptor"); } setOfType(fieldType); getterFieldName = fieldName; + this.doc = doc; } public boolean hasGetter() { @@ -130,7 +142,12 @@ } else { mv.visitLdcInsn(ofType); } - superConstructor(STRING, CLASS); + if (doc == null) { + mv.visitInsn(ACONST_NULL); + } else { + mv.visitLdcInsn(doc); + } + superConstructor(STRING, CLASS, STRING); endConstructor(); } Modified: trunk/jython/src/org/python/expose/generate/DescriptorVisitor.java =================================================================== --- trunk/jython/src/org/python/expose/generate/DescriptorVisitor.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/DescriptorVisitor.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -4,14 +4,18 @@ private String val; + private String doc; + DescriptorVisitor(String defaultName) { val = defaultName; } @Override public void visit(String name, Object value) { - if(name.equals("name")) { + if (name.equals("name")) { val = (String)value; + } else if (name.equals("doc")) { + doc = (String)value; } else { super.visit(name, value); } @@ -19,8 +23,8 @@ @Override public void visitEnd() { - handleResult(val); + handleResult(val, doc); } - public abstract void handleResult(String name); -} \ No newline at end of file + public abstract void handleResult(String name, String doc); +} Modified: trunk/jython/src/org/python/expose/generate/ExposedFieldFinder.java =================================================================== --- trunk/jython/src/org/python/expose/generate/ExposedFieldFinder.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/ExposedFieldFinder.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -10,6 +10,8 @@ private FieldVisitor delegate; + private String doc; + public ExposedFieldFinder(String name, FieldVisitor delegate) { fieldName = name; this.delegate = delegate; @@ -20,15 +22,15 @@ return new DescriptorVisitor(fieldName) { @Override - public void handleResult(String name) { - exposeAsGet(name); + public void handleResult(String name, String doc) { + exposeAsGet(name, doc); } }; } else if(EXPOSED_SET.getDescriptor().equals(desc)) { return new DescriptorVisitor(fieldName) { @Override - public void handleResult(String name) { + public void handleResult(String name, String doc) { exposeAsSet(name); } }; @@ -37,7 +39,7 @@ } } - public abstract void exposeAsGet(String name); + public abstract void exposeAsGet(String name, String doc); public abstract void exposeAsSet(String name); Modified: trunk/jython/src/org/python/expose/generate/ExposedMethodFinder.java =================================================================== --- trunk/jython/src/org/python/expose/generate/ExposedMethodFinder.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/ExposedMethodFinder.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -63,7 +63,7 @@ */ public abstract void handleNewExposer(Exposer exposer); - public abstract void exposeAsGetDescriptor(String descName); + public abstract void exposeAsGetDescriptor(String descName, String doc); public abstract void exposeAsSetDescriptor(String descName); @@ -93,15 +93,15 @@ return new DescriptorVisitor(methodName) { @Override - public void handleResult(String name) { - exposeAsGetDescriptor(name); + public void handleResult(String name, String doc) { + exposeAsGetDescriptor(name, doc); } }; } else if(desc.equals(EXPOSED_SET.getDescriptor())) { return new DescriptorVisitor(methodName) { @Override - public void handleResult(String name) { + public void handleResult(String name, String doc) { exposeAsSetDescriptor(name); } }; @@ -109,7 +109,7 @@ return new DescriptorVisitor(methodName) { @Override - public void handleResult(String name) { + public void handleResult(String name, String doc) { exposeAsDeleteDescriptor(name); } }; Modified: trunk/jython/src/org/python/expose/generate/ExposedTypeProcessor.java =================================================================== --- trunk/jython/src/org/python/expose/generate/ExposedTypeProcessor.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/ExposedTypeProcessor.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -111,6 +111,8 @@ private boolean isBaseType = true; + private String doc; + private boolean generatedStaticBlock; private TypeProcessor(ClassVisitor cv) { @@ -135,18 +137,13 @@ return new ExposedTypeVisitor(onType, visitor) { @Override - public void handleResult(String name) { - typeName = name; + public void handleResult(String typeName, Type baseType, boolean isBaseType, + String doc) { + ExposedTypeProcessor.this.typeName = typeName; + TypeProcessor.this.baseType = baseType; + TypeProcessor.this.isBaseType = isBaseType; + TypeProcessor.this.doc = doc; } - - @Override - public void handleResult(Type base) { - baseType = base; - } - - public void handleResult(boolean boolIsBaseType) { - isBaseType = boolIsBaseType; - } }; } return visitor; @@ -166,6 +163,7 @@ typeExposer = new TypeExposer(onType, baseType, isBaseType, + doc, getName(), methodExposers, descExposers.values(), @@ -266,8 +264,8 @@ } @Override - public void exposeAsGetDescriptor(String descName) { - getDescriptorExposer(descName).addMethodGetter(name, desc); + public void exposeAsGetDescriptor(String descName, String doc) { + getDescriptorExposer(descName).addMethodGetter(name, desc, doc); } @Override @@ -303,8 +301,8 @@ return new ExposedFieldFinder(fieldName, passthroughVisitor) { @Override - public void exposeAsGet(String name) { - getDescriptorExposer(name).addFieldGetter(fieldName, Type.getType(desc)); + public void exposeAsGet(String name, String doc) { + getDescriptorExposer(name).addFieldGetter(fieldName, Type.getType(desc), doc); } @Override Modified: trunk/jython/src/org/python/expose/generate/ExposedTypeVisitor.java =================================================================== --- trunk/jython/src/org/python/expose/generate/ExposedTypeVisitor.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/ExposedTypeVisitor.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -16,6 +16,8 @@ private boolean isBaseType = true; + private String doc; + private final AnnotationVisitor passthrough; public ExposedTypeVisitor(Type onType, AnnotationVisitor passthrough) { @@ -25,12 +27,14 @@ @Override public void visit(String name, Object value) { - if(name.equals("name")) { + if (name.equals("name")) { typeName = (String)value; - } else if(name.equals("base")) { + } else if (name.equals("base")) { base = (Type)value; - } else if(name.equals("isBaseType")) { + } else if (name.equals("isBaseType")) { isBaseType = (Boolean)value; + } else if (name.equals("doc")) { + doc = (String)value; } else { super.visit(name, value); } @@ -41,25 +45,21 @@ @Override public void visitEnd() { - if(typeName == null) { + if (typeName == null) { String name = onType.getClassName(); typeName = name.substring(name.lastIndexOf(".") + 1); } - handleResult(typeName); - handleResult(base); - handleResult(isBaseType); + handleResult(typeName, base, isBaseType, doc); if (passthrough != null) { passthrough.visitEnd(); } } - public abstract void handleResult(Type base); - - public abstract void handleResult(boolean isBaseType); - /** - * @param name - - * the name the type should be exposed as from the annotation. + * @param name the name the type should be exposed as from the annotation + * @param name the specified base type + * @param name the value of the isBaseType flag + * @param name the type's docstring */ - public abstract void handleResult(String name); + public abstract void handleResult(String name, Type base, boolean isBaseType, String doc); } Modified: trunk/jython/src/org/python/expose/generate/TypeExposer.java =================================================================== --- trunk/jython/src/org/python/expose/generate/TypeExposer.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/src/org/python/expose/generate/TypeExposer.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -20,6 +20,8 @@ private boolean isBaseType; + private String doc; + private Type onType; private String name; @@ -35,6 +37,7 @@ public TypeExposer(Type onType, Type baseType, boolean isBaseType, + String doc, String name, Collection<MethodExposer> methods, Collection<DescriptorExposer> descriptors, @@ -42,6 +45,7 @@ super(BaseTypeBuilder.class, makeGeneratedName(onType)); this.baseType = baseType; this.isBaseType = isBaseType; + this.doc = doc; this.onType = onType; this.name = name; this.methods = methods; @@ -106,6 +110,11 @@ mv.visitLdcInsn(onType); mv.visitLdcInsn(baseType); mv.visitLdcInsn(isBaseType); + if (doc == null) { + mv.visitInsn(ACONST_NULL); + } else { + mv.visitLdcInsn(doc); + } mv.visitLdcInsn(numNames); mv.visitTypeInsn(ANEWARRAY, BUILTIN_METHOD.getInternalName()); mv.visitVarInsn(ASTORE, 1); @@ -140,7 +149,7 @@ } else { mv.visitInsn(ACONST_NULL); } - superConstructor(STRING, CLASS, CLASS, BOOLEAN, ABUILTIN_METHOD, ADATA_DESCR, + superConstructor(STRING, CLASS, CLASS, BOOLEAN, STRING, ABUILTIN_METHOD, ADATA_DESCR, PYNEWWRAPPER); endConstructor(); } Modified: trunk/jython/tests/java/org/python/expose/generate/ExposeMethodFinderTest.java =================================================================== --- trunk/jython/tests/java/org/python/expose/generate/ExposeMethodFinderTest.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/tests/java/org/python/expose/generate/ExposeMethodFinderTest.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -36,7 +36,7 @@ } @Override - public void exposeAsGetDescriptor(String descName) { + public void exposeAsGetDescriptor(String descName, String doc) { getName = descName; } Modified: trunk/jython/tests/java/org/python/expose/generate/ExposedTypeProcessorTest.java =================================================================== --- trunk/jython/tests/java/org/python/expose/generate/ExposedTypeProcessorTest.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/tests/java/org/python/expose/generate/ExposedTypeProcessorTest.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -7,6 +7,7 @@ import org.python.core.PyBuiltinCallable; import org.python.core.PyDataDescr; import org.python.core.PyObject; +import org.python.core.PyString; import org.python.core.PyType; public class ExposedTypeProcessorTest extends InterpTestCase { @@ -42,6 +43,7 @@ desc.setType(simp.getType()); assertEquals(doctoredSimple.getField("toStringVal").get(simp), desc.__get__(simp, PyType.fromClass(doctoredSimple)).toString()); + assertEquals(desc.__getattr__("__doc__"), new PyString("tostring docs")); } public void testNoAnnotationType() throws IOException { Modified: trunk/jython/tests/java/org/python/expose/generate/ExposedTypeVisitorTest.java =================================================================== --- trunk/jython/tests/java/org/python/expose/generate/ExposedTypeVisitorTest.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/tests/java/org/python/expose/generate/ExposedTypeVisitorTest.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -12,18 +12,11 @@ etv = new ExposedTypeVisitor(Type.getType("Lsimpletype;"), null) { @Override - public void handleResult(String name) { + public void handleResult(String name, Type base, boolean isBaseType, String doc) { result = name; - } - - @Override - public void handleResult(Type base) { baseResult = base; - } - - @Override - public void handleResult(boolean isBaseType) { isBaseTypeResult = isBaseType; + docResult = doc; } }; } @@ -38,10 +31,12 @@ etv.visit("name", "different"); etv.visit("base", Type.getType(PyObject.class)); etv.visit("isBaseType", false); + etv.visit("doc", "Different docstring"); etv.visitEnd(); assertEquals("different", result); assertEquals(Type.getType(PyObject.class), baseResult); assertEquals(false, isBaseTypeResult); + assertEquals("Different docstring", docResult); } ExposedTypeVisitor etv; @@ -51,4 +46,6 @@ private Type baseResult; private boolean isBaseTypeResult; + + private String docResult; } Modified: trunk/jython/tests/java/org/python/expose/generate/SimpleExposed.java =================================================================== --- trunk/jython/tests/java/org/python/expose/generate/SimpleExposed.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/tests/java/org/python/expose/generate/SimpleExposed.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -4,7 +4,6 @@ import org.python.core.PyInteger; import org.python.core.PyNewWrapper; import org.python.core.PyObject; -import org.python.core.PyString; import org.python.core.PyType; import org.python.core.ThreadState; import org.python.expose.ExposedClassMethod; @@ -16,7 +15,7 @@ import org.python.expose.ExposedType; import org.python.expose.MethodType; -@ExposedType(name = "simpleexposed", isBaseType = false) +@ExposedType(name = "simpleexposed", isBaseType = false, doc = "Docstring") public class SimpleExposed extends PyObject { public void method() {} @@ -147,7 +146,7 @@ } } - @ExposedGet(name = "tostring") + @ExposedGet(name = "tostring", doc = "tostring docs") public String toStringVal = TO_STRING_RETURN; public static final String TO_STRING_RETURN = "A simple test class"; Modified: trunk/jython/tests/java/org/python/expose/generate/TypeExposerTest.java =================================================================== --- trunk/jython/tests/java/org/python/expose/generate/TypeExposerTest.java 2009-10-13 02:31:45 UTC (rev 6854) +++ trunk/jython/tests/java/org/python/expose/generate/TypeExposerTest.java 2009-10-14 03:19:24 UTC (rev 6855) @@ -22,6 +22,7 @@ assertEquals(false, t.getIsBaseType()); PyType type = PyType.fromClass(SimpleExposed.class); PyObject dict = t.getDict(type); + assertEquals(dict.__finditem__("__doc__"), Py.newString("Docstring")); assertNotNull(dict.__finditem__("simple_method")); assertNotNull(dict.__finditem__("prefixed")); assertNotNull(dict.__finditem__("__str__")); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |