[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
Add validator that alwasys returns false and test, plus todo in integ…
…ration test
  • Loading branch information
reidbaker committed Mar 23, 2023
commit 7b4f418b22998e37bac4ef8e9db1f04adec0de1d
6 changes: 3 additions & 3 deletions packages/flutter_tools/lib/src/android/gradle_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ Future<String?> getGradleVersion(
distributionUrlRegex.firstMatch(wrapperFileContent);
if (distributionUrl != null) {
try {
final String androidPluginVersion =
final String gradleVersion =
distributionUrl.group(0)!.split('-')[1];
return androidPluginVersion;
return gradleVersion;
// ignore: empty_catches
} on TypeError {}
} else {
Expand All @@ -182,7 +182,7 @@ Future<String?> getGradleVersion(
logger.printTrace(
'$propertiesFile does not exist falling back to system gradle');
}
// System installed Gradle version.
// System installed Gradle version.
if (processManager.canRun('gradle')) {
final String gradleVersionVerbose =
(await processManager.run(<String>['gradle', r'--version'])).stdout
Expand Down
16 changes: 9 additions & 7 deletions packages/flutter_tools/lib/src/project.dart
Original file line number Diff line number Diff line change
Expand Up @@ -533,13 +533,15 @@ class AndroidProject extends FlutterProjectPlatform {
return parent.isModule || _editableHostAppDirectory.existsSync();
}

String get gradleVersion {
if (!isUsingGradle) {
// TODO fail in some clever way
print('Not using gradle');
return '';
}
return ''; // TODO call gradleUtils.
Future<bool> hasValidJavaGradleAgpVersions() async {
String javaVersion = '11';
String gradleVersion = '6.7.1';
String agpVersion = '4.2.0';

String? localGradleVersion = await gradle.getGradleVersion(
hostAppGradleRoot, globals.logger, globals.processManager);

return false;
}

bool get isUsingGradle {
Expand Down
122 changes: 73 additions & 49 deletions packages/flutter_tools/lib/src/project_validator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ abstract class ProjectValidator {
String get title;
bool get machineOutput => false;
bool supportsProject(FlutterProject project);

/// Can return more than one result in case a file/command have a lot of info to share to the user
Future<List<ProjectValidatorResult>> start(FlutterProject project);
}
Expand Down Expand Up @@ -57,6 +58,7 @@ class VariableDumpMachineProjectValidator extends MachineProjectValidator {
return value;
}

//DEAD CODE?
@override
Future<List<ProjectValidatorResult>> start(FlutterProject project) async {
final List<ProjectValidatorResult> result = <ProjectValidatorResult>[];
Expand Down Expand Up @@ -112,6 +114,16 @@ class VariableDumpMachineProjectValidator extends MachineProjectValidator {
value: _toJsonValue(project.android.isKotlin),
status: StatusProjectValidator.info,
));
// TODO REMOVE.
final bool validJavaGradleAgpVersions =
await project.android.hasValidJavaGradleAgpVersions();
result.add(ProjectValidatorResult(
name: 'Java/Gradle/Android Gradle Plugin',
value: _toJsonValue(validJavaGradleAgpVersions),
status: validJavaGradleAgpVersions
? StatusProjectValidator.success
: StatusProjectValidator.error,
));
result.add(ProjectValidatorResult(
name: 'FlutterProject.ios.isSwift',
value: _toJsonValue(project.ios.isSwift),
Expand All @@ -136,7 +148,8 @@ class VariableDumpMachineProjectValidator extends MachineProjectValidator {
));

// FlutterVersion
final FlutterVersion version = FlutterVersion(workingDirectory: project.directory.absolute.path);
final FlutterVersion version =
FlutterVersion(workingDirectory: project.directory.absolute.path);
result.add(ProjectValidatorResult(
name: 'FlutterVersion.frameworkRevision',
value: _toJsonValue(version.frameworkRevision),
Expand Down Expand Up @@ -202,28 +215,40 @@ class VariableDumpMachineProjectValidator extends MachineProjectValidator {
/// Validator run for all platforms that extract information from the pubspec.yaml.
///
/// Specific info from different platforms should be written in their own ProjectValidator.
class GeneralInfoProjectValidator extends ProjectValidator{
class GeneralInfoProjectValidator extends ProjectValidator {
@override
Future<List<ProjectValidatorResult>> start(FlutterProject project) async {
final FlutterManifest flutterManifest = project.manifest;
final List<ProjectValidatorResult> result = <ProjectValidatorResult>[];
final ProjectValidatorResult appNameValidatorResult = _getAppNameResult(flutterManifest);
final ProjectValidatorResult appNameValidatorResult =
_getAppNameResult(flutterManifest);
result.add(appNameValidatorResult);
final String supportedPlatforms = _getSupportedPlatforms(project);
if (supportedPlatforms.isEmpty) {
return result;
}
final ProjectValidatorResult supportedPlatformsResult = ProjectValidatorResult(
name: 'Supported Platforms',
value: supportedPlatforms,
status: StatusProjectValidator.success
);
final ProjectValidatorResult isFlutterPackage = _isFlutterPackageValidatorResult(flutterManifest);
result.addAll(<ProjectValidatorResult>[supportedPlatformsResult, isFlutterPackage]);
final ProjectValidatorResult supportedPlatformsResult =
ProjectValidatorResult(
name: 'Supported Platforms',
value: supportedPlatforms,
status: StatusProjectValidator.success);
final ProjectValidatorResult isFlutterPackage =
_isFlutterPackageValidatorResult(flutterManifest);
result.addAll(
<ProjectValidatorResult>[supportedPlatformsResult, isFlutterPackage]);
if (flutterManifest.flutterDescriptor.isNotEmpty) {
result.add(_materialDesignResult(flutterManifest));
result.add(_pluginValidatorResult(flutterManifest));
}
final bool validJavaGradleAgpVersions =
await project.android.hasValidJavaGradleAgpVersions();
result.add(ProjectValidatorResult(
name: 'FlutterProject.android.compatibleJavaGradleAgp',
value: validJavaGradleAgpVersions ? 'Java/Gradle/AGP appear compatible' : 'Incompatible Java/Gradle/AGP versions',
status: validJavaGradleAgpVersions
? StatusProjectValidator.success
: StatusProjectValidator.error,
));
return result;
}

Expand All @@ -234,17 +259,14 @@ class GeneralInfoProjectValidator extends ProjectValidator{
return const ProjectValidatorResult(
name: name,
value: 'name not found',
status: StatusProjectValidator.error
);
status: StatusProjectValidator.error);
}
return ProjectValidatorResult(
name: name,
value: appName,
status: StatusProjectValidator.success
);
name: name, value: appName, status: StatusProjectValidator.success);
}

ProjectValidatorResult _isFlutterPackageValidatorResult(FlutterManifest flutterManifest) {
ProjectValidatorResult _isFlutterPackageValidatorResult(
FlutterManifest flutterManifest) {
final String value;
final StatusProjectValidator status;
if (flutterManifest.flutterDescriptor.isNotEmpty) {
Expand All @@ -256,30 +278,30 @@ class GeneralInfoProjectValidator extends ProjectValidator{
}

return ProjectValidatorResult(
name: 'Is Flutter Package',
value: value,
status: status
);
name: 'Is Flutter Package', value: value, status: status);
}

ProjectValidatorResult _materialDesignResult(FlutterManifest flutterManifest) {
ProjectValidatorResult _materialDesignResult(
FlutterManifest flutterManifest) {
return ProjectValidatorResult(
name: 'Uses Material Design',
value: flutterManifest.usesMaterialDesign? 'yes' : 'no',
status: StatusProjectValidator.success
);
name: 'Uses Material Design',
value: flutterManifest.usesMaterialDesign ? 'yes' : 'no',
status: StatusProjectValidator.success);
}

String _getSupportedPlatforms(FlutterProject project) {
return project.getSupportedPlatforms().map((SupportedPlatform platform) => platform.name).join(', ');
return project
.getSupportedPlatforms()
.map((SupportedPlatform platform) => platform.name)
.join(', ');
}

ProjectValidatorResult _pluginValidatorResult(FlutterManifest flutterManifest) {
ProjectValidatorResult _pluginValidatorResult(
FlutterManifest flutterManifest) {
return ProjectValidatorResult(
name: 'Is Plugin',
value: flutterManifest.isPlugin? 'yes' : 'no',
status: StatusProjectValidator.success
);
name: 'Is Plugin',
value: flutterManifest.isPlugin ? 'yes' : 'no',
status: StatusProjectValidator.success);
}

@override
Expand All @@ -299,26 +321,28 @@ class PubDependenciesProjectValidator extends ProjectValidator {
@override
Future<List<ProjectValidatorResult>> start(FlutterProject project) async {
const String name = 'Dart dependencies';
final ProcessResult processResult = await _processManager.run(<String>['dart', 'pub', 'deps', '--json']);
final ProcessResult processResult =
await _processManager.run(<String>['dart', 'pub', 'deps', '--json']);
if (processResult.stdout is! String) {
return <ProjectValidatorResult>[
_createProjectValidatorError(name, 'Command dart pub deps --json failed')
_createProjectValidatorError(
name, 'Command dart pub deps --json failed')
];
}

final LinkedHashMap<String, dynamic> jsonResult;
final List<ProjectValidatorResult> result = <ProjectValidatorResult>[];
try {
jsonResult = json.decode(
processResult.stdout.toString()
) as LinkedHashMap<String, dynamic>;
} on FormatException{
result.add(_createProjectValidatorError(name, processResult.stderr.toString()));
jsonResult = json.decode(processResult.stdout.toString())
as LinkedHashMap<String, dynamic>;
} on FormatException {
result.add(
_createProjectValidatorError(name, processResult.stderr.toString()));
return result;
}

final DartPubJson dartPubJson = DartPubJson(jsonResult);
final List <String> dependencies = <String>[];
final List<String> dependencies = <String>[];

// Information retrieved from the pubspec.lock file if a dependency comes from
// the hosted url https://pub.dartlang.org we ignore it or if the package
Expand All @@ -339,13 +363,11 @@ class PubDependenciesProjectValidator extends ProjectValidator {
value = 'All pub dependencies are hosted on https://pub.dartlang.org';
}

result.add(
ProjectValidatorResult(
name: name,
value: value,
status: StatusProjectValidator.info,
)
);
result.add(ProjectValidatorResult(
name: name,
value: value,
status: StatusProjectValidator.info,
));

return result;
}
Expand All @@ -358,7 +380,9 @@ class PubDependenciesProjectValidator extends ProjectValidator {
@override
String get title => 'Pub dependencies';

ProjectValidatorResult _createProjectValidatorError(String name, String value) {
return ProjectValidatorResult(name: name, value: value, status: StatusProjectValidator.error);
ProjectValidatorResult _createProjectValidatorError(
String name, String value) {
return ProjectValidatorResult(
name: name, value: value, status: StatusProjectValidator.error);
}
}
7 changes: 7 additions & 0 deletions packages/flutter_tools/test/general.shard/project_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,13 @@ void main() {
});
});

group('compatibality', () {
_testInMemory('always returns false', () async {
final FlutterProject project = await someProject();
expect(await project.android.hasValidJavaGradleAgpVersions(), isFalse);
});
});

group('language', () {
late XcodeProjectInterpreter xcodeProjectInterpreter;
late MemoryFileSystem fs;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ void main() {
fileSystem = globals.localFileSystem;
});

// TODO update for java/gradle/agp content.
testUsingContext('General Info Project Validator', () async {
final BufferLogger loggerTest = BufferLogger.test();
final AnalyzeCommand command = AnalyzeCommand(
Expand Down