1.1 --- a/tools/wrap.py Mon Jan 10 23:39:28 2005 +0100
1.2 +++ b/tools/wrap.py Mon Jan 10 23:41:59 2005 +0100
1.3 @@ -23,6 +23,7 @@
1.4 directory, package = sys.argv[1:3]
1.5 f = open(os.path.join(directory, "__init__.py"), "w")
1.6 f.write("import %s\n" % package)
1.7 + f.write("import java.lang\n")
1.8
1.9 # Process each class file.
1.10
1.11 @@ -36,15 +37,45 @@
1.12
1.13 full_name = c.this_class.get_python_name()
1.14 class_name = full_name.split(".")[-1]
1.15 - f.write("class %s(%s.%s, object):\n" % (class_name, package, class_name))
1.16 + f.write("class %s(%s.%s, java.lang.Object):\n" % (class_name, package, class_name))
1.17
1.18 # Process methods in the class, writing wrapper code.
1.19
1.20 method_names = []
1.21 for method in c.methods:
1.22 wrapped_method_name = method.get_unqualified_python_name()
1.23 - f.write(" def %s(*args):\n" % wrapped_method_name)
1.24 - f.write(" return %s.%s.%s(*args)\n" % (package, class_name, wrapped_method_name))
1.25 +
1.26 + # Find out more about the parameters, introducing special
1.27 + # conversions where appropriate.
1.28 +
1.29 + parameters = [("self", None)]
1.30 + parameter_index = 1
1.31 + for parameter in method.get_descriptor()[0]:
1.32 + base_type, object_type, array_type = parameter
1.33 + if object_type == "java/lang/String":
1.34 + parameters.append(("p" + str(parameter_index), "unicode"))
1.35 + else:
1.36 + parameters.append(("p" + str(parameter_index), None))
1.37 + parameter_index += 1
1.38 +
1.39 + # Write the signature.
1.40 +
1.41 + parameter_names = ", ".join([t[0] for t in parameters])
1.42 + f.write(" def %s(%s):\n" % (wrapped_method_name, parameter_names))
1.43 +
1.44 + # Write any conversions.
1.45 +
1.46 + for parameter_name, conversion in parameters:
1.47 + if conversion:
1.48 + f.write(" %s = %s(%s)\n" % (parameter_name, conversion, parameter_name))
1.49 +
1.50 + # Write the call to the wrapped method.
1.51 +
1.52 + f.write(" return %s.%s.%s(%s)\n" % (package, class_name, wrapped_method_name, parameter_names))
1.53 +
1.54 + # Record the correspondence between the Java-accessible and wrapped
1.55 + # method names.
1.56 +
1.57 method_name = method.get_python_name()
1.58 method_names.append((method_name, wrapped_method_name))
1.59