15d00a8586
Sample run: ``` hints w/ correction producers: HintCode.CAN_BE_NULL_AFTER_NULL_AWARE bulk fixable: false HintCode.DEAD_CODE bulk fixable: false HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH bulk fixable: false HintCode.DEAD_CODE_ON_CATCH_SUBTYPE bulk fixable: false HintCode.DIVISION_OPTIMIZATION bulk fixable: false HintCode.DUPLICATE_HIDDEN_NAME bulk fixable: false HintCode.DUPLICATE_IMPORT bulk fixable: false => override explanation missing for: RemoveUnusedImport HintCode.DUPLICATE_SHOWN_NAME bulk fixable: false HintCode.INVALID_FACTORY_ANNOTATION bulk fixable: false HintCode.INVALID_IMMUTABLE_ANNOTATION bulk fixable: false HintCode.INVALID_LITERAL_ANNOTATION bulk fixable: false HintCode.INVALID_REQUIRED_NAMED_PARAM bulk fixable: false HintCode.INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM bulk fixable: false HintCode.INVALID_REQUIRED_POSITIONAL_PARAM bulk fixable: false HintCode.INVALID_SEALED_ANNOTATION bulk fixable: false HintCode.MISSING_REQUIRED_PARAM bulk fixable: false HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS bulk fixable: false HintCode.MISSING_RETURN bulk fixable: false HintCode.NULLABLE_TYPE_IN_CATCH_CLAUSE bulk fixable: true HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD bulk fixable: false HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER bulk fixable: false HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD bulk fixable: false HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER bulk fixable: false HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT bulk fixable: false HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE bulk fixable: false HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT bulk fixable: false HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT bulk fixable: false HintCode.SDK_VERSION_EXTENSION_METHODS bulk fixable: false HintCode.SDK_VERSION_GT_GT_GT_OPERATOR bulk fixable: false HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT bulk fixable: false HintCode.SDK_VERSION_SET_LITERAL bulk fixable: false HintCode.SDK_VERSION_UI_AS_CODE bulk fixable: false HintCode.TYPE_CHECK_IS_NOT_NULL bulk fixable: false => override explanation missing for: UseNotEqNull HintCode.TYPE_CHECK_IS_NULL bulk fixable: false => override explanation missing for: UseEqEqNull HintCode.UNDEFINED_HIDDEN_NAME bulk fixable: false HintCode.UNDEFINED_SHOWN_NAME bulk fixable: false HintCode.UNNECESSARY_CAST bulk fixable: true HintCode.UNNECESSARY_IMPORT bulk fixable: false => override explanation missing for: RemoveUnusedImport HintCode.UNNECESSARY_NULL_COMPARISON_FALSE bulk fixable: false HintCode.UNNECESSARY_NULL_COMPARISON_TRUE bulk fixable: false HintCode.UNUSED_CATCH_CLAUSE bulk fixable: false HintCode.UNUSED_CATCH_STACK bulk fixable: false HintCode.UNUSED_ELEMENT bulk fixable: false HintCode.UNUSED_FIELD bulk fixable: false HintCode.UNUSED_IMPORT bulk fixable: false => override explanation missing for: RemoveUnusedImport HintCode.UNUSED_LABEL bulk fixable: false HintCode.UNUSED_LOCAL_VARIABLE bulk fixable: false HintCode.UNUSED_SHOWN_NAME bulk fixable: false ``` Change-Id: I9d6e86854d7f1de43ac8154631610869bf56c2c8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217149 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Phil Quitslund <pquitslund@google.com>
74 lines
2.9 KiB
Dart
74 lines
2.9 KiB
Dart
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
|
|
import 'package:analyzer/dart/analysis/results.dart';
|
|
import 'package:analyzer/dart/ast/ast.dart';
|
|
import 'package:analyzer/file_system/physical_file_system.dart';
|
|
import 'package:analyzer_utilities/package_root.dart';
|
|
|
|
class BulkFixDetails {
|
|
Future<Map<String, CorrectionDetails>> collectOverrides() async {
|
|
var overrideDetails = <String, CorrectionDetails>{};
|
|
|
|
var pkgRootPath =
|
|
PhysicalResourceProvider.INSTANCE.pathContext.normalize(packageRoot);
|
|
var directory = Directory(
|
|
'$pkgRootPath/analysis_server/lib/src/services/correction/dart');
|
|
var collection = AnalysisContextCollection(
|
|
includedPaths: [directory.absolute.path],
|
|
resourceProvider: PhysicalResourceProvider.INSTANCE,
|
|
);
|
|
var context = collection.contexts[0];
|
|
|
|
for (var file in directory.listSync()) {
|
|
var resolvedFile = await context.currentSession
|
|
.getResolvedUnit(file.absolute.path) as ResolvedUnitResult;
|
|
for (var classDecl
|
|
in resolvedFile.unit.declarations.whereType<ClassDeclaration>()) {
|
|
var classElement = classDecl.declaredElement;
|
|
if (classElement != null &&
|
|
classElement.allSupertypes.any(
|
|
(element) => element.element.name == 'CorrectionProducer')) {
|
|
var correctionName = classDecl.name.name;
|
|
|
|
for (var method in classDecl.members.whereType<MethodDeclaration>()) {
|
|
if (method.name.name == 'canBeAppliedInBulk') {
|
|
var hasComment =
|
|
method.returnType?.beginToken.precedingComments != null;
|
|
|
|
var body = method.body;
|
|
if (body is BlockFunctionBody) {
|
|
var last = body.block.statements.last;
|
|
if (last is ReturnStatement) {
|
|
var canBeBulkApplied =
|
|
(last.expression as BooleanLiteral).value;
|
|
overrideDetails[correctionName] = CorrectionDetails(
|
|
canBeBulkApplied: canBeBulkApplied,
|
|
hasComment: hasComment);
|
|
}
|
|
} else if (body is ExpressionFunctionBody) {
|
|
var expression = body.expression;
|
|
var canBeBulkApplied = (expression as BooleanLiteral).value;
|
|
overrideDetails[correctionName] = CorrectionDetails(
|
|
canBeBulkApplied: canBeBulkApplied, hasComment: hasComment);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return overrideDetails;
|
|
}
|
|
}
|
|
|
|
class CorrectionDetails {
|
|
bool canBeBulkApplied;
|
|
bool hasComment;
|
|
|
|
CorrectionDetails({required this.canBeBulkApplied, required this.hasComment});
|
|
}
|