@@ -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