// Copyright (c) 2019, 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. // @dart = 2.9 import 'dart:io' show Directory, Platform; import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id; import 'package:_fe_analyzer_shared/src/testing/id_testing.dart' show DataInterpreter, runTests; import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'; import 'package:front_end/src/testing/id_testing_helper.dart'; import 'package:kernel/ast.dart' hide Variance; main(List args) async { Directory dataDir = new Directory.fromUri(Platform.script.resolve( '../../../_fe_analyzer_shared/test/flow_analysis/nullability/data')); await runTests(dataDir, args: args, createUriForFileName: createUriForFileName, onFailure: onFailure, runTest: runTestFor( const NullabilityDataComputer(), [cfeNonNullableOnlyConfig])); } class NullabilityDataComputer extends DataComputer { const NullabilityDataComputer(); @override DataInterpreter get dataValidator => const StringDataInterpreter(); /// Function that computes a data mapping for [member]. /// /// Fills [actualMap] with the data. void computeMemberData( TestConfig config, InternalCompilerResult compilerResult, Member member, Map> actualMap, {bool verbose}) { member.accept(new NullabilityDataExtractor(compilerResult, actualMap)); } } class NullabilityDataExtractor extends CfeDataExtractor { NullabilityDataExtractor(InternalCompilerResult compilerResult, Map> actualMap) : super(compilerResult, actualMap); @override String computeNodeValue(Id id, TreeNode node) { if (node is VariableGet && node.promotedType != null) { if (node.variable.type.nullability != Nullability.nonNullable && node.promotedType.nullability == Nullability.nonNullable) { return 'nonNullable'; } } return null; } }