1.1 --- a/javaclass/bytecode.py Mon Feb 21 00:17:48 2005 +0100
1.2 +++ b/javaclass/bytecode.py Mon Feb 21 00:17:51 2005 +0100
1.3 @@ -2298,14 +2298,13 @@
1.4
1.5 self.namespace[method_name] = fn
1.6
1.7 - # Add the super class as an external name, if appropriate.
1.8 -
1.9 - if self.class_file.super_class is not None:
1.10 - external_names.append(self.class_file.super_class.get_python_name())
1.11 + # Add the base classes as external names, if appropriate.
1.12 +
1.13 + external_names += [class_.get_python_name() for class_ in self.get_base_class_references()]
1.14
1.15 return external_names
1.16
1.17 - def get_class(self, global_names):
1.18 + def get_class(self, global_names, classes):
1.19
1.20 """
1.21 Get the Python class representing the underlying Java class, using the
1.22 @@ -2314,7 +2313,7 @@
1.23
1.24 # Define superclasses.
1.25
1.26 - bases = self.get_base_classes(global_names)
1.27 + bases = self.get_base_classes(classes)
1.28
1.29 # Define method dispatchers.
1.30
1.31 @@ -2338,33 +2337,27 @@
1.32 class_names += self.class_file.interfaces
1.33 return class_names
1.34
1.35 - def get_base_classes(self, global_names):
1.36 + def get_base_classes(self, classes):
1.37
1.38 """
1.39 - Identify the superclass, then either load it from the given
1.40 - 'global_names' if available, or import the class from its parent module.
1.41 - Return a tuple containing all base classes (typically a single element
1.42 - tuple).
1.43 + Identify the superclass, obtaining it from the given 'classes'
1.44 + dictionary. Return a tuple containing all base classes (usually a single
1.45 + element tuple).
1.46 """
1.47
1.48 base_classes = []
1.49
1.50 for class_ in self.get_base_class_references():
1.51 - base_classes.append(self._get_class(class_, global_names))
1.52 + base_classes.append(self._get_class(class_, classes))
1.53
1.54 return tuple(base_classes)
1.55
1.56 - def _get_class(self, class_, global_names):
1.57 - class_name = class_.get_python_name()
1.58 - class_name_parts = class_name.split(".")
1.59 - obj = global_names
1.60 - for class_name_part in class_name_parts[:-1]:
1.61 - try:
1.62 - obj = obj[class_name_part].__dict__
1.63 - except KeyError:
1.64 - raise AttributeError, "Cannot find '%s' when referencing Java class '%s'" % (
1.65 - class_name_part, class_name)
1.66 - return obj[class_name_parts[-1]]
1.67 + def _get_class(self, class_, classes):
1.68 + class_name = str(class_.get_name())
1.69 + try:
1.70 + return classes[class_name]
1.71 + except KeyError:
1.72 + raise AttributeError, "Cannot find Java class '%s'" % class_name
1.73
1.74 def make_varnames(self, nlocals, method_is_static=0):
1.75