Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make iteasy to inherit from exported Java classes. #13

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions jnius/jnius_export_class.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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__ = <bytes>classDict['__javaclass__']
Expand Down