Migrate the remaining files in server's tools directory

Change-Id: I8388cde7fc9f7904324b41a3fff31cec88e42a6c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390804
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Brian Wilkerson
2024-10-18 17:03:00 +00:00
committed by Commit Queue
parent 6a9a4f0d0c
commit 83dc895d18
7 changed files with 137 additions and 131 deletions
@@ -1492,6 +1492,7 @@ test/verify_error_fix_status_test.dart
test/verify_no_utf8_encode_test.dart
test/verify_sorted_test.dart
test/verify_tests_test.dart
tool/bulk_fix/parse_utils.dart
tool/bulk_fix/supported_diagnostics.dart
tool/bulk_fix/supported_lints.dart
tool/code_completion/benchmark/flutter.dart
@@ -1504,6 +1505,11 @@ tool/code_completion/corpus.dart
tool/code_completion/implicit_type_declarations.dart
tool/code_completion/metrics_util.dart
tool/code_completion/output_utilities.dart
tool/code_completion/completion_metrics.dart
tool/code_completion/flutter_metrics.dart
tool/code_completion/relevance_metrics.dart
tool/code_completion/relevance_table_generator.dart
tool/code_completion/visitors.dart
tool/codebase/failing_tests.dart
tool/generate_testing_package.dart
tool/instrumentation/log/log.dart
@@ -29,10 +29,10 @@ class BulkFixDetails {
.getResolvedUnit(file.absolute.path) as ResolvedUnitResult;
for (var classDecl
in resolvedFile.unit.declarations.whereType<ClassDeclaration>()) {
var classElement = classDecl.declaredElement;
var classElement = classDecl.declaredFragment?.element;
if (classElement != null &&
classElement.allSupertypes.any(
(element) => element.element.name == 'CorrectionProducer')) {
(element) => element.element3.name == 'CorrectionProducer')) {
var correctionName = classDecl.name.lexeme;
for (var method in classDecl.members.whereType<MethodDeclaration>()) {
@@ -24,23 +24,22 @@ import 'package:analyzer/dart/analysis/analysis_context.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart'
import 'package:analyzer/dart/element/element2.dart'
show
ClassMemberElement,
CompilationUnitElement,
Element,
EnumElement,
ExecutableElement,
ExtensionElement,
FieldElement,
FunctionElement,
InterfaceElement,
LocalVariableElement,
MixinElement,
ParameterElement,
PrefixElement,
TypeParameterElement,
VariableElement;
Element2,
EnumElement2,
ExecutableElement2,
ExtensionElement2,
FieldElement2,
FormalParameterElement,
InterfaceElement2,
LibraryElement2,
LocalFunctionElement,
LocalVariableElement2,
MixinElement2,
PrefixElement2,
TypeParameterElement2,
VariableElement2;
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/util/performance/operation_performance.dart';
@@ -1589,24 +1588,24 @@ class CompletionResult {
var entity = expectedCompletion.syntacticEntity;
var element = _getElement(entity);
if (element != null) {
var parent = element.enclosingElement3;
if (parent is InterfaceElement || parent is ExtensionElement) {
var parent = element.enclosingElement2;
if (parent is InterfaceElement2 || parent is ExtensionElement2) {
if (_isStatic(element)) {
return CompletionGroup.staticMember;
} else {
return CompletionGroup.instanceMember;
}
} else if (parent is CompilationUnitElement &&
element is! InterfaceElement &&
element is! ExtensionElement) {
} else if (parent is LibraryElement2 &&
element is! InterfaceElement2 &&
element is! ExtensionElement2) {
return CompletionGroup.topLevelMember;
}
if (element is EnumElement) {
if (element is EnumElement2) {
return CompletionGroup.enumElement;
} else if (element is MixinElement) {
} else if (element is MixinElement2) {
return CompletionGroup.mixinElement;
} else if (element is InterfaceElement) {
} else if (element is InterfaceElement2) {
if (entity is SimpleIdentifier &&
entity.parent is NamedType &&
entity.parent!.parent is ConstructorName &&
@@ -1614,17 +1613,17 @@ class CompletionResult {
return CompletionGroup.constructorElement;
}
return CompletionGroup.classElement;
} else if (element is ExtensionElement) {
} else if (element is ExtensionElement2) {
return CompletionGroup.extensionElement;
} else if (element is FunctionElement) {
} else if (element is LocalFunctionElement) {
return CompletionGroup.localFunctionElement;
} else if (element is LocalVariableElement) {
} else if (element is LocalVariableElement2) {
return CompletionGroup.localVariableElement;
} else if (element is ParameterElement) {
} else if (element is FormalParameterElement) {
return CompletionGroup.parameterElement;
} else if (element is PrefixElement) {
} else if (element is PrefixElement2) {
return CompletionGroup.prefixElement;
} else if (element is TypeParameterElement) {
} else if (element is TypeParameterElement2) {
return CompletionGroup.typeParameterElement;
}
}
@@ -1658,9 +1657,9 @@ class CompletionResult {
/// Return the element associated with the syntactic [entity], or `null` if
/// there is no such element.
Element? _getElement(SyntacticEntity entity) {
Element2? _getElement(SyntacticEntity entity) {
if (entity is SimpleIdentifier) {
var element = entity.staticElement;
var element = entity.element;
if (element != null) {
return element;
}
@@ -1669,16 +1668,16 @@ class CompletionResult {
var parent = node.parent;
if (parent is AssignmentExpression) {
if (node == parent.leftHandSide) {
return parent.readElement ?? parent.writeElement;
return parent.readElement2 ?? parent.writeElement2;
}
return null;
} else if (parent is PrefixExpression) {
if (parent.operator.type == TokenType.PLUS_PLUS ||
parent.operator.type == TokenType.MINUS_MINUS) {
return parent.readElement ?? parent.writeElement;
return parent.readElement2 ?? parent.writeElement2;
}
} else if (parent is PostfixExpression) {
return parent.readElement ?? parent.writeElement;
return parent.readElement2 ?? parent.writeElement2;
}
node = parent;
}
@@ -1688,14 +1687,12 @@ class CompletionResult {
/// Return `true` if the [element] is static (either top-level or a static
/// member of a class or extension).
bool _isStatic(Element element) {
if (element is ClassMemberElement) {
bool _isStatic(Element2 element) {
if (element is ExecutableElement2) {
return element.isStatic;
} else if (element is ExecutableElement) {
} else if (element is FieldElement2) {
return element.isStatic;
} else if (element is FieldElement) {
return element.isStatic;
} else if (element is VariableElement) {
} else if (element is VariableElement2) {
return element.isStatic;
}
return true;
@@ -136,15 +136,17 @@ class FlutterDataCollector extends RecursiveAstVisitor<void> {
void visitInstanceCreationExpression(InstanceCreationExpression node) {
var previousParentWidget = parentWidget;
if (node.isWidgetCreation) {
var element = node.constructorName.staticElement;
var element = node.constructorName.element;
if (element == null) {
throw StateError(
'Unresolved constructor name: ${node.constructorName}');
}
var childWidget = element.enclosingElement3.name;
if (!element.librarySource.uri
.toString()
.startsWith('package:flutter/')) {
var childWidget = element.enclosingElement2.name!;
var library = element.library2;
if (library != null &&
!library.firstFragment.source.uri
.toString()
.startsWith('package:flutter/')) {
childWidget = 'user-defined';
}
data.recordWidgetCreation(childWidget, parentWidget);
@@ -7,7 +7,7 @@ import 'dart:math' as math;
import 'package:_fe_analyzer_shared/src/base/syntactic_entity.dart';
import 'package:analysis_server/src/protocol_server.dart'
show convertElementToElementKind, ElementKind;
show convertElementToElementKind2, ElementKind;
import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/dart/analysis/context_root.dart';
@@ -15,15 +15,15 @@ import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart'
import 'package:analyzer/dart/element/element2.dart'
show
Element,
ExecutableElement,
ExtensionElement,
InterfaceElement,
LibraryElement,
ParameterElement,
PropertyAccessorElement;
Element2,
ExecutableElement2,
ExtensionElement2,
InterfaceElement2,
LibraryElement2,
FormalParameterElement,
SetterElement;
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/dart/element/type_system.dart';
@@ -268,7 +268,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
InheritanceManager3 inheritanceManager = InheritanceManager3();
/// The library containing the compilation unit being visited.
late LibraryElement enclosingLibrary;
late LibraryElement2 enclosingLibrary;
/// A flag indicating whether we are currently in a context in which type
/// parameters are visible.
@@ -484,7 +484,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
@override
void visitCompilationUnit(CompilationUnit node) {
enclosingLibrary = node.declaredElement!.library;
enclosingLibrary = node.declaredFragment!.element;
typeProvider = enclosingLibrary.typeProvider;
typeSystem = enclosingLibrary.typeSystem;
inheritanceManager = InheritanceManager3();
@@ -770,7 +770,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
// There are no completions.
var contextType = featureComputer.computeContextType(node, node.offset);
if (contextType != null) {
var memberType = _returnType(node.staticElement);
var memberType = _returnType(node.element);
if (memberType != null) {
_recordTypeRelationships(
'function expression invocation', contextType, memberType,
@@ -967,11 +967,13 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
// There are no completions.
data.recordPercentage(
'Methods with type parameters', node.typeParameters != null);
var element = node.declaredElement!;
if (!element.isStatic && element.enclosingElement3 is InterfaceElement) {
var overriddenMembers = inheritanceManager.getOverridden2(
element.enclosingElement3 as InterfaceElement,
Name(element.librarySource.uri, element.name));
var fragment = node.declaredFragment!;
var element = fragment.element;
var enclosingElement = element.enclosingElement2;
if (!element.isStatic && enclosingElement is InterfaceElement2) {
var overriddenMembers = inheritanceManager.getOverridden4(
enclosingElement,
Name(fragment.libraryFragment.source.uri, element.name!));
if (overriddenMembers != null) {
// Consider limiting this to the most immediate override. If the
// signature of a method is changed by one of the overrides, then it
@@ -988,7 +990,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
@override
void visitMethodInvocation(MethodInvocation node) {
var member = node.methodName.staticElement;
var member = node.methodName.element;
_recordMemberDepth(node.target?.staticType, member);
if (node.target is SuperExpression) {
var enclosingMethod = node.thisOrAncestorOfType<MethodDeclaration>();
@@ -1115,7 +1117,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
@override
void visitPropertyAccess(PropertyAccess node) {
var member = node.propertyName.staticElement;
var member = node.propertyName.element;
_recordMemberDepth(node.target?.staticType, member);
if (node.target is SuperExpression) {
var enclosingMethod = node.thisOrAncestorOfType<MethodDeclaration>();
@@ -1127,7 +1129,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
}
}
}
if (!(member is PropertyAccessorElement && member.isSetter)) {
if (member is! SetterElement) {
var contextType = featureComputer.computeContextType(node, node.offset);
if (contextType != null) {
var memberType = _returnType(member);
@@ -1398,15 +1400,15 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// 2: top-level decl
/// 3: class member
/// 4+: local function
int _depth(Element element) {
if (element.library != enclosingLibrary) {
int _depth(Element2 element) {
if (element.library2 != enclosingLibrary) {
return 0;
}
var depth = 0;
Element? currentElement = element;
Element2? currentElement = element;
while (currentElement != enclosingLibrary) {
depth++;
currentElement = currentElement?.enclosingElement3;
currentElement = currentElement?.enclosingElement2;
}
return depth;
}
@@ -1426,8 +1428,8 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// Return the element associated with the left-most identifier that is a
/// child of the [node].
Element? _leftMostElement(AstNode node) =>
_leftMostIdentifier(node)?.staticElement;
Element2? _leftMostElement(AstNode node) =>
_leftMostIdentifier(node)?.element;
/// Return the left-most child of the [node] if it is a simple identifier, or
/// `null` if the left-most child is not a simple identifier. Comments and
@@ -1453,19 +1455,19 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// identifier that is a child of the [node].
ElementKind? _leftMostKind(AstNode node) {
if (node is InstanceCreationExpression) {
return convertElementToElementKind(node.constructorName.staticElement!);
return convertElementToElementKind2(node.constructorName.element!);
}
var element = _leftMostElement(node);
if (element == null) {
return null;
}
if (element is InterfaceElement) {
if (element is InterfaceElement2) {
var parent = node.parent;
if (parent is Annotation && parent.arguments != null) {
element = parent.element!;
element = parent.element2!;
}
}
return convertElementToElementKind(element);
return convertElementToElementKind2(element);
}
/// Return the left-most token that is a child of the [node].
@@ -1482,22 +1484,22 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// Return the number of functions between the [reference] and the [function]
/// in which the referenced parameter is declared.
int _parameterReferenceDepth(AstNode? reference, Element function) {
int _parameterReferenceDepth(AstNode? reference, Element2 function) {
var depth = 0;
var node = reference;
while (node != null) {
if (node is MethodDeclaration) {
if (node.declaredElement == function) {
if (node.declaredFragment?.element == function) {
return depth;
}
depth++;
} else if (node is ConstructorDeclaration) {
if (node.declaredElement == function) {
if (node.declaredFragment?.element == function) {
return depth;
}
depth++;
} else if (node is FunctionExpression) {
if (node.declaredElement == function) {
if (node.declaredFragment?.element == function) {
return depth;
}
depth++;
@@ -1565,39 +1567,39 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// Record the distance between the static type of the target (the
/// [targetType]) and the [member] to which the reference was resolved.
void _recordMemberDepth(DartType? targetType, Element? member) {
void _recordMemberDepth(DartType? targetType, Element2? member) {
if (member == null) {
return;
}
if (targetType is InterfaceType) {
var targetClass = targetType.element;
var extension = member.thisOrAncestorOfType<ExtensionElement>();
var targetClass = targetType.element3;
var extension = member.thisOrAncestorOfType2<ExtensionElement2>();
if (extension != null) {
_recordDistance('member (extension)', 0);
return;
}
// TODO(brianwilkerson): It might be interesting to also know whether the
// [element] was found in a class, interface, or mixin.
var memberClass = member.thisOrAncestorOfType<InterfaceElement>();
var memberClass = member.thisOrAncestorOfType2<InterfaceElement2>();
if (memberClass != null) {
/// Return the distance between the [targetClass] and the [memberClass]
/// along the superclass chain. This includes all of the implicit
/// superclasses caused by mixins.
int getSuperclassDepth() {
var depth = 0;
InterfaceElement? currentClass = targetClass;
InterfaceElement2? currentClass = targetClass;
while (currentClass != null) {
if (currentClass == memberClass) {
return depth;
}
for (var mixin in currentClass.mixins.reversed) {
depth++;
if (mixin.element == memberClass) {
if (mixin.element3 == memberClass) {
return depth;
}
}
depth++;
currentClass = currentClass.supertype?.element;
currentClass = currentClass.supertype?.element3;
}
return -1;
}
@@ -1606,17 +1608,17 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// includes all of the implicit superclasses caused by mixins.
int getTargetDepth() {
var depth = 0;
InterfaceElement? currentClass = targetClass;
InterfaceElement2? currentClass = targetClass;
while (currentClass != null) {
depth += currentClass.mixins.length + 1;
currentClass = currentClass.supertype?.element;
currentClass = currentClass.supertype?.element3;
}
return depth;
}
var superclassDepth = getSuperclassDepth();
var interfaceDepth =
featureComputer.inheritanceDistance(targetClass, memberClass);
featureComputer.inheritanceDistance2(targetClass, memberClass);
if (superclassDepth >= 0) {
_recordDistance('member (superclass)', superclassDepth);
} else if (interfaceDepth >= 0) {
@@ -1635,19 +1637,19 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
}
void _recordOverride(
ExecutableElement override, ExecutableElement overridden) {
var positionalInOverride = <ParameterElement>[];
var namedInOverride = <String, ParameterElement>{};
var positionalInOverridden = <ParameterElement>[];
var namedInOverridden = <String, ParameterElement>{};
for (var param in override.parameters) {
ExecutableElement2 override, ExecutableElement2 overridden) {
var positionalInOverride = <FormalParameterElement>[];
var namedInOverride = <String, FormalParameterElement>{};
var positionalInOverridden = <FormalParameterElement>[];
var namedInOverridden = <String, FormalParameterElement>{};
for (var param in override.formalParameters) {
if (param.isPositional) {
positionalInOverride.add(param);
} else {
namedInOverride[param.name] = param;
}
}
for (var param in overridden.parameters) {
for (var param in overridden.formalParameters) {
if (param.isPositional) {
positionalInOverridden.add(param);
} else {
@@ -1655,8 +1657,8 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
}
}
void recordParameterOverride(ParameterElement? overrideParameter,
ParameterElement? overriddenParameter) {
void recordParameterOverride(FormalParameterElement? overrideParameter,
FormalParameterElement? overriddenParameter) {
var overrideType = overrideParameter?.type;
var overriddenType = overriddenParameter?.type;
if (overrideType == null ||
@@ -1686,9 +1688,9 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// that is a child of the given [node].
void _recordReferenceDepth(AstNode? node) {
var reference = _leftMostIdentifier(node);
var element = reference?.staticElement;
if (element is ParameterElement) {
var definingElement = element.enclosingElement3!;
var element = reference?.element;
if (element is FormalParameterElement) {
var definingElement = element.enclosingElement2!;
var depth = _parameterReferenceDepth(node, definingElement);
_recordDistance('function depth of referenced parameter', depth);
} else if (element != null) {
@@ -1752,7 +1754,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// Record information about how the argument as a whole and the first token
/// in the expression match the type of the associated parameter.
void _recordTypeMatch(Expression argument) {
var parameterType = argument.staticParameterElement?.type;
var parameterType = argument.correspondingParameter?.type;
if (parameterType == null || parameterType is DynamicType) {
return;
}
@@ -1772,8 +1774,8 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
if (identifier != null) {
var firstTokenType = identifier.staticType;
if (firstTokenType == null) {
var element = identifier.staticElement;
if (element is InterfaceElement) {
var element = identifier.element;
if (element is InterfaceElement2) {
// This is effectively treating a reference to a class name as having
// the same type as an instance of the class, which isn't valid, but
// on the other hand, the spec doesn't define the static type of a
@@ -1806,20 +1808,20 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
argumentType is InterfaceType &&
parameterType is InterfaceType) {
int distance;
if (parameterType.element == typeProvider.futureOrElement) {
if (parameterType.element3 == typeProvider.futureOrElement2) {
var typeArgument = parameterType.typeArguments[0];
distance = featureComputer.inheritanceDistance(
argumentType.element, typeProvider.futureElement);
distance = featureComputer.inheritanceDistance2(
argumentType.element3, typeProvider.futureElement2);
if (typeArgument is InterfaceType) {
var argDistance = featureComputer.inheritanceDistance(
argumentType.element, typeArgument.element);
var argDistance = featureComputer.inheritanceDistance2(
argumentType.element3, typeArgument.element3);
if (distance < 0 || (argDistance >= 0 && argDistance < distance)) {
distance = argDistance;
}
}
} else {
distance = featureComputer.inheritanceDistance(
argumentType.element, parameterType.element);
distance = featureComputer.inheritanceDistance2(
argumentType.element3, parameterType.element3);
}
data.recordDistance('Subtype of context type ($descriptor)', distance);
data.recordDistance('Subtype of context type (all)', distance);
@@ -1835,8 +1837,8 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// Return the return type of the [element], or `null` if the element doesn't
/// have a return type.
DartType? _returnType(Element? element) {
if (element is ExecutableElement) {
DartType? _returnType(Element2? element) {
if (element is ExecutableElement2) {
return element.returnType;
}
return null;
@@ -14,8 +14,8 @@ import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart'
show Element, InterfaceElement, LibraryElement;
import 'package:analyzer/dart/element/element2.dart'
show Element2, InterfaceElement2, LibraryElement2;
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/dart/element/type_system.dart';
import 'package:analyzer/diagnostic/diagnostic.dart';
@@ -300,7 +300,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
late InheritanceManager3 inheritanceManager = InheritanceManager3();
/// The library containing the compilation unit being visited.
late LibraryElement enclosingLibrary;
late LibraryElement2 enclosingLibrary;
/// The type provider associated with the current compilation unit.
late TypeProvider typeProvider;
@@ -485,7 +485,7 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
@override
void visitCompilationUnit(CompilationUnit node) {
enclosingLibrary = node.declaredElement!.library;
enclosingLibrary = node.declaredFragment!.element;
typeProvider = enclosingLibrary.typeProvider;
typeSystem = enclosingLibrary.typeSystem;
inheritanceManager = InheritanceManager3();
@@ -1314,8 +1314,8 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// Return the element associated with the left-most identifier that is a
/// child of the [node].
Element? _leftMostElement(AstNode node) =>
_leftMostIdentifier(node)?.staticElement;
Element2? _leftMostElement(AstNode node) =>
_leftMostIdentifier(node)?.element;
/// Return the left-most child of the [node] if it is a simple identifier, or
/// `null` if the left-most child is not a simple identifier. Comments and
@@ -1341,20 +1341,19 @@ class RelevanceDataCollector extends RecursiveAstVisitor<void> {
/// identifier that is a child of the [node].
ElementKind? _leftMostKind(AstNode node) {
if (node is InstanceCreationExpression) {
return featureComputer
.computeElementKind(node.constructorName.staticElement!);
return featureComputer.computeElementKind2(node.constructorName.element!);
}
var element = _leftMostElement(node);
if (element == null) {
return null;
}
if (element is InterfaceElement) {
if (element is InterfaceElement2) {
var parent = node.parent;
if (parent is Annotation && parent.arguments != null) {
element = parent.element!;
element = parent.element2!;
}
}
return featureComputer.computeElementKind(element);
return featureComputer.computeElementKind2(element);
}
/// Return the left-most token that is a child of the [node].
@@ -9,7 +9,7 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart' as element;
import 'package:analyzer/dart/element/element2.dart' as element;
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/source/line_info.dart';
@@ -640,7 +640,7 @@ class ExpectedCompletionsVisitor extends RecursiveAstVisitor<void> {
void visitSimpleIdentifier(SimpleIdentifier node) {
if (_doIncludeSimpleIdentifier(node)) {
protocol.ElementKind? elementKind;
var kind = node.staticElement?.kind;
var kind = node.element?.kind;
if (kind != null) {
elementKind = protocol.convertElementKind(kind);
@@ -827,8 +827,8 @@ class ExpectedCompletionsVisitor extends RecursiveAstVisitor<void> {
// The null check, node.staticElement == null, handles the cases where the
// invocation is unknown, i.e. the 'arg' in 'foo.bar(arg: 1)', where foo is
// dynamic.
if ((node.staticElement == null ||
node.staticElement?.kind == element.ElementKind.PARAMETER) &&
if ((node.element == null ||
node.element?.kind == element.ElementKind.PARAMETER) &&
node.parent is Label &&
node.thisOrAncestorOfType<ArgumentList>() != null) {
return false;