[go: nahoru, domu]

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Java-Gradle-AGP validation to flutter analyze #123916

Merged
merged 68 commits into from
Apr 5, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
a07f7ee
Add function to gradle_utils.dart that gets the gradle version from w…
reidbaker Mar 23, 2023
7b4f418
Add validator that alwasys returns false and test, plus todo in integ…
reidbaker Mar 23, 2023
2b95eb5
Update documentation, add constants in gradle_utils.dart
reidbaker Mar 24, 2023
477734e
Add method to get agp version, add method to validate agp against gra…
reidbaker Mar 24, 2023
5a8005a
Add task to projects evaluated by flutter.gradle that will print the …
reidbaker Mar 28, 2023
e05aa96
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Mar 30, 2023
53e89a0
Update dart doc for validateGradleAndAgp to describe where the info c…
reidbaker Mar 30, 2023
af3c647
Fill out and test java gradle compatability function in gradle_utils
reidbaker Mar 30, 2023
7e643a6
Hook up java gradle evaluateion to hasValidJavaGradleAgpVersions with…
reidbaker Mar 30, 2023
6b4ed1b
Add java --version output parsing and tests
reidbaker Mar 31, 2023
96cae3d
Add getJavaBinary test
reidbaker Mar 31, 2023
5e08847
Update comment in android_sdk for mac behavior with java_home -v
reidbaker Apr 1, 2023
b263dfc
Update format of group java/gradle/agp tests to have one test per pai…
reidbaker Apr 1, 2023
1a5e9e1
Handle mid java values
reidbaker Apr 1, 2023
4749a95
pre review feedback and cleanup of todos
reidbaker Apr 1, 2023
fff074e
Undo formatting
reidbaker Apr 1, 2023
2df3691
Undo formatting 2
reidbaker Apr 1, 2023
3815b0c
Add fake AndroidStudio and more formatting fixes
reidbaker Apr 1, 2023
21b8887
remove hardcoded values
reidbaker Apr 1, 2023
87ea610
make getJavaVersion callable
reidbaker Apr 1, 2023
7bc2f4b
Undo accidental revert of project.dart using java version
reidbaker Apr 1, 2023
565dd58
Add validator to list
reidbaker Apr 1, 2023
51903c4
Update analyze suggetions integration test with java/gradle/agp confi…
reidbaker Apr 2, 2023
a84e4b6
Add window java output test
reidbaker Apr 2, 2023
c2df14e
copyright formatting
reidbaker Apr 2, 2023
453889c
Make isWithinVersionRange public and move it as a static helper in ve…
reidbaker Apr 2, 2023
07213fb
Add tests to isWithinVersionRange
reidbaker Apr 2, 2023
860b861
Make maxKnownAgpVersion visible for testing, and use it in a test, ma…
reidbaker Apr 2, 2023
8d379d6
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Apr 2, 2023
54d1b99
dart fix --apply
reidbaker Apr 2, 2023
6ce48fe
Update error description to have better formatting
reidbaker Apr 2, 2023
2641a53
Return better result value from java/gradle/agp validation with descr…
reidbaker Apr 2, 2023
ad94e9b
Addd test for java/gradle/agp validation test is failing
reidbaker Apr 2, 2023
3a8dc54
Add passing test for java/gradle/agp in project_test
reidbaker Apr 2, 2023
9295069
Add expected passing compatibility tests
reidbaker Apr 2, 2023
f9d61ba
Add failing cases and check string description
reidbaker Apr 2, 2023
cd20ff2
dart fix --apply
reidbaker Apr 2, 2023
0e45f6f
Undo some auto formatting to make reviewing easier
reidbaker Apr 2, 2023
5bc570c
Make getVersion non static and update tests
reidbaker Apr 2, 2023
b3823a5
Remove dead code replaces by overriding java version in fake
reidbaker Apr 2, 2023
0fb85f4
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Apr 2, 2023
0c66529
remove dead code, use constants when avilable, fix todo formatting
reidbaker Apr 2, 2023
2484666
Remove no longer used filesystem
reidbaker Apr 2, 2023
dab39a0
Add --verbose to get logs to debug test/integration.shard/analyze_sug…
reidbaker Apr 2, 2023
42092ee
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Apr 3, 2023
77db98e
Add dart doc to parseJavaVersion, updated regex to support optional t…
reidbaker Apr 3, 2023
69f7fb9
Add whitespace test on gradle format
reidbaker Apr 3, 2023
221f2e6
Review comments, spelling and an additional test to cover -beta and -…
reidbaker Apr 3, 2023
ab0e2e6
spelling, using late in testing to avoid test polution
reidbaker Apr 3, 2023
6d0268d
Formatting and reduction in test polution by isolating variable scope
reidbaker Apr 4, 2023
ee8ccb6
remove unused variable
reidbaker Apr 4, 2023
5b10e19
Add test for specific version output of ci https://chrome-infra-packa…
reidbaker Apr 4, 2023
09adddc
Update gradle version so that java version and gradle are compatible
reidbaker Apr 4, 2023
09c2c97
Review feedback
reidbaker Apr 4, 2023
fa7da03
spelling fix
reidbaker Apr 4, 2023
7f50a6f
Print trace logging for getJavaVersion and getJavaBinary
reidbaker Apr 4, 2023
76aa064
Make tests that depend on logger use testUsingContext
reidbaker Apr 4, 2023
64c7b8e
Fix todo format
reidbaker Apr 4, 2023
9f03e54
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Apr 4, 2023
033cd4b
Reformat java/gradle compat to use a class and be a list
reidbaker Apr 4, 2023
a749ad8
Reformat todo
reidbaker Apr 4, 2023
7ba52c0
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Apr 4, 2023
ae705bf
formatting and dart docs
reidbaker Apr 4, 2023
6e69b85
Handle newer patch versions of java and gradle and add test to cover
reidbaker Apr 4, 2023
da7b866
dart docs and formatting
reidbaker Apr 4, 2023
e0572ac
spelling fix
reidbaker Apr 4, 2023
3165cbf
Merge branch 'master' into i122376-warn-on-gradle-java-AGP-incompatib…
reidbaker Apr 4, 2023
deb320f
Make test value final
reidbaker Apr 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Make isWithinVersionRange public and move it as a static helper in ve…
…rsion.dart
  • Loading branch information
