Flow analysis: move into front_end.

This will allow it to be used by both the front end and the analyzer.

Change-Id: I3af67aaf3ad7ff2cca0cb245518570892ad473e9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109986
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Paul Berry 2019-07-23 12:55:11 +00:00 committed by commit-bot@chromium.org
parent 24c0507d73
commit baaeafa2bb
5 changed files with 14 additions and 14 deletions

View file

@ -9,8 +9,8 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_system.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/resolver/flow_analysis.dart';
import 'package:analyzer/src/generated/variable_type_provider.dart';
import 'package:front_end/src/fasta/flow_analysis/flow_analysis.dart';
/// The helper for performing flow analysis during resolution.
///

View file

@ -16,7 +16,6 @@ import 'export_test.dart' as export_;
import 'extension_method_test.dart' as extension_method;
import 'extension_override_test.dart' as extension_override;
import 'flow_analysis_test.dart' as flow_analysis;
import 'flow_analysis_unit_test.dart' as flow_analysis_unit;
import 'for_element_test.dart' as for_element;
import 'for_in_test.dart' as for_in;
import 'function_expression_invocation_test.dart'
@ -56,7 +55,6 @@ main() {
extension_method.main();
extension_override.main();
flow_analysis.main();
flow_analysis_unit.main();
for_element.main();
for_in.main();
function_expression_invocation.main();

View file

@ -95,7 +95,7 @@ class FlowAnalysis<Statement, Expression, Variable, Type> {
/// erroneous code, it's possible that a variable might be used before its
/// declaration.
final Set<Variable> _referencedVariables =
_assertionsEnabled ? <Variable>{} : null;
_assertionsEnabled ? Set<Variable>() : null;
factory FlowAnalysis(
NodeOperations<Expression> nodeOperations,

View file

@ -2,7 +2,7 @@
// 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 'package:analyzer/src/dart/resolver/flow_analysis.dart';
import 'package:front_end/src/fasta/flow_analysis/flow_analysis.dart';
import 'package:test/test.dart';
main() {
@ -295,7 +295,7 @@ main() {
.add(objectQVar)
.add(intQVar)
.promote(h, objectQVar, _Type('int'));
var s2 = s1.removePromotedAll({intQVar});
var s2 = s1.removePromotedAll([intQVar].toSet());
expect(s2, same(s1));
});
@ -306,7 +306,7 @@ main() {
.add(intQVar)
.promote(h, objectQVar, _Type('int'))
.promote(h, intQVar, _Type('int'));
var s2 = s1.removePromotedAll({intQVar});
var s2 = s1.removePromotedAll([intQVar].toSet());
expect(s2.reachable, true);
expect(s2.notAssigned, same(s1.notAssigned));
_Type.allowComparisons(() {
@ -320,12 +320,13 @@ main() {
var h = _Harness();
var reachable = State<_Var, _Type>(true);
var unreachable = reachable.setReachable(false);
expect(reachable.restrict(h, emptySet, reachable, {}), same(reachable));
expect(reachable.restrict(h, emptySet, unreachable, {}),
expect(
reachable.restrict(h, emptySet, reachable, Set()), same(reachable));
expect(reachable.restrict(h, emptySet, unreachable, Set()),
same(unreachable));
expect(unreachable.restrict(h, emptySet, unreachable, {}),
expect(unreachable.restrict(h, emptySet, unreachable, Set()),
same(unreachable));
expect(unreachable.restrict(h, emptySet, unreachable, {}),
expect(unreachable.restrict(h, emptySet, unreachable, Set()),
same(unreachable));
});
@ -338,7 +339,7 @@ main() {
var s0 = State<_Var, _Type>(true).add(a).add(b).add(c).add(d);
var s1 = s0.write(h, emptySet, a).write(h, emptySet, b);
var s2 = s0.write(h, emptySet, a).write(h, emptySet, c);
var result = s1.restrict(h, emptySet, s2, {});
var result = s1.restrict(h, emptySet, s2, Set());
expect(result.notAssigned.contains(a), false);
expect(result.notAssigned.contains(b), false);
expect(result.notAssigned.contains(c), false);
@ -353,7 +354,8 @@ main() {
var s0 = State<_Var, _Type>(true).add(x, assigned: true);
var s1 = thisType == null ? s0 : s0.promote(h, x, _Type(thisType));
var s2 = otherType == null ? s0 : s0.promote(h, x, _Type(otherType));
var result = s1.restrict(h, emptySet, s2, unsafe ? {x} : {});
var result =
s1.restrict(h, emptySet, s2, unsafe ? [x].toSet() : Set());
if (expectedType == null) {
expect(result.promoted, isNot(contains(x)));
} else {

View file

@ -4,7 +4,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type_system.dart';
import 'package:analyzer/src/dart/resolver/flow_analysis.dart';
import 'package:front_end/src/fasta/flow_analysis/flow_analysis.dart';
import 'package:nnbd_migration/src/decorated_type.dart';
import 'package:nnbd_migration/src/node_builder.dart';