summaryrefslogtreecommitdiff
path: root/python/helpers/pydev/_pydev_jy_imports_tipper.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/helpers/pydev/_pydev_jy_imports_tipper.py')
-rw-r--r--python/helpers/pydev/_pydev_jy_imports_tipper.py170
1 files changed, 86 insertions, 84 deletions
diff --git a/python/helpers/pydev/_pydev_jy_imports_tipper.py b/python/helpers/pydev/_pydev_jy_imports_tipper.py
index 43e4d0b67140..1691e3e1f1dc 100644
--- a/python/helpers/pydev/_pydev_jy_imports_tipper.py
+++ b/python/helpers/pydev/_pydev_jy_imports_tipper.py
@@ -1,7 +1,5 @@
import StringIO
import traceback
-from java.lang import StringBuffer #@UnresolvedImport
-from java.lang import String #@UnresolvedImport
import java.lang #@UnresolvedImport
import sys
from _pydev_tipper_common import DoFind
@@ -14,12 +12,16 @@ except NameError: # version < 2.3 -- didn't have the True/False builtins
import __builtin__
setattr(__builtin__, 'True', 1)
setattr(__builtin__, 'False', 0)
-
-
+
+
from org.python.core import PyReflectedFunction #@UnresolvedImport
from org.python import core #@UnresolvedImport
-from org.python.core import PyClass #@UnresolvedImport
+
+try:
+ xrange
+except:
+ xrange = range
#completion types.
@@ -48,11 +50,11 @@ def Find(name):
name = 'org.python.core.PyString'
elif name == '__builtin__.dict':
name = 'org.python.core.PyDictionary'
-
+
mod = _imp(name)
parent = mod
foundAs = ''
-
+
if hasattr(mod, '__file__'):
f = mod.__file__
@@ -68,29 +70,29 @@ def Find(name):
except AttributeError:
if old_comp != comp:
raise
-
+
if hasattr(mod, '__file__'):
f = mod.__file__
else:
if len(foundAs) > 0:
foundAs = foundAs + '.'
foundAs = foundAs + comp
-
+
old_comp = comp
-
+
return f, mod, parent, foundAs
def formatParamClassName(paramClassName):
if paramClassName.startswith('['):
if paramClassName == '[C':
paramClassName = 'char[]'
-
+
elif paramClassName == '[B':
paramClassName = 'byte[]'
-
+
elif paramClassName == '[I':
paramClassName = 'int[]'
-
+
elif paramClassName.startswith('[L') and paramClassName.endswith(';'):
paramClassName = paramClassName[2:-1]
paramClassName += '[]'
@@ -101,17 +103,17 @@ def GenerateTip(data, log=None):
data = data.replace('\n', '')
if data.endswith('.'):
data = data.rstrip('.')
-
+
f, mod, parent, foundAs = Find(data)
tips = GenerateImportsTipForModule(mod)
return f, tips
-
+
#=======================================================================================================================
# Info
#=======================================================================================================================
class Info:
-
+
def __init__(self, name, **kwargs):
self.name = name
self.doc = kwargs.get('doc', None)
@@ -119,47 +121,47 @@ class Info:
self.varargs = kwargs.get('varargs', None) #string
self.kwargs = kwargs.get('kwargs', None) #string
self.ret = kwargs.get('ret', None) #string
-
+
def basicAsStr(self):
'''@returns this class information as a string (just basic format)
'''
-
+
s = 'function:%s args=%s, varargs=%s, kwargs=%s, docs:%s' % \
(str(self.name), str(self.args), str(self.varargs), str(self.kwargs), str(self.doc))
return s
-
+
def getAsDoc(self):
s = str(self.name)
if self.doc:
s += '\n@doc %s\n' % str(self.doc)
-
+
if self.args:
s += '\n@params '
for arg in self.args:
s += str(formatParamClassName(arg))
s += ' '
-
+
if self.varargs:
s += '\n@varargs '
s += str(self.varargs)
-
+
if self.kwargs:
s += '\n@kwargs '
s += str(self.kwargs)
-
+
if self.ret:
s += '\n@return '
s += str(formatParamClassName(str(self.ret)))
-
+
return str(s)
-
+
def isclass(cls):
return isinstance(cls, core.PyClass)
def ismethod(func):
'''this function should return the information gathered on a function
-
+
@param func: this is the function we want to get info on
@return a tuple where:
0 = indicates whether the parameter passed is a method or not
@@ -167,24 +169,24 @@ def ismethod(func):
this is a list because when we have methods from java with the same name and different signatures,
we actually have many methods, each with its own set of arguments
'''
-
+
try:
if isinstance(func, core.PyFunction):
#ok, this is from python, created by jython
#print_ ' PyFunction'
-
+
def getargs(func_code):
"""Get information about the arguments accepted by a code object.
-
+
Three things are returned: (args, varargs, varkw), where 'args' is
a list of argument names (possibly containing nested lists), and
'varargs' and 'varkw' are the names of the * and ** arguments or None."""
-
+
nargs = func_code.co_argcount
names = func_code.co_varnames
args = list(names[:nargs])
step = 0
-
+
varargs = None
if func_code.co_flags & func_code.CO_VARARGS:
varargs = func_code.co_varnames[nargs]
@@ -193,35 +195,35 @@ def ismethod(func):
if func_code.co_flags & func_code.CO_VARKEYWORDS:
varkw = func_code.co_varnames[nargs]
return args, varargs, varkw
-
+
args = getargs(func.func_code)
return 1, [Info(func.func_name, args=args[0], varargs=args[1], kwargs=args[2], doc=func.func_doc)]
-
+
if isinstance(func, core.PyMethod):
#this is something from java itself, and jython just wrapped it...
-
+
#things to play in func:
#['__call__', '__class__', '__cmp__', '__delattr__', '__dir__', '__doc__', '__findattr__', '__name__', '_doget', 'im_class',
#'im_func', 'im_self', 'toString']
#print_ ' PyMethod'
#that's the PyReflectedFunction... keep going to get it
func = func.im_func
-
+
if isinstance(func, PyReflectedFunction):
#this is something from java itself, and jython just wrapped it...
-
+
#print_ ' PyReflectedFunction'
-
+
infos = []
- for i in range(len(func.argslist)):
+ for i in xrange(len(func.argslist)):
#things to play in func.argslist[i]:
-
+
#'PyArgsCall', 'PyArgsKeywordsCall', 'REPLACE', 'StandardCall', 'args', 'compare', 'compareTo', 'data', 'declaringClass'
#'flags', 'isStatic', 'matches', 'precedence']
-
+
#print_ ' ', func.argslist[i].data.__class__
#func.argslist[i].data.__class__ == java.lang.reflect.Method
-
+
if func.argslist[i]:
met = func.argslist[i].data
name = met.getName()
@@ -230,9 +232,9 @@ def ismethod(func):
except AttributeError:
ret = ''
parameterTypes = met.getParameterTypes()
-
+
args = []
- for j in range(len(parameterTypes)):
+ for j in xrange(len(parameterTypes)):
paramTypesClass = parameterTypes[j]
try:
try:
@@ -246,7 +248,7 @@ def ismethod(func):
except:
paramClassName = repr(paramTypesClass) #just in case something else happens... it will at least be visible
#if the parameter equals [C, it means it it a char array, so, let's change it
-
+
a = formatParamClassName(paramClassName)
#a = a.replace('[]','Array')
#a = a.replace('Object', 'obj')
@@ -255,18 +257,18 @@ def ismethod(func):
#a = a.replace('Char', 'c')
#a = a.replace('Double', 'd')
args.append(a) #so we don't leave invalid code
-
-
+
+
info = Info(name, args=args, ret=ret)
#print_ info.basicAsStr()
infos.append(info)
-
+
return 1, infos
- except Exception, e:
+ except Exception:
s = StringIO.StringIO()
traceback.print_exc(file=s)
return 1, [Info(str('ERROR'), doc=s.getvalue())]
-
+
return 0, None
def ismodule(mod):
@@ -274,7 +276,7 @@ def ismodule(mod):
if not hasattr(mod, 'getClass') and not hasattr(mod, '__class__') \
and hasattr(mod, '__name__'):
return 1
-
+
return isinstance(mod, core.PyModule)
@@ -293,11 +295,11 @@ def dirObj(obj):
except TypeError:
#may happen on jython when getting the java.lang.Class class
c = obj.getSuperclass(obj)
-
+
while c != None:
classes.append(c)
c = c.getSuperclass()
-
+
#get info about interfaces
interfs = []
for obj in classes:
@@ -306,57 +308,57 @@ def dirObj(obj):
except TypeError:
interfs.extend(obj.getInterfaces(obj))
classes.extend(interfs)
-
+
#now is the time when we actually get info on the declared methods and fields
for obj in classes:
try:
declaredMethods = obj.getDeclaredMethods()
except TypeError:
declaredMethods = obj.getDeclaredMethods(obj)
-
+
try:
declaredFields = obj.getDeclaredFields()
except TypeError:
declaredFields = obj.getDeclaredFields(obj)
-
- for i in range(len(declaredMethods)):
+
+ for i in xrange(len(declaredMethods)):
name = declaredMethods[i].getName()
ret.append(name)
found.put(name, 1)
-
- for i in range(len(declaredFields)):
+
+ for i in xrange(len(declaredFields)):
name = declaredFields[i].getName()
ret.append(name)
found.put(name, 1)
-
-
- elif isclass(obj.__class__):
+
+
+ elif isclass(obj.__class__):
d = dir(obj.__class__)
for name in d:
ret.append(name)
found.put(name, 1)
-
+
#this simple dir does not always get all the info, that's why we have the part before
- #(e.g.: if we do a dir on String, some methods that are from other interfaces such as
+ #(e.g.: if we do a dir on String, some methods that are from other interfaces such as
#charAt don't appear)
d = dir(original)
for name in d:
if found.get(name) != 1:
ret.append(name)
-
+
return ret
def formatArg(arg):
'''formats an argument to be shown
'''
-
+
s = str(arg)
dot = s.rfind('.')
if dot >= 0:
s = s[dot + 1:]
-
+
s = s.replace(';', '')
s = s.replace('[]', 'Array')
if len(s) > 0:
@@ -364,13 +366,13 @@ def formatArg(arg):
s = c + s[1:]
return s
-
-
-
+
+
+
def Search(data):
'''@return file, line, col
'''
-
+
data = data.replace('\n', '')
if data.endswith('.'):
data = data.rstrip('.')
@@ -379,8 +381,8 @@ def Search(data):
return DoFind(f, mod), foundAs
except:
return DoFind(f, parent), foundAs
-
-
+
+
def GenerateImportsTipForModule(obj_to_complete, dirComps=None, getattr=getattr, filter=lambda name:True):
'''
@param obj_to_complete: the object from where we should get the completions
@@ -391,18 +393,18 @@ def GenerateImportsTipForModule(obj_to_complete, dirComps=None, getattr=getattr,
name, doc, args, type (from the TYPE_* constants)
'''
ret = []
-
+
if dirComps is None:
dirComps = dirObj(obj_to_complete)
-
+
for d in dirComps:
if d is None:
continue
-
+
if not filter(d):
continue
-
+
args = ''
doc = ''
retType = TYPE_BUILTIN
@@ -421,7 +423,7 @@ def GenerateImportsTipForModule(obj_to_complete, dirComps=None, getattr=getattr,
#note: this only happens when we add things to the sys.path at runtime, if they are added to the classpath
#before the run, everything goes fine.
#
- #The code below ilustrates what I mean...
+ #The code below ilustrates what I mean...
#
#import sys
#sys.path.insert(1, r"C:\bin\eclipse310\plugins\org.junit_3.8.1\junit.jar" )
@@ -429,7 +431,7 @@ def GenerateImportsTipForModule(obj_to_complete, dirComps=None, getattr=getattr,
#import junit.framework
#print_ dir(junit.framework) #shows the TestCase class here
#
- #import junit.framework.TestCase
+ #import junit.framework.TestCase
#
#raises the error:
#Traceback (innermost last):
@@ -458,19 +460,19 @@ def GenerateImportsTipForModule(obj_to_complete, dirComps=None, getattr=getattr,
except TypeError:
traceback.print_exc()
args = '()'
-
+
retType = TYPE_FUNCTION
-
+
elif isclass(obj):
retType = TYPE_CLASS
-
+
elif ismodule(obj):
retType = TYPE_IMPORT
-
+
#add token and doc to return - assure only strings.
ret.append((d, doc, args, retType))
-
-
+
+
return ret