Get LineInfo from the element's unit instead of re-parsing the file.

Change-Id: I69681f299698458583bde63c853ead63a4cd3641
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/234665
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov
2022-03-01 19:39:38 +00:00
committed by Commit Bot
parent e2eb3751b8
commit eff9c288a4
18 changed files with 80 additions and 127 deletions
+14 -4
View File
@@ -34,11 +34,21 @@ class CodeReference {
location.columnNumber, _computeEnclosingName(node));
}
factory CodeReference.fromElement(
Element element, LineInfo Function(String) getLineInfo) {
var path = element.source!.fullName;
factory CodeReference.fromElement(Element element) {
var unitElement = element.thisOrAncestorOfType<CompilationUnitElement>();
if (unitElement == null) {
var enclosingElement = element.enclosingElement;
if (enclosingElement is LibraryElement) {
unitElement = enclosingElement.definingCompilationUnit;
} else {
throw StateError('Unexpected element: $element');
}
}
var path = unitElement.source.fullName;
var offset = element.nameOffset;
var location = getLineInfo(path).getLocation(offset);
var location = unitElement.lineInfo!.getLocation(offset);
return CodeReference(path, offset, location.lineNumber,
location.columnNumber, _computeElementFullName(element));
}
+6 -12
View File
@@ -546,17 +546,14 @@ class MigrationCliRunner implements DartFixListenerClient {
resourceProvider.getFile(s).exists)
.toSet();
NonNullableFix createNonNullableFix(
DartFixListener listener,
ResourceProvider resourceProvider,
LineInfo Function(String path) getLineInfo,
Object? bindAddress,
NonNullableFix createNonNullableFix(DartFixListener listener,
ResourceProvider resourceProvider, Object? bindAddress,
{List<String> included = const <String>[],
int? preferredPort,
String? summaryPath,
required String sdkPath}) {
return NonNullableFix(listener, resourceProvider, getLineInfo, bindAddress,
logger, (String? path) => shouldBeMigrated(path!),
return NonNullableFix(listener, resourceProvider, bindAddress, logger,
(String? path) => shouldBeMigrated(path!),
included: included,
preferredPort: preferredPort,
summaryPath: summaryPath,
@@ -661,8 +658,8 @@ Exception details:
_fixCodeProcessor = _FixCodeProcessor(analysisContext, this);
_dartFixListener = DartFixListener(
DriverProviderImpl(resourceProvider, analysisContext), this);
nonNullableFix = createNonNullableFix(_dartFixListener!, resourceProvider,
_fixCodeProcessor!.getLineInfo, computeBindAddress(),
nonNullableFix = createNonNullableFix(
_dartFixListener!, resourceProvider, computeBindAddress(),
included: [options.directory],
preferredPort: options.previewPort,
summaryPath: options.summary,
@@ -1000,9 +997,6 @@ class _FixCodeProcessor extends Object {
bool get isPreviewServerRunning => _task?.isPreviewServerRunning ?? false;
LineInfo getLineInfo(String path) =>
(context.currentSession.getFile(path) as FileResult).lineInfo;
void prepareToRerun() {
var driver = context.driver;
pathsToProcess = _migrationCli.computePathsToProcess(context);
@@ -321,7 +321,6 @@ abstract class NullabilityMigration {
/// should be warned about or removed (in the way specified by
/// [removeViaComments]).
factory NullabilityMigration(NullabilityMigrationListener? listener,
LineInfo Function(String) getLineInfo,
{bool? permissive,
NullabilityMigrationInstrumentation? instrumentation,
bool? removeViaComments,
@@ -6,7 +6,6 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/generated/element_type_provider.dart';
import 'package:nnbd_migration/src/decorated_type.dart';
@@ -22,10 +21,7 @@ class AlreadyMigratedCodeDecorator {
final TypeProvider _typeProvider;
final LineInfo Function(String) _getLineInfo;
AlreadyMigratedCodeDecorator(
this._graph, this._typeProvider, this._getLineInfo);
AlreadyMigratedCodeDecorator(this._graph, this._typeProvider);
/// Transforms [type], which should have come from code that has already been
/// migrated to NNBD, into the corresponding [DecoratedType].
@@ -118,7 +114,7 @@ class AlreadyMigratedCodeDecorator {
}
return [
for (var t in allSupertypes)
decorate(t, class_, NullabilityNodeTarget.element(class_, _getLineInfo))
decorate(t, class_, NullabilityNodeTarget.element(class_))
];
}
}
@@ -57,8 +57,6 @@ class NonNullableFix {
final ResourceProvider resourceProvider;
final LineInfo Function(String) _getLineInfo;
/// The HTTP server that serves the preview tool.
HttpPreviewServer? _server;
@@ -85,8 +83,8 @@ class NonNullableFix {
/// Completes when the server has been shutdown.
late Completer<void> serverIsShutdown;
NonNullableFix(this.listener, this.resourceProvider, this._getLineInfo,
this.bindAddress, this._logger, this.shouldBeMigratedFunction,
NonNullableFix(this.listener, this.resourceProvider, this.bindAddress,
this._logger, this.shouldBeMigratedFunction,
{List<String> included = const [],
this.preferredPort,
this.summaryPath,
@@ -176,7 +174,7 @@ class NonNullableFix {
? null
: MigrationSummary(summaryPath, resourceProvider, includedRoot));
adapter = NullabilityMigrationAdapter(listener);
migration = NullabilityMigration(adapter, _getLineInfo,
migration = NullabilityMigration(adapter,
permissive: true, instrumentation: instrumentationListener);
}
+12 -20
View File
@@ -42,8 +42,6 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
@override
final Source? source;
final LineInfo Function(String) _getLineInfo;
/// If the parameters of a function or method are being visited, the
/// [DecoratedType]s of the function's named parameters that have been seen so
/// far. Otherwise `null`.
@@ -72,7 +70,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
bool _visitingExternalDeclaration = false;
NodeBuilder(this._variables, this.source, this.listener, this._graph,
this._typeProvider, this._getLineInfo,
this._typeProvider,
{this.instrumentation});
NullabilityNodeTarget get safeTarget {
@@ -95,7 +93,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
var exceptionElement = node.exceptionParameter?.staticElement;
var target = exceptionElement == null
? NullabilityNodeTarget.text('exception type')
: NullabilityNodeTarget.element(exceptionElement, _getLineInfo);
: NullabilityNodeTarget.element(exceptionElement);
DecoratedType? exceptionType = _pushNullabilityNodeTarget(
target, () => node.exceptionType?.accept(this));
if (node.exceptionParameter != null) {
@@ -167,8 +165,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
assert(constructorElement.isSynthetic);
var decoratedReturnType =
_createDecoratedTypeForClass(classElement, node);
var target =
NullabilityNodeTarget.element(constructorElement, _getLineInfo);
var target = NullabilityNodeTarget.element(constructorElement);
var functionType = DecoratedType.forImplicitFunction(
_typeProvider, constructorElement.type, _graph.never, _graph, target,
returnType: decoratedReturnType);
@@ -217,7 +214,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
DecoratedType? visitDeclaredIdentifier(DeclaredIdentifier node) {
node.metadata.accept(this);
var declaredElement = node.declaredElement!;
var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
var target = NullabilityNodeTarget.element(declaredElement);
DecoratedType? type =
_pushNullabilityNodeTarget(target, () => node.type?.accept(this));
if (type == null) {
@@ -267,13 +264,12 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
for (var item in node.constants) {
var declaredElement = item.declaredElement!;
var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
var target = NullabilityNodeTarget.element(declaredElement);
_variables!.recordDecoratedElementType(declaredElement,
DecoratedType(classElement.thisType, makeNonNullNode(target, item)));
}
final valuesGetter = classElement.getGetter('values')!;
var valuesTarget =
NullabilityNodeTarget.element(valuesGetter, _getLineInfo);
var valuesTarget = NullabilityNodeTarget.element(valuesGetter);
_variables!.recordDecoratedElementType(
valuesGetter,
DecoratedType(valuesGetter.type, makeNonNullNode(valuesTarget),
@@ -363,7 +359,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
var functionType = functionElement.type;
var returnType = node.returnType;
DecoratedType? decoratedReturnType;
var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
var target = NullabilityNodeTarget.element(declaredElement);
if (returnType != null) {
_pushNullabilityNodeTarget(target.returnType(), () {
decoratedReturnType = returnType.accept(this);
@@ -410,8 +406,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
node.metadata.accept(this);
DecoratedType? decoratedFunctionType;
node.typeParameters?.accept(this);
var target =
NullabilityNodeTarget.element(node.declaredElement!, _getLineInfo);
var target = NullabilityNodeTarget.element(node.declaredElement!);
_pushNullabilityNodeTarget(target, () {
decoratedFunctionType = node.functionType!.accept(this);
});
@@ -647,8 +642,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
node.metadata.accept(this);
var typeAnnotation = node.type;
var declaredType = _pushNullabilityNodeTarget(
NullabilityNodeTarget.element(
node.variables.first.declaredElement!, _getLineInfo),
NullabilityNodeTarget.element(node.variables.first.declaredElement!),
() => typeAnnotation?.accept(this));
var hint = getPrefixHint(node.firstTokenAfterCommentAndMetadata);
if (hint != null && hint.kind == HintCommentKind.late_) {
@@ -663,8 +657,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
var declaredElement = variable.declaredElement;
var type = declaredType;
if (type == null) {
var target =
NullabilityNodeTarget.element(declaredElement!, _getLineInfo);
var target = NullabilityNodeTarget.element(declaredElement!);
type = DecoratedType.forImplicitType(
_typeProvider, declaredElement.type, _graph, target);
instrumentation?.implicitType(source, node, type);
@@ -747,7 +740,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
}
var functionType = declaredElement.type;
DecoratedType? decoratedReturnType;
var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
var target = NullabilityNodeTarget.element(declaredElement);
if (returnType != null) {
_pushNullabilityNodeTarget(target.returnType(), () {
decoratedReturnType = returnType.accept(this);
@@ -931,8 +924,7 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType>
}
var decoratedSupertypes = <ClassElement, DecoratedType?>{};
_pushNullabilityNodeTarget(
NullabilityNodeTarget.element(declaredElement, _getLineInfo).supertype,
() {
NullabilityNodeTarget.element(declaredElement).supertype, () {
for (var supertype in supertypes) {
DecoratedType? decoratedSupertype;
if (supertype == null) {
@@ -49,8 +49,6 @@ class NullabilityMigrationImpl implements NullabilityMigration {
final _decoratedTypeParameterBounds = DecoratedTypeParameterBounds();
final LineInfo Function(String) _getLineInfo;
/// Map from [Source] object to a boolean indicating whether the source is
/// opted in to null safety.
final Map<Source, bool> _libraryOptInStatus = {};
@@ -77,28 +75,27 @@ class NullabilityMigrationImpl implements NullabilityMigration {
/// should be warned about or removed (in the way specified by
/// [removeViaComments]).
NullabilityMigrationImpl(NullabilityMigrationListener? listener,
LineInfo Function(String) getLineInfo,
{bool? permissive = false,
NullabilityMigrationInstrumentation? instrumentation,
bool? removeViaComments = false,
bool? warnOnWeakCode = true})
: this._(
listener,
NullabilityGraph(instrumentation: instrumentation),
permissive,
instrumentation,
removeViaComments,
warnOnWeakCode,
getLineInfo);
listener,
NullabilityGraph(instrumentation: instrumentation),
permissive,
instrumentation,
removeViaComments,
warnOnWeakCode,
);
NullabilityMigrationImpl._(
this.listener,
this._graph,
this._permissive,
this._instrumentation,
this.removeViaComments,
this.warnOnWeakCode,
this._getLineInfo) {
this.listener,
this._graph,
this._permissive,
this._instrumentation,
this.removeViaComments,
this.warnOnWeakCode,
) {
_instrumentation?.immutableNodes(_graph.never, _graph.always);
}
@@ -199,20 +196,15 @@ class NullabilityMigrationImpl implements NullabilityMigration {
_recordTransitiveImportExportOptInStatus(
result.libraryElement.exportedLibraries);
if (_variables == null) {
_variables = Variables(_graph, result.typeProvider, _getLineInfo,
_variables = Variables(_graph, result.typeProvider,
instrumentation: _instrumentation);
_decoratedClassHierarchy = DecoratedClassHierarchy(_variables, _graph);
}
var unit = result.unit;
try {
DecoratedTypeParameterBounds.current = _decoratedTypeParameterBounds;
unit.accept(NodeBuilder(
_variables,
unit.declaredElement!.source,
_permissive! ? listener : null,
_graph,
result.typeProvider,
_getLineInfo,
unit.accept(NodeBuilder(_variables, unit.declaredElement!.source,
_permissive! ? listener : null, _graph, result.typeProvider,
instrumentation: _instrumentation));
} finally {
DecoratedTypeParameterBounds.current = null;
@@ -4,7 +4,6 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:nnbd_migration/instrumentation.dart';
String _computeElementName(Element? element) {
@@ -29,8 +28,7 @@ String _computeElementName(Element? element) {
/// code is referenced by a given nullability node.
abstract class NullabilityNodeTarget {
/// Creates a [NullabilityNodeTarget] referring to a particular element.
factory NullabilityNodeTarget.element(
Element element, LineInfo Function(String) getLineInfo) =
factory NullabilityNodeTarget.element(Element element) =
_NullabilityNodeTarget_Element;
/// Creates a [NullabilityNodeTarget] with a simple text description.
@@ -111,10 +109,9 @@ class _NullabilityNodeTarget_Element extends NullabilityNodeTarget {
final CodeReference codeReference;
_NullabilityNodeTarget_Element(
Element element, LineInfo Function(String) getLineInfo)
_NullabilityNodeTarget_Element(Element element)
: name = _computeElementName(element),
codeReference = CodeReference.fromElement(element, getLineInfo),
codeReference = CodeReference.fromElement(element),
super._();
@override
+3 -6
View File
@@ -69,12 +69,9 @@ class Variables {
final NullabilityMigrationInstrumentation? instrumentation;
final LineInfo Function(String) _getLineInfo;
Variables(this._graph, this._typeProvider, this._getLineInfo,
{this.instrumentation})
Variables(this._graph, this._typeProvider, {this.instrumentation})
: _alreadyMigratedCodeDecorator =
AlreadyMigratedCodeDecorator(_graph, _typeProvider, _getLineInfo);
AlreadyMigratedCodeDecorator(_graph, _typeProvider);
/// Given a [class_], gets the decorated type information for the superclasses
/// it directly implements/extends/etc.
@@ -400,7 +397,7 @@ class Variables {
element = element.aliasedElement!;
}
var target = NullabilityNodeTarget.element(element, _getLineInfo);
var target = NullabilityNodeTarget.element(element);
if (element is FunctionTypedElement) {
decoratedType = _alreadyMigratedCodeDecorator.decorate(
element.preMigrationType, element, target);
@@ -5,7 +5,6 @@
import 'dart:convert';
import 'package:analyzer/dart/analysis/analysis_context.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/overlay_file_system.dart';
@@ -165,9 +164,6 @@ export 'package:test_core/test_core.dart';
return _getContext(path).driver;
}
LineInfo getLineInfo(String path) =>
(session.getFile(path) as FileResult).lineInfo;
void setUp() {
setupResourceProvider();
overlayResourceProvider = OverlayResourceProvider(resourceProvider);
@@ -10,7 +10,6 @@ import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer/src/test_utilities/find_element.dart';
import 'package:analyzer/src/test_utilities/find_node.dart';
@@ -353,7 +352,7 @@ class _AlreadyMigratedCodeDecoratorTestBase {
expect(decoratedSupertypes, hasLength(2));
// TODO(scheglov) Use location matcher.
withElement.checkObject(decoratedSupertypes[0],
withElement.checkExplicitlyNonNullable, 'Future (async.dart:1:79)');
withElement.checkExplicitlyNonNullable, 'Future (async.dart:7:16)');
// Since Future<T> is a subtype of FutureOr<T>, we consider FutureOr<T> to
// be an immediate supertype, even though the class declaration for Future
// doesn't mention FutureOr.
@@ -363,7 +362,7 @@ class _AlreadyMigratedCodeDecoratorTestBase {
withElement.checkExplicitlyNonNullable,
(t, displayName) => withElement.checkTypeParameter(
t!, withElement.checkExplicitlyNonNullable, typeParam, displayName),
'Future (async.dart:1:79)');
'Future (async.dart:7:16)');
}
Future<void> test_getImmediateSupertypes_generic() async {
@@ -492,8 +491,7 @@ class _ContextWithElement with EdgeTester {
NullabilityNode get always => graph.always;
AlreadyMigratedCodeDecorator get decorator {
return AlreadyMigratedCodeDecorator(
graph, typeProvider, (_) => LineInfo([0]));
return AlreadyMigratedCodeDecorator(graph, typeProvider);
}
NullabilityNode get never => graph.never;
+1 -1
View File
@@ -60,7 +60,7 @@ abstract class _ProvisionalApiTestBase extends AbstractContextTest {
newFile(path, content: input[path]!);
}
var listener = TestMigrationListener();
var migration = NullabilityMigration(listener, getLineInfo,
var migration = NullabilityMigration(listener,
permissive: _usePermissiveMode,
removeViaComments: removeViaComments,
warnOnWeakCode: warnOnWeakCode);
@@ -5,7 +5,6 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/generated/element_type_provider.dart';
import 'package:analyzer/src/generated/testing/test_type_provider.dart';
@@ -41,7 +40,7 @@ class DecoratedTypeTest extends Object
factory DecoratedTypeTest() {
var typeProvider = TestTypeProvider();
var graph = NullabilityGraph();
var variables = Variables(graph, typeProvider, _getLineInfo);
var variables = Variables(graph, typeProvider);
return DecoratedTypeTest._(graph, typeProvider, variables);
}
@@ -616,8 +615,6 @@ class DecoratedTypeTest extends Object
var decoratedType = function(dynamic_, positional: [xType], node: always);
expect(decoratedType.toString(), 'dynamic Function([$xType])?');
}
static LineInfo _getLineInfo(String path) => LineInfo([0]);
}
class _ElementTypeProvider extends ElementTypeProvider {
@@ -228,7 +228,7 @@ class NnbdMigrationTestBase extends AbstractAnalysisTest {
var listener = DartFixListener(server, ListenerClient());
var instrumentationListener = InstrumentationListener();
var adapter = NullabilityMigrationAdapter(listener);
var migration = NullabilityMigration(adapter, getLineInfo,
var migration = NullabilityMigration(adapter,
permissive: false,
instrumentation: instrumentationListener,
removeViaComments: removeViaComments,
@@ -144,7 +144,7 @@ abstract class _InstrumentationTestBase extends AbstractContextTest {
var sourcePath = convertPath('$testsPath/lib/test.dart');
newFile(sourcePath, content: content);
var listener = TestMigrationListener();
var migration = NullabilityMigration(listener, getLineInfo,
var migration = NullabilityMigration(listener,
instrumentation: _InstrumentationClient(this),
removeViaComments: removeViaComments,
warnOnWeakCode: warnOnWeakCode);
@@ -11,7 +11,6 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/file_system/file_system.dart' show ResourceProvider;
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart' as mock_sdk;
import 'package:args/args.dart';
@@ -63,17 +62,13 @@ class _ExceptionGeneratingInstrumentationListener
/// Specialization of [NonNullableFix] that generates artificial exceptions, so
/// that we can test they are properly propagated to top level.
class _ExceptionGeneratingNonNullableFix extends NonNullableFix {
_ExceptionGeneratingNonNullableFix(
DartFixListener listener,
ResourceProvider resourceProvider,
LineInfo Function(String) getLineInfo,
Object? bindAddress,
Logger logger,
_ExceptionGeneratingNonNullableFix(DartFixListener listener,
ResourceProvider resourceProvider, Object? bindAddress, Logger logger,
{List<String> included = const <String>[],
int? preferredPort,
String? summaryPath,
required String sdkPath})
: super(listener, resourceProvider, getLineInfo, bindAddress, logger,
: super(listener, resourceProvider, bindAddress, logger,
(String? path) => true,
included: included,
preferredPort: preferredPort,
@@ -141,25 +136,21 @@ class _MigrationCliRunner extends MigrationCliRunner {
_sortPaths(super.computePathsToProcess(context));
@override
NonNullableFix createNonNullableFix(
DartFixListener listener,
ResourceProvider resourceProvider,
LineInfo Function(String path) getLineInfo,
Object? bindAddress,
NonNullableFix createNonNullableFix(DartFixListener listener,
ResourceProvider resourceProvider, Object? bindAddress,
{List<String> included = const <String>[],
int? preferredPort,
String? summaryPath,
required String sdkPath}) {
if (cli._test.injectArtificialException) {
return _ExceptionGeneratingNonNullableFix(
listener, resourceProvider, getLineInfo, bindAddress, logger,
listener, resourceProvider, bindAddress, logger,
included: included,
preferredPort: preferredPort,
summaryPath: summaryPath,
sdkPath: sdkPath);
} else {
return super.createNonNullableFix(
listener, resourceProvider, getLineInfo, bindAddress,
return super.createNonNullableFix(listener, resourceProvider, bindAddress,
included: included,
preferredPort: preferredPort,
summaryPath: summaryPath,
@@ -304,9 +304,8 @@ class InstrumentedVariables extends Variables {
final _expressionChecks = <Expression, ExpressionChecksOrigin>{};
InstrumentedVariables(NullabilityGraph graph, TypeProvider typeProvider,
LineInfo Function(String) getLineInfo)
: super(graph, typeProvider, getLineInfo);
InstrumentedVariables(NullabilityGraph graph, TypeProvider typeProvider)
: super(graph, typeProvider);
/// Gets the [ExpressionChecks] associated with the given [expression].
ExpressionChecksOrigin? checkExpression(Expression expression) =>
@@ -370,9 +369,9 @@ class MigrationVisitorTestBase extends AbstractSingleUnitTest with EdgeTester {
Future<CompilationUnit> analyze(String code) async {
await resolveTestUnit(code);
variables = InstrumentedVariables(graph, typeProvider, getLineInfo);
testUnit!.accept(NodeBuilder(
variables, testSource, null, graph, typeProvider, getLineInfo));
variables = InstrumentedVariables(graph, typeProvider);
testUnit!
.accept(NodeBuilder(variables, testSource, null, graph, typeProvider));
return testUnit!;
}
+1 -4
View File
@@ -66,10 +66,7 @@ void main(List<String> args) async {
context.contextRoot.analyzedFiles().where((s) => s.endsWith('.dart'));
files.addAll(localFiles);
var session = context.currentSession;
LineInfo getLineInfo(String path) =>
(session.getFile(path) as FileResult).lineInfo;
var migration =
NullabilityMigration(listener, getLineInfo, permissive: true);
var migration = NullabilityMigration(listener, permissive: true);
for (var file in localFiles) {
var resolvedUnit =
await session.getResolvedUnit(file) as ResolvedUnitResult;