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:
committed by
Commit Bot
parent
e2eb3751b8
commit
eff9c288a4
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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!;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user