Skip to content

Commit e09cd51

Browse files
committed
[GR-31299] Allow OptionDescriptors to be versioned like any other service
1 parent 52f0f02 commit e09cd51

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

compiler/mx.compiler/mx_compiler.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,16 @@ def __opened__(self, arc, srcArc, services):
993993
self.arc = arc
994994

995995
def __add__(self, arcname, contents): # pylint: disable=unexpected-special-method-signature
996+
997+
def add_serviceprovider(service, provider, version):
998+
if version is None:
999+
# Non-versioned service
1000+
self.services.setdefault(service, []).append(provider)
1001+
else:
1002+
# Versioned service
1003+
services = self.services.setdefault(int(version), {})
1004+
services.setdefault(service, []).append(provider)
1005+
9961006
m = GraalArchiveParticipant.providersRE.match(arcname)
9971007
if m:
9981008
if self.isTest:
@@ -1005,23 +1015,25 @@ def __add__(self, arcname, contents): # pylint: disable=unexpected-special-metho
10051015
for service in _decode(contents).strip().split(os.linesep):
10061016
assert service
10071017
version = m.group(1)
1008-
if version is None:
1009-
# Non-versioned service
1010-
self.services.setdefault(service, []).append(provider)
1011-
else:
1012-
# Versioned service
1013-
services = self.services.setdefault(int(version), {})
1014-
services.setdefault(service, []).append(provider)
1018+
add_serviceprovider(service, provider, version)
10151019
return True
1016-
elif arcname.endswith('_OptionDescriptors.class') and not arcname.startswith('META-INF/'):
1020+
elif arcname.endswith('_OptionDescriptors.class'):
10171021
if self.isTest:
10181022
mx.warn('@Option defined in test code will be ignored: ' + arcname)
10191023
else:
10201024
# Need to create service files for the providers of the
10211025
# jdk.internal.vm.ci.options.Options service created by
10221026
# jdk.internal.vm.ci.options.processor.OptionProcessor.
1027+
version_prefix = 'META-INF/versions/'
1028+
if arcname.startswith(version_prefix):
1029+
# If OptionDescriptor is version-specific, get version
1030+
# from arcname and adjust arcname to non-version form
1031+
version, _, arcname = arcname[len(version_prefix):].partition('/')
1032+
else:
1033+
version = None
10231034
provider = arcname[:-len('.class'):].replace('/', '.')
1024-
self.services.setdefault('org.graalvm.compiler.options.OptionDescriptors', []).append(provider)
1035+
service = 'org.graalvm.compiler.options.OptionDescriptors'
1036+
add_serviceprovider(service, provider, version)
10251037
return False
10261038

10271039
def __addsrc__(self, arcname, contents):

0 commit comments

Comments
 (0)