Unverified Commit 45a34e83 authored by Wizz.Xu's avatar Wizz.Xu Committed by GitHub

Master analyze_base.dart to null-safety (#93954)

parent 77fca358
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:args/args.dart'; import 'package:args/args.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:process/process.dart'; import 'package:process/process.dart';
...@@ -22,14 +20,14 @@ import '../globals.dart' as globals; ...@@ -22,14 +20,14 @@ import '../globals.dart' as globals;
/// Common behavior for `flutter analyze` and `flutter analyze --watch` /// Common behavior for `flutter analyze` and `flutter analyze --watch`
abstract class AnalyzeBase { abstract class AnalyzeBase {
AnalyzeBase(this.argResults, { AnalyzeBase(this.argResults, {
@required this.repoRoots, required this.repoRoots,
@required this.repoPackages, required this.repoPackages,
@required this.fileSystem, required this.fileSystem,
@required this.logger, required this.logger,
@required this.platform, required this.platform,
@required this.processManager, required this.processManager,
@required this.terminal, required this.terminal,
@required this.artifacts, required this.artifacts,
}); });
/// The parsed argument results for execution. /// The parsed argument results for execution.
...@@ -81,16 +79,22 @@ abstract class AnalyzeBase { ...@@ -81,16 +79,22 @@ abstract class AnalyzeBase {
} }
bool get isFlutterRepo => argResults['flutter-repo'] as bool; bool get isFlutterRepo => argResults['flutter-repo'] as bool;
String get sdkPath => argResults['dart-sdk'] as String ?? artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path; String get sdkPath {
final String? dartSdk = argResults['dart-sdk'] as String?;
if (dartSdk != null) {
return dartSdk;
}
return artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path;
}
bool get isBenchmarking => argResults['benchmark'] as bool; bool get isBenchmarking => argResults['benchmark'] as bool;
String get protocolTrafficLog => argResults['protocol-traffic-log'] as String; String get protocolTrafficLog => argResults['protocol-traffic-log'] as String;
/// Generate an analysis summary for both [AnalyzeOnce], [AnalyzeContinuously]. /// Generate an analysis summary for both [AnalyzeOnce], [AnalyzeContinuously].
static String generateErrorsMessage({ static String generateErrorsMessage({
@required int issueCount, required int issueCount,
int issueDiff, int? issueDiff,
int files, int? files,
@required String seconds, required String seconds,
}) { }) {
final StringBuffer errorsMessage = StringBuffer(issueCount > 0 final StringBuffer errorsMessage = StringBuffer(issueCount > 0
? '$issueCount ${pluralize('issue', issueCount)} found.' ? '$issueCount ${pluralize('issue', issueCount)} found.'
...@@ -118,7 +122,7 @@ class PackageDependency { ...@@ -118,7 +122,7 @@ class PackageDependency {
// This is a map from dependency targets (lib directories) to a list // This is a map from dependency targets (lib directories) to a list
// of places that ask for that target (.packages or pubspec.yaml files) // of places that ask for that target (.packages or pubspec.yaml files)
Map<String, List<String>> values = <String, List<String>>{}; Map<String, List<String>> values = <String, List<String>>{};
String canonicalSource; String? canonicalSource;
void addCanonicalCase(String packagePath, String pubSpecYamlPath) { void addCanonicalCase(String packagePath, String pubSpecYamlPath) {
assert(canonicalSource == null); assert(canonicalSource == null);
add(packagePath, pubSpecYamlPath); add(packagePath, pubSpecYamlPath);
...@@ -129,11 +133,12 @@ class PackageDependency { ...@@ -129,11 +133,12 @@ class PackageDependency {
} }
bool get hasConflict => values.length > 1; bool get hasConflict => values.length > 1;
bool get hasConflictAffectingFlutterRepo { bool get hasConflictAffectingFlutterRepo {
assert(globals.fs.path.isAbsolute(Cache.flutterRoot)); final String? flutterRoot = Cache.flutterRoot;
assert(flutterRoot != null && globals.fs.path.isAbsolute(flutterRoot));
for (final List<String> targetSources in values.values) { for (final List<String> targetSources in values.values) {
for (final String source in targetSources) { for (final String source in targetSources) {
assert(globals.fs.path.isAbsolute(source)); assert(globals.fs.path.isAbsolute(source));
if (globals.fs.path.isWithin(Cache.flutterRoot, source)) { if (globals.fs.path.isWithin(flutterRoot!, source)) {
return true; return true;
} }
} }
...@@ -143,12 +148,13 @@ class PackageDependency { ...@@ -143,12 +148,13 @@ class PackageDependency {
void describeConflict(StringBuffer result) { void describeConflict(StringBuffer result) {
assert(hasConflict); assert(hasConflict);
final List<String> targets = values.keys.toList(); final List<String> targets = values.keys.toList();
targets.sort((String a, String b) => values[b].length.compareTo(values[a].length)); targets.sort((String a, String b) => values[b]!.length.compareTo(values[a]!.length));
for (final String target in targets) { for (final String target in targets) {
final int count = values[target].length; final List<String> targetList = values[target]!;
final int count = targetList.length;
result.writeln(' $count ${count == 1 ? 'source wants' : 'sources want'} "$target":'); result.writeln(' $count ${count == 1 ? 'source wants' : 'sources want'} "$target":');
bool canonical = false; bool canonical = false;
for (final String source in values[target]) { for (final String source in targetList) {
result.writeln(' $source'); result.writeln(' $source');
if (source == canonicalSource) { if (source == canonicalSource) {
canonical = true; canonical = true;
...@@ -263,18 +269,20 @@ class PackageDependencyTracker { ...@@ -263,18 +269,20 @@ class PackageDependencyTracker {
String generateConflictReport() { String generateConflictReport() {
assert(hasConflicts); assert(hasConflicts);
final StringBuffer result = StringBuffer(); final StringBuffer result = StringBuffer();
for (final String package in packages.keys.where((String package) => packages[package].hasConflict)) { packages.forEach((String package, PackageDependency dependency) {
result.writeln('Package "$package" has conflicts:'); if (dependency.hasConflict) {
packages[package].describeConflict(result); result.writeln('Package "$package" has conflicts:');
} dependency.describeConflict(result);
}
});
return result.toString(); return result.toString();
} }
Map<String, String> asPackageMap() { Map<String, String> asPackageMap() {
final Map<String, String> result = <String, String>{}; final Map<String, String> result = <String, String>{};
for (final String package in packages.keys) { packages.forEach((String package, PackageDependency dependency) {
result[package] = packages[package].target; result[package] = dependency.target;
} });
return result; return result;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment