Code :
# Introspection for Jython/Java # # Copyright 2008-2012 Automation Professionals, LLC <sales@automation-pros.com> # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY # OF SUCH DAMAGE. #------------ def introspect(obj): """Describe the methods and properties available in the given object, from both the jython perspective, and the java perspective.""" from java.lang import reflect print "Python Type: %s" % type(obj) c = obj.getClass() basetype = str(c) print "Java Type: %s" % basetype skips = [] for m in c.getMethods(): try: newtype = str(m.getDeclaringClass()) if newtype != basetype: basetype = newtype print print "From Type: %s" % basetype mods = [] if m.getModifiers() & reflect.Member.PUBLIC: mods.append('public') for a in m.getTypeParameters(): mods.append(str(a)) rt = str(m.getReturnType()) if len(rt)<30: mods.append(rt) mods.append(m.getName()) pt = [] for p in m.getParameterTypes(): pt.append(str(p)) skips.append(m.getName()) print " M: %s(%s)" % (" ".join(mods), ",".join(pt)) if len(rt)>=30: print " returns %s" % rt except Exception: pass for f in c.getFields(): try: newtype = str(f.getDeclaringClass()) if newtype != basetype: basetype = newtype print print "From Type: %s" % basetype anno = [] for a in f.getAnnotations(): anno.append(str(a)) anno.append(str(f.getType())) anno.append(f.getName()) skips.append(f.getName()) print " F: %s" % (" ".join(anno)) except Exception: pass print print "From python dir():" for x in dir(obj): if x not in skips: try: if callable(getattr(obj,x)): print " Method %s %s" % (x, type(getattr(obj,x))) else: print " Property %s %s" % (x, type(getattr(obj,x))) except: print " Unreadable %s" % x
Cet article a-t-il été utile ?
C'est super !
Merci pour votre commentaire
Désolé ! Nous n'avons pas pu vous être utile
Merci pour votre commentaire
Commentaires envoyés
Nous apprécions vos efforts et nous allons corriger l'article