Skip to content

Commit cb4843e

Browse files
committed
allow walking not-yet-classloaded java packages during import
1 parent 151c746 commit cb4843e

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

graalpython/lib-graalpython/java.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ def __getattr__(key, default=None):
6565
try:
6666
return type(modname + key)
6767
except KeyError:
68-
pass
68+
# allow walking through not-yet-classloaded packages
69+
return JavaPackageLoader._create_module(loadname)
6970
raise AttributeError(key)
7071
return __getattr__
7172
else:
@@ -132,12 +133,20 @@ class JavaImportFinder:
132133
def find_spec(fullname, path, target=None):
133134
if JavaPackageLoader.is_java_package(fullname):
134135
return _frozen_importlib.ModuleSpec(fullname, JavaPackageLoader, is_package=True)
136+
elif path == __path__:
137+
try:
138+
# do not rely on name conventions. check if it's a type,
139+
# otherwise treat it as a not-yet-classloaded package
140+
type(fullname)
141+
return _frozen_importlib.ModuleSpec(fullname, JavaTypeLoader, is_package=False)
142+
except KeyError:
143+
return _frozen_importlib.ModuleSpec(fullname, JavaPackageLoader, is_package=True)
135144
else:
136145
try:
137146
type(fullname)
138147
return _frozen_importlib.ModuleSpec(fullname, JavaTypeLoader, is_package=False)
139148
except KeyError:
140-
pass
149+
pass # when importing from the implicit top-level java module, we only allow types
141150
else:
142151
@staticmethod
143152
def find_spec(fullname, path, target=None):

0 commit comments

Comments
 (0)