def ensureclass(clsname): if clsname in registers: return jniname = clsname.replace('.', '/') if MetaJavaClass.get_javaclass(jniname): return registers.append(clsname) autoclass(clsname)
def autoclass(clsname): jniname = clsname.replace('.', '/') cls = MetaJavaClass.get_javaclass(jniname) if cls: return cls classDict = {} #c = Class.forName(clsname) c = find_javaclass(clsname) if c is None: raise Exception('Java class {0} not found'.format(c)) return None constructors = [] for constructor in c.getConstructors(): sig = '({0})V'.format( ''.join([get_signature(x) for x in constructor.getParameterTypes()])) constructors.append(sig) classDict['__javaconstructor__'] = constructors methods = c.getMethods() methods_name = [x.getName() for x in methods] for index, method in enumerate(methods): name = methods_name[index] if name in classDict: continue count = methods_name.count(name) # only one method available if count == 1: static = Modifier.isStatic(method.getModifiers()) sig = '({0}){1}'.format( ''.join([get_signature(x) for x in method.getParameterTypes()]), get_signature(method.getReturnType())) cls = JavaStaticMethod if static else JavaMethod classDict[name] = cls(sig) continue # multpile signatures signatures = [] for index, subname in enumerate(methods_name): if subname != name: continue method = methods[index] sig = '({0}){1}'.format( ''.join([get_signature(x) for x in method.getParameterTypes()]), get_signature(method.getReturnType())) ''' print 'm', name, sig, method.getModifiers() m = method.getModifiers() print 'Public', Modifier.isPublic(m) print 'Private', Modifier.isPrivate(m) print 'Protected', Modifier.isProtected(m) print 'Static', Modifier.isStatic(m) print 'Final', Modifier.isFinal(m) print 'Synchronized', Modifier.isSynchronized(m) print 'Volatile', Modifier.isVolatile(m) print 'Transient', Modifier.isTransient(m) print 'Native', Modifier.isNative(m) print 'Interface', Modifier.isInterface(m) print 'Abstract', Modifier.isAbstract(m) print 'Strict', Modifier.isStrict(m) ''' signatures.append((sig, Modifier.isStatic(method.getModifiers()))) classDict[name] = JavaMultipleMethod(signatures) for field in c.getFields(): static = Modifier.isStatic(field.getModifiers()) sig = get_signature(field.getType()) cls = JavaStaticField if static else JavaField classDict[field.getName()] = cls(sig) classDict['__javaclass__'] = clsname.replace('.', '/') return MetaJavaClass.__new__(MetaJavaClass, clsname,#.replace('.', '_'), (JavaClass, ), classDict)
def autoclass(clsname): jniname = clsname.replace('.', '/') cls = MetaJavaClass.get_javaclass(jniname) if cls: return cls clsname = str(clsname) classDict = {} #c = Class.forName(clsname) c = find_javaclass(clsname) if c is None: raise Exception('Java class {0} not found'.format(c)) return None constructors = [] for constructor in c.getConstructors(): sig = '({0})V'.format(''.join( [get_signature(x) for x in constructor.getParameterTypes()])) constructors.append((sig, constructor.isVarArgs())) classDict['__javaconstructor__'] = constructors methods = c.getMethods() methods_name = [x.getName() for x in methods] for index, method in enumerate(methods): name = methods_name[index] if name in classDict: continue count = methods_name.count(name) # only one method available if count == 1: static = Modifier.isStatic(method.getModifiers()) varargs = method.isVarArgs() sig = '({0}){1}'.format( ''.join([get_signature(x) for x in method.getParameterTypes()]), get_signature(method.getReturnType())) cls = JavaStaticMethod if static else JavaMethod method = cls(sig, varargs=varargs) classDict[name] = method #if name == 'toString' and sig=='()Ljava/lang/String;': # classDict['__str__'] = method if name == 'iterator' and sig == '()Ljava/util/Iterator;': classDict['__iter__'] = iterator_wrapper(classDict[name]) continue # multpile signatures signatures = [] for index, subname in enumerate(methods_name): if subname != name: continue method = methods[index] sig = '({0}){1}'.format( ''.join([get_signature(x) for x in method.getParameterTypes()]), get_signature(method.getReturnType())) ''' print 'm', name, sig, method.getModifiers() m = method.getModifiers() print 'Public', Modifier.isPublic(m) print 'Private', Modifier.isPrivate(m) print 'Protected', Modifier.isProtected(m) print 'Static', Modifier.isStatic(m) print 'Final', Modifier.isFinal(m) print 'Synchronized', Modifier.isSynchronized(m) print 'Volatile', Modifier.isVolatile(m) print 'Transient', Modifier.isTransient(m) print 'Native', Modifier.isNative(m) print 'Interface', Modifier.isInterface(m) print 'Abstract', Modifier.isAbstract(m) print 'Strict', Modifier.isStrict(m) ''' signatures.append((sig, Modifier.isStatic(method.getModifiers()), method.isVarArgs())) classDict[name] = JavaMultipleMethod(signatures) for field in c.getFields(): static = Modifier.isStatic(field.getModifiers()) sig = get_signature(field.getType()) cls = JavaStaticField if static else JavaField classDict[field.getName()] = cls(sig) classDict['__javaclass__'] = clsname.replace('.', '/') return MetaJavaClass.__new__( MetaJavaClass, clsname, # .replace('.', '_'), (JavaClass, ), classDict)