Skip to content

Commit

Permalink
[GR-39486] Refine range check in JavaCompliance.
Browse files Browse the repository at this point in the history
PullRequest: mx/1474
  • Loading branch information
dougxc committed Jun 27, 2022
2 parents c900245 + 36237b0 commit 49f40ca
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 23 deletions.
20 changes: 10 additions & 10 deletions common.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
"jdks": {
"openjdk11": {"name": "openjdk", "version": "11.0.11+9", "platformspecific": true },
"oraclejdk11": {"name": "oraclejdk", "version": "11.0.11+9", "platformspecific": true },
"labsjdk-ce-11": {"name": "labsjdk", "version": "ce-11.0.16+5-jvmci-22.2-b03", "platformspecific": true },
"labsjdk-ce-11-llvm": {"name": "labsjdk", "version": "ce-11.0.16+5-jvmci-22.2-b03-sulong", "platformspecific": true },
"labsjdk-ee-11": {"name": "labsjdk", "version": "ee-11.0.16+9-jvmci-22.2-b03", "platformspecific": true },
"labsjdk-ee-11-llvm": {"name": "labsjdk", "version": "ee-11.0.16+9-jvmci-22.2-b03-sulong", "platformspecific": true },
"labsjdk-ce-11": {"name": "labsjdk", "version": "ce-11.0.16+7-jvmci-22.2-b04", "platformspecific": true },
"labsjdk-ce-11-llvm": {"name": "labsjdk", "version": "ce-11.0.16+7-jvmci-22.2-b04-sulong", "platformspecific": true },
"labsjdk-ee-11": {"name": "labsjdk", "version": "ee-11.0.16+10-jvmci-22.2-b04", "platformspecific": true },
"labsjdk-ee-11-llvm": {"name": "labsjdk", "version": "ee-11.0.16+10-jvmci-22.2-b04-sulong", "platformspecific": true },

"oraclejdk17": {"name": "oraclejdk", "version": "17.0.1+12", "platformspecific": true },
"labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.4+5-jvmci-22.2-b03", "platformspecific": true },
"labsjdk-ce-17Debug": {"name": "labsjdk", "version": "ce-17.0.4+5-jvmci-22.2-b03-debug", "platformspecific": true },
"labsjdk-ce-17-llvm": {"name": "labsjdk", "version": "ce-17.0.4+5-jvmci-22.2-b03-sulong", "platformspecific": true },
"labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.4+9-jvmci-22.2-b03", "platformspecific": true },
"labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.4+9-jvmci-22.2-b03-debug", "platformspecific": true },
"labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.4+9-jvmci-22.2-b03-sulong", "platformspecific": true }
"labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.4+7-jvmci-22.2-b04", "platformspecific": true },
"labsjdk-ce-17Debug": {"name": "labsjdk", "version": "ce-17.0.4+7-jvmci-22.2-b04-debug", "platformspecific": true },
"labsjdk-ce-17-llvm": {"name": "labsjdk", "version": "ce-17.0.4+7-jvmci-22.2-b04-sulong", "platformspecific": true },
"labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.4+10-jvmci-22.2-b04", "platformspecific": true },
"labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.4+10-jvmci-22.2-b04-debug", "platformspecific": true },
"labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.4+10-jvmci-22.2-b04-sulong", "platformspecific": true }
},

"COMMENT.devkits" : "The devkits versions reflect those used to build the JVMCI JDKs (e.g., see devkit_platform_revisions in <jdk>/make/conf/jib-profiles.js)",
Expand Down
2 changes: 1 addition & 1 deletion mx.py
Original file line number Diff line number Diff line change
Expand Up @@ -17916,7 +17916,7 @@ def alarm_handler(signum, frame):


# The version must be updated for every PR (checked in CI)
version = VersionSpec("6.1.4") # GR-39153
version = VersionSpec("6.1.5") # GR-39486

currentUmask = None
_mx_start_datetime = datetime.utcnow()
Expand Down
47 changes: 36 additions & 11 deletions mx_javacompliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,15 @@ def __contains__(self, other):
if self._high is None:
return True
return value <= self._high
elif isinstance(other, JavaCompliance._Range):
if other._high is None:
# open range is considered not match, e.g. '1.8+' not in '1.8..11'
return False
if other._low < self._low:
return False
if self._high is None:
return True
return other._high <= self._high
return False

def _values(self, stop=None):
Expand Down Expand Up @@ -215,17 +224,7 @@ def __cmp__(self, other):
def __contains__(self, other):
if isinstance(other, (int, str)):
other = JavaCompliance(other)
assert other._high_bound() is not None, "Contains check cannot be done with version ranges"
r = mx.compare(self.value, other.value)
if r == 0:
return True
elif r > 0:
return False
else: # r < 0
if self._high_bound() is None:
return True
else:
return mx.compare(self._high_bound(), other.value) >= 0
return all(any((other_part in self_part) for self_part in self._parts) for other_part in other._parts)

def __hash__(self):
return hash((self._parts, self._loom))
Expand Down Expand Up @@ -283,6 +282,8 @@ def _test():
Mx suite specific tests.
"""

from collections import namedtuple

# JavaCompliance tests
good_specs = [
(2, True),
Expand Down Expand Up @@ -317,6 +318,27 @@ def _test():
'4,7,1..3,',
'4..5,1..3',
]
range_case = namedtuple('range_case', ['spec', 'range_spec', 'should_match'])
range_specs = [
range_case('1.8', '1.8', True),
range_case('11', '11', True),
range_case('17', '17', True),
range_case('1.8', '1.7', False),
range_case('1.8', '11', False),
range_case('17', '1.8', False),
range_case('1.8', '11..17', False),
range_case('11', '11..17', True),
range_case('15', '11..17', True),
range_case('17', '11..17', True),
range_case('19', '11..17', False),
range_case('11..17', '11..17', True),
range_case('13..14', '11..17', True),
range_case('11..19', '11..17', False),
range_case('16', '11..15,17', False),
range_case('11..12,14..15', '11..15,17', True),
range_case('11,12,13,14,15,16,17', '11..17', True),
range_case('11+', '11..17', False),
]
for spec, exact in good_specs:
p = mx.JavaCompliance(spec)
assert p._is_exact_bound() is exact, p
Expand All @@ -342,3 +364,6 @@ def _parse_error(msg):
mx.abort('expected SpecError while parsing "{}"'.format(spec))
except SpecError:
pass
for spec, range_spec, should_match in range_specs:
match = spec in mx.JavaCompliance(range_spec)
assert match == should_match, '"{}" in "{}" should returns {}'.format(spec, range_spec, should_match)
2 changes: 1 addition & 1 deletion mx_javamodules.py
Original file line number Diff line number Diff line change
Expand Up @@ -1118,7 +1118,7 @@ def parse_requiresConcealed_attribute(jdk, value, result, importer, context, mod
if '@' in module:
module, java_compliance = module.split('@', 1)
java_compliance = mx_javacompliance.JavaCompliance(java_compliance, context=context)
if java_compliance not in jdk.javaCompliance:
if jdk.javaCompliance not in java_compliance:
continue

matches = [jmd for jmd in all_modules if jmd.name == module]
Expand Down

0 comments on commit 49f40ca

Please sign in to comment.