Skip to content

Commit

Permalink
Version 3.6.0-299.0.dev
Browse files Browse the repository at this point in the history
Merge 49654fb into dev
  • Loading branch information
Dart CI committed Sep 30, 2024
2 parents 19e8569 + 49654fb commit 20a610b
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 45 deletions.
4 changes: 4 additions & 0 deletions pkg/analysis_server/analyzer_use_new_elements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,14 @@ lib/src/services/correction/dart/convert_to_on_type.dart
lib/src/services/correction/dart/convert_to_raw_string.dart
lib/src/services/correction/dart/convert_to_set_literal.dart
lib/src/services/correction/dart/convert_to_super_parameters.dart
lib/src/services/correction/dart/convert_to_switch_expression.dart
lib/src/services/correction/dart/convert_to_where_type.dart
lib/src/services/correction/dart/convert_to_wildcard_pattern.dart
lib/src/services/correction/dart/convert_to_wildcard_variable.dart
lib/src/services/correction/dart/create_constructor_for_final_fields.dart
lib/src/services/correction/dart/create_field.dart
lib/src/services/correction/dart/create_function.dart
lib/src/services/correction/dart/create_getter.dart
lib/src/services/correction/dart/create_local_variable.dart
lib/src/services/correction/dart/create_no_such_method.dart
lib/src/services/correction/dart/create_parameter.dart
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/utilities/extensions/ast.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/source/source_range.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
Expand All @@ -19,13 +19,13 @@ import 'package:analyzer_plugin/utilities/range_factory.dart';

