diff --git a/jnius/jnius_export_class.pxi b/jnius/jnius_export_class.pxi index 1f00ec2c..c7b9bdc6 100644 --- a/jnius/jnius_export_class.pxi +++ b/jnius/jnius_export_class.pxi @@ -28,7 +28,7 @@ cdef dict jclass_register = {} class MetaJavaClass(type): def __new__(meta, classname, bases, classDict): - meta.resolve_class(classDict) + meta.resolve_class(classDict, bases) tp = type.__new__(meta, classname, bases, classDict) jclass_register[classDict['__javaclass__']] = tp return tp @@ -38,10 +38,20 @@ class MetaJavaClass(type): return jclass_register.get(name) @classmethod - def resolve_class(meta, classDict): + def resolve_class(meta, classDict, bases): + def find_javaclass(bases): + import inspect + for b in bases: + if hasattr(b, '__javaclass__'): + return b.__javaclass__ + # search the Java class, and bind to our object if not '__javaclass__' in classDict: - raise JavaException('__javaclass__ definition missing') + # try base classes. This allows inheriting from Java classes. + cls = find_javaclass(bases) + if cls is None: + raise JavaException('__javaclass__ definition missing') + classDict['__javaclass__'] = cls cdef JavaClassStorage jcs = JavaClassStorage() cdef bytes __javaclass__ = classDict['__javaclass__']