reidbaker committed Apr 2, 2023
commit 453889cc6d2cd9387bd1e304bb8872cd30034901
174 changes: 74 additions & 100 deletions packages/flutter_tools/lib/src/android/gradle_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -310,104 +310,104 @@ bool validateGradleAndAgp(Logger logger,
}

// First check if versions are too old.
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '0.0', max: oldestSupportedAgpVersion, inclusiveMax: false)) {
logger.printTrace('AGP Version: $agpV is too old.');
return false;
}
if (_isWithinVersionRange(gradleV,
if (isWithinVersionRange(gradleV,
min: '0.0', max: oldestSupportedGradleVersion, inclusiveMax: false)) {
logger.printTrace('Gradle Version: $gradleV is too old.');
return false;
}

// Check highest supported version before checking unknown versions.
if (_isWithinVersionRange(agpV, min: '8.0', max: _maxKnownAgpVersion)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(agpV, min: '8.0', max: _maxKnownAgpVersion)) {
return isWithinVersionRange(gradleV,
min: '8.0', max: _maxKnownAndSupportedGradleVersion);
}
// Check if versions are newer than the max known versions.
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: _maxKnownAndSupportedGradleVersion, max: '100.100')) {
// Assume versions we do not know about are valid but log.
final bool validGradle =
_isWithinVersionRange(gradleV, min: '8.0', max: '100.00');
isWithinVersionRange(gradleV, min: '8.0', max: '100.00');
logger.printTrace('Newer than known AGP version ($agpV), gradle ($gradleV).'
'\n Treating as valid configuration.');
return validGradle;
}