class ConvertToSwitchExpression extends ResolvedCorrectionProducer {
/// Local variable reference used in assignment switch expression generation.
LocalVariableElement? writeElement;
LocalVariableElement2? writeElement;

/// Assignment operator used in assignment switch expression generation.
TokenType? assignmentOperator;

/// Function reference used in argument switch expression generation.
FunctionElement? functionElement;
TopLevelFunctionElement? functionElement;

ConvertToSwitchExpression({required super.context});

Expand Down Expand Up @@ -449,8 +449,8 @@ class ConvertToSwitchExpression extends ResolvedCorrectionProducer {
// An assignment switch case's statement can't be a method invocation.
canBeAssignment = false;

var element = expression.methodName.staticElement;
if (element is! FunctionElement) return null;
var element = expression.methodName.element;
if (element is! TopLevelFunctionElement) return null;
if (functionElement == null) {
functionElement = element;
} else if (functionElement != element) {
Expand All @@ -464,11 +464,11 @@ class ConvertToSwitchExpression extends ResolvedCorrectionProducer {
var leftHandSide = expression.leftHandSide;
if (leftHandSide is! SimpleIdentifierImpl) return null;
if (writeElement == null) {
var element = leftHandSide.staticElement;
if (element is! LocalVariableElement) return null;
var element = leftHandSide.element;
if (element is! LocalVariableElement2) return null;
writeElement = element;
assignmentOperator = expression.operator.type;
} else if (writeElement != leftHandSide.staticElement ||
} else if (writeElement != leftHandSide.element ||
expression.operator.type != assignmentOperator) {
// The variable written to and the assignment operator used
// in each case must be the same.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import 'package:analysis_server/src/utilities/extensions/object.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';
Expand Down Expand Up @@ -57,7 +57,7 @@ class CreateConstructorForFinalFields extends ResolvedCorrectionProducer {
_FixContext fixContext;
switch (container) {
case ClassDeclaration():
superType = container.declaredElement?.supertype;
superType = container.declaredFragment?.element.supertype;
if (superType == null) {
return;
}
Expand All @@ -68,7 +68,7 @@ class CreateConstructorForFinalFields extends ResolvedCorrectionProducer {
variableLists: container.members.interestingVariableLists,
);
case EnumDeclaration():
superType = container.declaredElement?.supertype;
superType = container.declaredFragment?.element.supertype;
if (superType == null) {
return;
}
Expand Down Expand Up @@ -147,7 +147,7 @@ class CreateConstructorForFinalFields extends ResolvedCorrectionProducer {
required _FixContext fixContext,
required NamedCompilationUnitMember classDeclaration,
}) async {
var keyClass = await sessionHelper.getFlutterClass('Key');
var keyClass = await sessionHelper.getFlutterClass2('Key');
if (keyClass == null) {
return;
}
Expand Down Expand Up @@ -392,10 +392,10 @@ class _FixContext {
required this.variableLists,
});

List<ParameterElement>? get superNamed {
var superConstructor = superType.constructors.singleOrNull;
List<FormalParameterElement>? get superNamed {
var superConstructor = superType.constructors2.singleOrNull;
if (superConstructor != null) {
var superAll = superConstructor.parameters;
var superAll = superConstructor.formalParameters;
var superNamed = superAll.where((e) => e.isNamed).toList();
return superNamed.length == superAll.length ? superNamed : null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:analysis_server/src/utilities/extensions/ast.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
Expand All @@ -33,7 +34,7 @@ class CreateField extends CreateFieldOrGetter {
@override
Future<void> addForObjectPattern({
required ChangeBuilder builder,
required InterfaceElement? targetElement,
required InterfaceElement2? targetElement,
required String fieldName,
required DartType? fieldType,
}) async {
Expand Down Expand Up @@ -64,18 +65,19 @@ class CreateField extends CreateFieldOrGetter {
Future<void> _addDeclaration({
required ChangeBuilder builder,
required bool staticModifier,
required InterfaceElement? targetElement,
required InterfaceElement2? targetElement,
required DartType? fieldType,
}) async {
if (targetElement == null) {
return;
}
if (targetElement.library.isInSdk) {
if (targetElement.library2.isInSdk) {
return;
}
// Prepare target `ClassDeclaration`.
var targetFragment = targetElement.firstFragment;
var targetDeclarationResult =
await sessionHelper.getElementDeclaration(targetElement);
await sessionHelper.getElementDeclaration2(targetFragment);
if (targetDeclarationResult == null) {
return;
}
Expand All @@ -89,7 +91,7 @@ class CreateField extends CreateFieldOrGetter {
return;
}
// Build field source.
var targetSource = targetElement.source;
var targetSource = targetFragment.libraryFragment.source;
var targetFile = targetSource.fullName;
await builder.addDartFileEdit(targetFile, (builder) {
builder.insertField(targetNode, (builder) {
Expand Down Expand Up @@ -128,7 +130,7 @@ class CreateField extends CreateFieldOrGetter {
_fieldName,
isFinal: constructor.constKeyword != null,
nameGroupName: 'NAME',
type: parameter.declaredElement?.type,
type: parameter.declaredFragment?.element.type,
typeGroupName: 'TYPE',
);
});
Expand All @@ -149,26 +151,26 @@ class CreateField extends CreateFieldOrGetter {
};
// Prepare target `ClassElement`.
var staticModifier = false;
InterfaceElement? targetClassElement;
InterfaceElement2? targetClassElement;
if (target != null) {
targetClassElement = getTargetInterfaceElement(target);
targetClassElement = getTargetInterfaceElement2(target);
// Maybe static.
if (target is Identifier) {
var targetIdentifier = target;
var targetElement = targetIdentifier.staticElement;
var targetElement = targetIdentifier.element;
if (targetElement == null) {
return;
}
staticModifier = targetElement.kind == ElementKind.CLASS;
}
} else {
targetClassElement = node.enclosingInterfaceElement;
targetClassElement = node.enclosingInterfaceElement2;
staticModifier = inStaticContext;
}

var fieldTypeNode = climbPropertyAccess(nameNode);
var fieldTypeParent = fieldTypeNode.parent;
if (targetClassElement is EnumElement &&
if (targetClassElement is EnumElement2 &&
fieldTypeParent is AssignmentExpression &&
fieldTypeNode == fieldTypeParent.leftHandSide) {
// Any field on an enum must be final; creating a final field does not
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analysis_server/src/utilities/extensions/ast.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
Expand All @@ -22,7 +23,7 @@ abstract class CreateFieldOrGetter extends ResolvedCorrectionProducer {
/// Adds the declaration that makes a [fieldName] available.
Future<void> addForObjectPattern({
required ChangeBuilder builder,
required InterfaceElement? targetElement,
required InterfaceElement2? targetElement,
required String fieldName,
required DartType? fieldType,
});
Expand Down Expand Up @@ -82,7 +83,7 @@ abstract class CreateFieldOrGetter extends ResolvedCorrectionProducer {

await addForObjectPattern(
builder: builder,
targetElement: matchedType.element,
targetElement: matchedType.element3,
fieldName: effectiveName,
fieldType: fieldType,
);
Expand All @@ -108,7 +109,7 @@ class CreateGetter extends CreateFieldOrGetter {
@override
Future<void> addForObjectPattern({
required ChangeBuilder builder,
required InterfaceElement? targetElement,
required InterfaceElement2? targetElement,
required String fieldName,
required DartType? fieldType,
}) async {
Expand Down Expand Up @@ -147,29 +148,28 @@ class CreateGetter extends CreateFieldOrGetter {
}
// prepare target element
var staticModifier = false;
Element? targetElement;
InstanceElement2? targetElement;
if (target is ExtensionOverride) {
targetElement = target.element;
} else if (target is Identifier &&
target.staticElement is ExtensionElement) {
targetElement = target.staticElement;
targetElement = target.element2;
} else if (target is Identifier && target.element is ExtensionElement2) {
targetElement = target.element as InstanceElement2?;
staticModifier = true;
} else if (target != null) {
// prepare target interface type
var targetType = target.staticType;
if (targetType is! InterfaceType) {
return;
}
targetElement = targetType.element;
targetElement = targetType.element3;
// maybe static
if (target is Identifier) {
var targetIdentifier = target;
var targetElement = targetIdentifier.staticElement;
var targetElement = targetIdentifier.element;
staticModifier = targetElement?.kind == ElementKind.CLASS;
}
} else {
targetElement = nameNode.enclosingInterfaceElement ??
nameNode.enclosingExtensionElement;
targetElement = nameNode.enclosingInterfaceElement2 ??
nameNode.enclosingExtensionElement2;
if (targetElement == null) {
return;
}
Expand All @@ -190,20 +190,21 @@ class CreateGetter extends CreateFieldOrGetter {
Future<void> _addDeclaration({
required ChangeBuilder builder,
required bool staticModifier,
required Element? targetElement,
required InstanceElement2? targetElement,
required DartType? fieldType,
}) async {
if (targetElement == null) {
return;
}

var targetSource = targetElement.source;
if (targetSource == null || targetElement.library?.isInSdk == true) {
var targetFragment = targetElement.firstFragment;
var targetSource = targetFragment.libraryFragment.source;
if (targetElement.library2.isInSdk == true) {
return;
}
// prepare target declaration
var targetDeclarationResult =
await sessionHelper.getElementDeclaration(targetElement);
await sessionHelper.getElementDeclaration2(targetFragment);
if (targetDeclarationResult == null) {
return;
}
Expand Down
23 changes: 23 additions & 0 deletions pkg/analysis_server/lib/src/utilities/extensions/ast.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ 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';
import 'package:analyzer/source/source.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
Expand Down Expand Up @@ -85,6 +86,16 @@ extension AstNodeExtension on AstNode {
return null;
}

/// Returns [ExtensionElement2] declared by an enclosing node.
ExtensionElement2? get enclosingExtensionElement2 {
for (var node in withParents) {
if (node is ExtensionDeclaration) {
return node.declaredFragment?.element;
}
}
return null;
}

/// Return the [IfStatement] associated with `this`.
IfStatement? get enclosingIfStatement {
for (var node in withParents) {
Expand All @@ -109,6 +120,18 @@ extension AstNodeExtension on AstNode {
return null;
}

/// Returns [InterfaceElement2] declared by an enclosing node.
InterfaceElement2? get enclosingInterfaceElement2 {
for (var node in withParents) {
if (node is ClassDeclaration) {
return node.declaredFragment?.element;
} else if (node is MixinDeclaration) {
return node.declaredFragment?.element;
}
}
return null;
}

/// Return `true` if this node has an `override` annotation.
bool get hasOverride {
var node = this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import 'package:meta/meta.dart';
/// How broadly a [CorrectionProducer] can be applied.
///
/// Each value of this enum is cumulative, as the index increases, except for
/// [CorrectionApplicability.automaticallyButOncePerFile]. When a correctiopn
/// [CorrectionApplicability.automaticallyButOncePerFile]. When a correction
/// producer has a given applicability, it also can be applied with each
/// lower-indexed value. For example, a correction producer with an
/// applicability of [CorrectionApplicability.acrossFiles] can also be used to
Expand Down Expand Up @@ -461,6 +461,21 @@ abstract class ResolvedCorrectionProducer
return null;
}

/// Returns the class element associated with the [target], or `null` if there
/// is no such element.
InterfaceElement2? getTargetInterfaceElement2(Expression target) {
var type = target.staticType;
if (type is InterfaceType) {
return type.element3;
} else if (target is Identifier) {
var element = target.element;
if (element is InterfaceElement2) {
return element;
}
}
return null;
}

/// Returns an expected [DartType] of [expression], may be `null` if cannot be
/// inferred.
DartType? inferUndefinedExpressionType(Expression expression) {
Expand Down
5 changes: 4 additions & 1 deletion pkg/linter/lib/src/rules/analyzer_use_new_elements.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ bool _isOldModelElement(Element2? element) {
var uriStr = libraryFragment.source.uri.toString();
if (uriStr == 'package:analyzer/dart/element/element.dart') {
// Skip classes that don't required migration.
if (const {'ElementAnnotation'}.contains(firstFragment.name)) {
if (const {
'ElementAnnotation',
'ElementKind',
}.contains(firstFragment.name)) {
return false;
}
return true;
Expand Down
2 changes: 1 addition & 1 deletion tools/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ CHANNEL dev
MAJOR 3
MINOR 6
PATCH 0
PRERELEASE 298
PRERELEASE 299
PRERELEASE_PATCH 0

0 comments on commit 20a610b

Please sign in to comment.