diff --git a/src/mx/_impl/mx.py b/src/mx/_impl/mx.py index e8596ade..178c3b6e 100755 --- a/src/mx/_impl/mx.py +++ b/src/mx/_impl/mx.py @@ -18198,7 +18198,7 @@ def alarm_handler(signum, frame): _CACHE_DIR = get_env('MX_CACHE_DIR', join(dot_mx_dir(), 'cache')) # The version must be updated for every PR (checked in CI) and the comment should reflect the PR's issue -version = VersionSpec("7.29.1") # GR-57159: Parse underscores inside .toml identifiers. +version = VersionSpec("7.29.2") # GR-57114: service names in module info must use non-binary class names _mx_start_datetime = datetime.utcnow() diff --git a/src/mx/_impl/mx_javamodules.py b/src/mx/_impl/mx_javamodules.py index 34537407..dbee9867 100644 --- a/src/mx/_impl/mx_javamodules.py +++ b/src/mx/_impl/mx_javamodules.py @@ -512,6 +512,15 @@ def is_valid_module_name(name): _versioned_re = re.compile(r'META-INF/_?versions/([1-9][0-9]*)/(.+)') _javamodule_buildlevel = None +def _check_uses(uses, context): + """ + Checks that no class names in `uses` contain "$". + """ + for use in uses: + if "$" in use: + mx.abort(f"specification of service {use} must use non-binary name of nested class (i.e. replace '$' with '.')", context=context) + return uses + def make_java_module(dist, jdk, archive, javac_daemon=None, alt_module_info_name=None): """ Creates a Java module from a distribution. @@ -739,7 +748,8 @@ def replicate(src, dst): # override automatic qualifiers like transitive if they are explicitly specified in the module info # this allows to customize the default behavior. requires[name] = qualifiers - base_uses.update(module_info.get('uses', [])) + base_uses.update(_check_uses(module_info.get('uses', []), dist)) + _process_exports((alt_module_info or module_info).get('exports', []), module_packages) opens = module_info.get('opens', {}) @@ -755,7 +765,7 @@ def replicate(src, dst): with mx.Timer('projects', times): for project in java_projects: - base_uses.update(getattr(project, 'uses', [])) + base_uses.update(_check_uses(getattr(project, 'uses', []), project)) for m in getattr(project, 'runtimeDeps', []): requires.setdefault(m, set()).add('static')