// Begin Known Gradle <-> AGP validation.
// Max agp here is a made up version to contain all 7.4 changes.
if (_isWithinVersionRange(agpV, min: '7.4', max: '7.5')) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(agpV, min: '7.4', max: '7.5')) {
return isWithinVersionRange(gradleV,
min: '7.5', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '7.3', max: '7.4', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '7.4', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '7.2', max: '7.3', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '7.3.3', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '7.1', max: '7.2', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '7.2', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '7.0', max: '7.1', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '7.0', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '4.2.0', max: '7.0', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '6.7.1', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '4.1.0', max: '4.2.0', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '6.5', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(agpV,
if (isWithinVersionRange(agpV,
min: '4.0.0', max: '4.1.0', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '6.1.1', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(
if (isWithinVersionRange(
agpV,
min: '3.6.0',
max: '3.6.4',
)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '5.6.4', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(
if (isWithinVersionRange(
agpV,
min: '3.5.0',
max: '3.5.4',
)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '5.4.1', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(
if (isWithinVersionRange(
agpV,
min: '3.4.0',
max: '3.4.3',
)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '5.1.1', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(
if (isWithinVersionRange(
agpV,
min: '3.3.0',
max: '3.3.3',
)) {
return _isWithinVersionRange(gradleV,
return isWithinVersionRange(gradleV,
min: '4.10.1', max: _maxKnownAndSupportedGradleVersion);
}

Expand Down Expand Up @@ -439,162 +439,136 @@ bool validateJavaGradle(Logger logger,
}

// First check if versions are too old.
if (_isWithinVersionRange(javaV,
if (isWithinVersionRange(javaV,
min: '1.1', max: oldestSupportedJavaVersion, inclusiveMax: false)) {
logger.printTrace('Java Version: $javaV is too old.');
return false;
}
if (_isWithinVersionRange(gradleV,
if (isWithinVersionRange(gradleV,
min: '0.0', max: oldestDocumentedJavaGradleCompatability, inclusiveMax: false)) {
logger.printTrace('Gradle Version: $gradleV is too old.');
return false;
}

// Check if versions are newer than the max supported versions.
if (_isWithinVersionRange(javaV, min: maxSupportedJavaVersion, max: '100.100', inclusiveMin: false)) {
if (isWithinVersionRange(javaV, min: maxSupportedJavaVersion, max: '100.100', inclusiveMin: false)) {
// Assume versions Java versions newer than [maxSupportedJavaVersion]
// required a higher gradle version.
final bool validGradle =
_isWithinVersionRange(gradleV, min: _maxKnownAndSupportedGradleVersion, max: '100.00');
isWithinVersionRange(gradleV, min: _maxKnownAndSupportedGradleVersion, max: '100.00');
logger.printWarning('Newer than known valid Java version ($javaV), gradle ($gradleV).'
'\n Treating as valid configuration.');
return validGradle;
}

// Begin known Java <-> Gradle evaluation.
if (_isWithinVersionRange(javaV, min: '19', max: '20', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '19', max: '20', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '7.6', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '18', max: '19', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '18', max: '19', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '7.5', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '17', max: '18', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '17', max: '18', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '7.3', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '16', max: '17', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '16', max: '17', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '7.0', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '15', max: '16', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '15', max: '16', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '6.7', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '14', max: '15', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '14', max: '15', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '6.3', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '13', max: '14', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '13', max: '14', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '6.0', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '12', max: '13', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '12', max: '13', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '5.4', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '11', max: '12', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '11', max: '12', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '5.0', max: _maxKnownAndSupportedGradleVersion);
}
// 1.11 is a made up java version to cover everything in 1.10.*
if (_isWithinVersionRange(javaV, min: '1.10', max: '1.11', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '1.10', max: '1.11', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '4.7', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '1.9', max: '1.10', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '1.9', max: '1.10', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '4.3', max: _maxKnownAndSupportedGradleVersion);
}
if (_isWithinVersionRange(javaV, min: '1.8', max: '1.9', inclusiveMax: false)) {
return _isWithinVersionRange(gradleV,
if (isWithinVersionRange(javaV, min: '1.8', max: '1.9', inclusiveMax: false)) {
return isWithinVersionRange(gradleV,
min: '2.0', max: _maxKnownAndSupportedGradleVersion);
}
christopherfujino marked this conversation as resolved.
Show resolved Hide resolved

logger.printTrace('Unknown Java-Gradle compatability $javaV, $gradleV');
return false;
}

/// Returns true if [targetVersion] is within the range [min] and [max]
/// inclusive by default. Pass [inclusiveMax] = false for less than and
/// not equal to max.
bool _isWithinVersionRange(
String targetVersion, {
required String min,
required String max,
bool inclusiveMax = true,
bool inclusiveMin = true,
}) {
final Version? parsedTargetVersion = Version.parse(targetVersion);
final Version? minVersion = Version.parse(min);
final Version? maxVersion = Version.parse(max);

final bool withinMin = minVersion != null &&
parsedTargetVersion != null &&
(inclusiveMin
? parsedTargetVersion >= minVersion
: parsedTargetVersion > minVersion);

final bool withinMax = maxVersion != null &&
parsedTargetVersion != null &&
(inclusiveMax
? parsedTargetVersion <= maxVersion
: parsedTargetVersion < maxVersion);
return withinMin && withinMax;
}


/// Returns the Gradle version that is required by the given Android Gradle plugin version
/// by picking the largest compatible version from
/// https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
@visibleForTesting
String getGradleVersionFor(String androidPluginVersion) {
if (_isWithinVersionRange(androidPluginVersion, min: '1.0.0', max: '1.1.3')) {
if (isWithinVersionRange(androidPluginVersion, min: '1.0.0', max: '1.1.3')) {
return '2.3';
}
if (_isWithinVersionRange(androidPluginVersion, min: '1.2.0', max: '1.3.1')) {
if (isWithinVersionRange(androidPluginVersion, min: '1.2.0', max: '1.3.1')) {
return '2.9';
}
if (_isWithinVersionRange(androidPluginVersion, min: '1.5.0', max: '1.5.0')) {
if (isWithinVersionRange(androidPluginVersion, min: '1.5.0', max: '1.5.0')) {
return '2.2.1';
}
if (_isWithinVersionRange(androidPluginVersion, min: '2.0.0', max: '2.1.2')) {
if (isWithinVersionRange(androidPluginVersion, min: '2.0.0', max: '2.1.2')) {
return '2.13';
}
if (_isWithinVersionRange(androidPluginVersion, min: '2.1.3', max: '2.2.3')) {
if (isWithinVersionRange(androidPluginVersion, min: '2.1.3', max: '2.2.3')) {
return '2.14.1';
}
if (_isWithinVersionRange(androidPluginVersion, min: '2.3.0', max: '2.9.9')) {
if (isWithinVersionRange(androidPluginVersion, min: '2.3.0', max: '2.9.9')) {
return '3.3';
}
if (_isWithinVersionRange(androidPluginVersion, min: '3.0.0', max: '3.0.9')) {
if (isWithinVersionRange(androidPluginVersion, min: '3.0.0', max: '3.0.9')) {
return '4.1';
}
if (_isWithinVersionRange(androidPluginVersion, min: '3.1.0', max: '3.1.9')) {
if (isWithinVersionRange(androidPluginVersion, min: '3.1.0', max: '3.1.9')) {
return '4.4';
}
if (_isWithinVersionRange(androidPluginVersion, min: '3.2.0', max: '3.2.1')) {
if (isWithinVersionRange(androidPluginVersion, min: '3.2.0', max: '3.2.1')) {
return '4.6';
}
if (_isWithinVersionRange(androidPluginVersion, min: '3.3.0', max: '3.3.2')) {
if (isWithinVersionRange(androidPluginVersion, min: '3.3.0', max: '3.3.2')) {
return '4.10.2';
}
if (_isWithinVersionRange(androidPluginVersion, min: '3.4.0', max: '3.5.0')) {
if (isWithinVersionRange(androidPluginVersion, min: '3.4.0', max: '3.5.0')) {
return '5.6.2';
}
if (_isWithinVersionRange(androidPluginVersion, min: '4.0.0', max: '4.1.0')) {
if (isWithinVersionRange(androidPluginVersion, min: '4.0.0', max: '4.1.0')) {
return '6.7';
}
// 7.5 is a made up value to include everything through 7.4.*
if (_isWithinVersionRange(androidPluginVersion, min: '7.0', max: '7.5')) {
if (isWithinVersionRange(androidPluginVersion, min: '7.0', max: '7.5')) {
return '7.5';
}
if (_isWithinVersionRange(androidPluginVersion, min: '7.5', max: _maxKnownAgpVersion)) {
if (isWithinVersionRange(androidPluginVersion, min: '7.5', max: _maxKnownAgpVersion)) {
return '8.0';
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar optional nit here; a map of version ranges and trivial loop could replace all the duplicate calls.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that idea. Similar to how I did the unit tests. Let me work on that today.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this worked out very nicely!

// Assume if AGP is newer than this code know about return the highest gradle
// version we know about.
if (_isWithinVersionRange(androidPluginVersion, min: _maxKnownAgpVersion, max: '100.100')) {
if (isWithinVersionRange(androidPluginVersion, min: _maxKnownAgpVersion, max: '100.100')) {
return _maxKnownAndSupportedGradleVersion;
}
// TODO should this be a regular thow so that chris can see these in crash logging.
Expand Down
28 changes: 28 additions & 0 deletions packages/flutter_tools/lib/src/base/version.dart
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,31 @@ class Version implements Comparable<Version> {
@override
String toString() => _text;
}

/// Returns true if [targetVersion] is within the range [min] and [max]
/// inclusive by default. Pass [inclusiveMax] = false for less than and
/// not equal to max.
bool isWithinVersionRange(
reidbaker marked this conversation as resolved.
Show resolved Hide resolved
String targetVersion, {
required String min,
required String max,
bool inclusiveMax = true,
bool inclusiveMin = true,
}) {
final Version? parsedTargetVersion = Version.parse(targetVersion);
final Version? minVersion = Version.parse(min);
final Version? maxVersion = Version.parse(max);

final bool withinMin = minVersion != null &&
parsedTargetVersion != null &&
(inclusiveMin
? parsedTargetVersion >= minVersion
: parsedTargetVersion > minVersion);

final bool withinMax = maxVersion != null &&
parsedTargetVersion != null &&
(inclusiveMax
? parsedTargetVersion <= maxVersion
: parsedTargetVersion < maxVersion);
return withinMin && withinMax;
}
Original file line number Diff line number Diff line change
Expand Up @@ -405,8 +405,6 @@ allprojects {
}
});

// TODO add test for _isWithinVersionRange inclusive min and max

group('validates java/gradle versions', () {
final List<JavaGradleTestData> testData = <JavaGradleTestData>[
// Values too new *these need to update* when
Expand Down Expand Up @@ -470,7 +468,8 @@ allprojects {
];

for (final JavaGradleTestData data in testData) {
testWithoutContext('(Java, gradle): (${data.javaVersion}, ${data.gradleVersion})', () {
testWithoutContext(
'(Java, gradle): (${data.javaVersion}, ${data.gradleVersion})', () {
expect(
validateJavaGradle(
BufferLogger.test(),
Expand Down
Loading