API. Deprecate 'VariableDeclaration.declaredElement', use 'VariableDeclaration.declaredFragment'.

This makes API consistent.

Bug: https://github.com/dart-lang/sdk/issues/61231
Change-Id: I841dc10cd2ef4b28286d374af26c079dcf69179e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/444863
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov
2025-08-12 14:30:49 -07:00
committed by Commit Queue
parent caf912449d
commit 32124f25a0
53 changed files with 153 additions and 128 deletions
@@ -787,7 +787,7 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
exceptionParameter.name,
HighlightRegionType.LOCAL_VARIABLE_DECLARATION,
additionalSemanticTokenModifiers: _additionalModifiersForElement(
exceptionParameter.declaredElement,
exceptionParameter.declaredFragment?.element,
),
);
}
@@ -797,7 +797,7 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
stackTraceParameter.name,
HighlightRegionType.LOCAL_VARIABLE_DECLARATION,
additionalSemanticTokenModifiers: _additionalModifiersForElement(
stackTraceParameter.declaredElement,
stackTraceParameter.declaredFragment?.element,
),
);
}
@@ -922,7 +922,7 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
node.name,
HighlightRegionType.LOCAL_VARIABLE_DECLARATION,
additionalSemanticTokenModifiers: _additionalModifiersForElement(
node.declaredElement,
node.declaredFragment?.element,
),
);
@@ -1831,7 +1831,7 @@ class _DartUnitHighlightsComputerVisitor extends RecursiveAstVisitor<void> {
@override
void visitVariableDeclaration(VariableDeclaration node) {
var element = node.declaredFragment?.element ?? node.declaredElement;
var element = node.declaredFragment?.element;
if (element is FieldElement) {
computer._addRegion_token(
node.name,
@@ -335,7 +335,7 @@ class _DartInlayHintComputerVisitor extends GeneralizingAstVisitor<void> {
return;
}
var declaration = node.declaredElement;
var declaration = node.declaredFragment?.element;
if (declaration is LocalVariableElement) {
_computer.addVariableTypePrefix(node.name, declaration.type);
}
@@ -350,7 +350,7 @@ class _DartInlayHintComputerVisitor extends GeneralizingAstVisitor<void> {
return;
}
var declaration = node.declaredElement;
var declaration = node.declaredFragment?.element;
if (declaration != null) {
_computer.addVariableTypePrefix(node.name, declaration.type);
}
@@ -147,10 +147,11 @@ class DartUnitOccurrencesComputerVisitor extends GeneralizingAstVisitor<void> {
@override
void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
if (node.declaredElement case BindPatternVariableElement(:var join?)) {
var declaredElement = node.declaredFragment!.element;
if (declaredElement case BindPatternVariableElement(:var join?)) {
_addOccurrence(join.baseElement, node.name);
} else {
_addOccurrence(node.declaredElement!, node.name);
_addOccurrence(declaredElement, node.name);
}
super.visitDeclaredVariablePattern(node);
@@ -294,7 +294,7 @@ class _InlineValueVisitor extends GeneralizingAstVisitor<void> {
void visitDeclaredIdentifier(DeclaredIdentifier node) {
var name = node.name;
collector.recordVariableLookup(
node.declaredElement,
node.declaredFragment?.element,
name.offset,
name.length,
);
@@ -305,7 +305,7 @@ class _InlineValueVisitor extends GeneralizingAstVisitor<void> {
void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
var name = node.name;
collector.recordVariableLookup(
node.declaredElement,
node.declaredFragment?.element,
name.offset,
name.length,
);
@@ -423,7 +423,7 @@ class _InlineValueVisitor extends GeneralizingAstVisitor<void> {
void visitVariableDeclaration(VariableDeclaration node) {
var name = node.name;
collector.recordVariableLookup(
node.declaredElement,
node.declaredFragment?.element,
name.offset,
name.length,
);
@@ -2500,12 +2500,12 @@ class DeclarationHelper {
}
void _visitCatchClause(CatchClause node) {
var exceptionElement = node.exceptionParameter?.declaredElement;
var exceptionElement = node.exceptionParameter?.declaredFragment?.element;
if (exceptionElement != null) {
_suggestVariable(exceptionElement);
}
var stackTraceElement = node.stackTraceParameter?.declaredElement;
var stackTraceElement = node.stackTraceParameter?.declaredFragment?.element;
if (stackTraceElement != null) {
_suggestVariable(stackTraceElement);
}
@@ -2532,7 +2532,7 @@ class DeclarationHelper {
}
void _visitDeclaredVariablePattern(DeclaredVariablePattern pattern) {
var declaredElement = pattern.declaredElement;
var declaredElement = pattern.declaredFragment?.element;
if (declaredElement != null) {
_suggestVariable(declaredElement);
}
@@ -2540,7 +2540,7 @@ class DeclarationHelper {
void _visitForLoopParts(ForLoopParts node) {
if (node is ForEachPartsWithDeclaration) {
var declaredElement = node.loopVariable.declaredElement;
var declaredElement = node.loopVariable.declaredFragment?.element;
if (declaredElement != null) {
_suggestVariable(declaredElement);
}
@@ -2549,7 +2549,7 @@ class DeclarationHelper {
} else if (node is ForPartsWithDeclarations) {
var variables = node.variables;
for (var variable in variables.variables) {
var declaredElement = variable.declaredElement;
var declaredElement = variable.declaredFragment?.element;
if (declaredElement is LocalVariableElement) {
_suggestVariable(declaredElement);
}
@@ -2660,8 +2660,8 @@ class DeclarationHelper {
var variables = statement.variables;
for (var variable in variables.variables) {
if (variable.end < offset) {
var declaredElement = variable.declaredElement;
if (declaredElement != null) {
var declaredElement = variable.declaredFragment?.element;
if (declaredElement is LocalVariableElement) {
_suggestVariable(declaredElement);
}
}
@@ -2741,8 +2741,8 @@ class DeclarationHelper {
if (child is VariableDeclaration) {
var index = variables.indexOf(child);
for (var i = index - 1; i >= 0; i--) {
var element = variables[i].declaredElement;
if (element != null) {
var element = variables[i].declaredFragment?.element;
if (element is LocalVariableElement) {
_suggestVariable(element);
}
}
@@ -1262,7 +1262,7 @@ parent3: ${node.parent?.parent?.parent}
if (pattern is AssignedVariablePattern) {
element = pattern.element;
} else if (pattern is DeclaredVariablePattern) {
element = pattern.declaredElement;
element = pattern.declaredFragment?.element;
// } else if (pattern is RecordPattern) {
// pattern.fields.map((e) => _requiredTypeOfPattern(e.pattern)).toList();
} else if (pattern is ListPattern) {
@@ -149,10 +149,8 @@ class AddExplicitCast extends ResolvedCorrectionProducer {
if (parent is AssignmentExpression && target == parent.rightHandSide) {
toType = parent.writeType!;
} else if (parent is VariableDeclaration && target == parent.initializer) {
if (parent.declaredElement case var declaredElement?) {
if (parent.declaredFragment?.element case var declaredElement?) {
toType = declaredElement.type;
} else if (parent.declaredFragment case var declaredFragment?) {
toType = declaredFragment.element.type;
} else {
return null;
}
@@ -122,7 +122,7 @@ class AddNullCheck extends ResolvedCorrectionProducer {
toType = parent.realTarget.typeOrThrow;
} else if (parent is ForEachPartsWithDeclaration) {
toType = typeProvider.iterableType(
parent.loopVariable.declaredElement!.type,
parent.loopVariable.declaredFragment!.element.type,
);
} else if (parent is ForEachPartsWithIdentifier) {
toType = typeProvider.iterableType(parent.identifier.typeOrThrow);
@@ -114,7 +114,7 @@ class AddTypeAnnotation extends ResolvedCorrectionProducer {
if (declaredIdentifier.type != null) {
return;
}
var type = declaredIdentifier.declaredElement!.type;
var type = declaredIdentifier.declaredFragment!.element.type;
if (type is! InterfaceType &&
type is! FunctionType &&
type is! RecordType &&
@@ -225,8 +225,8 @@ class AddTypeAnnotation extends ResolvedCorrectionProducer {
if (statement is! VariableDeclarationStatement || block is! Block) {
return null;
}
var element = variable.declaredElement;
if (element == null) {
var element = variable.declaredFragment?.element;
if (element is! LocalVariableElement) {
return null;
}
var statements = block.statements;
@@ -105,7 +105,8 @@ class ConvertNullCheckToNullAwareElementOrEntry
((node.caseClause?.guardedPattern.pattern as NullCheckPattern)
.pattern
as DeclaredVariablePattern)
.declaredElement;
.declaredFragment
?.element;
if (caseVariable == thenElement.key.canonicalElement) {
// In case the key is promoted, replace everything before ':' with
// the expression before 'case', prefixed by '?'.
@@ -239,7 +239,7 @@ extension on Statement {
return null;
}
var declaredElement = declaration.declaredElement;
var declaredElement = declaration.declaredFragment?.element;
if (declaredElement is! LocalVariableElement) {
return null;
}
@@ -46,7 +46,7 @@ class ConvertToWildcardVariable extends ResolvedCorrectionProducer {
if (node is! VariableDeclaration) return;
var nameToken = node.name;
var element = node.declaredElement;
var element = node.declaredFragment?.element;
if (element is! LocalVariableElement) {
return;
}
@@ -33,7 +33,7 @@ class DestructureLocalVariableAssignment extends ResolvedCorrectionProducer {
Future<void> compute(ChangeBuilder builder) async {
var node = this.node;
if (node is! VariableDeclaration) return;
var element = node.declaredElement;
var element = node.declaredFragment?.element;
if (element == null) return;
var type = element.type;
switch (type) {
@@ -51,8 +51,8 @@ class DestructureLocalVariableAssignment extends ResolvedCorrectionProducer {
) async {
// TODO(pq): share reference checking w/ record computation
var variableElement = node.declaredElement;
if (variableElement == null) return;
var variableElement = node.declaredFragment?.element;
if (variableElement is! LocalVariableElement) return;
var function = node.thisOrAncestorOfType<FunctionBody>();
if (function == null) return;
@@ -85,7 +85,7 @@ class JoinVariableDeclaration extends ResolvedCorrectionProducer {
// The declared variable must be the one that is assigned.
// There must be no initializer.
var declaredVariable = declaredVariables.single;
if (declaredVariable.declaredElement != left.element ||
if (declaredVariable.declaredFragment?.element != left.element ||
declaredVariable.initializer != null) {
return;
}
@@ -149,7 +149,7 @@ class JoinVariableDeclaration extends ResolvedCorrectionProducer {
}
// The assignment should write into the declared variable.
if (assignment.writeElement != declaredVariable.declaredElement) {
if (assignment.writeElement != declaredVariable.declaredFragment?.element) {
return;
}
@@ -67,7 +67,7 @@ class MakeVariableNullable extends ResolvedCorrectionProducer {
if (statement is VariableDeclarationStatement) {
var variableList = statement.variables;
for (var declaration in variableList.variables) {
if (declaration.declaredElement == variable) {
if (declaration.declaredFragment?.element == variable) {
return variableList;
}
}
@@ -38,10 +38,10 @@ class RemoveLeadingUnderscore extends ResolvedCorrectionProducer {
element = node.declaredFragment?.element;
} else if (node is VariableDeclaration) {
nameToken = node.name;
element = node.declaredElement ?? node.declaredFragment?.element;
element = node.declaredFragment?.element;
} else if (node is DeclaredVariablePattern) {
nameToken = node.name;
element = node.declaredElement;
element = node.declaredFragment?.element;
} else if (node is FunctionDeclaration) {
nameToken = node.name;
element = node.declaredFragment?.element;
@@ -4,6 +4,7 @@
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analysis_server/src/utilities/extensions/object.dart';
import 'package:analysis_server_plugin/edit/correction_utils.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/element/element.dart';
@@ -286,10 +287,10 @@ class RemoveUnusedLocalVariable extends ResolvedCorrectionProducer {
LocalVariableElement? _localVariableElement() {
var node = this.node;
if (node is DeclaredVariablePattern) {
return node.declaredElement;
return node.declaredFragment?.element;
} else if (node is VariableDeclaration) {
if (node.name == token) {
return node.declaredElement;
return node.declaredFragment?.element.ifTypeOrNull();
}
}
return null;
@@ -42,7 +42,7 @@ class RenameToCamelCase extends ResolvedCorrectionProducer {
element = node.declaredFragment?.element;
} else if (node is VariableDeclaration) {
nameToken = node.name;
element = node.declaredElement ?? node.declaredFragment?.element;
element = node.declaredFragment?.element;
} else if (node is RecordTypeAnnotationField) {
// RecordTypeAnnotationFields do not have Elements.
nameToken = node.name;
@@ -117,7 +117,7 @@ class ReplaceConditionalWithIfElse extends ResolvedCorrectionProducer {
var variable = conditional.parent as VariableDeclaration;
var variableList = variable.parent as VariableDeclarationList;
if (variableList.type == null) {
var type = variable.declaredElement!.type;
var type = variable.declaredFragment!.element.type;
var keyword = variableList.keyword;
if (keyword != null && keyword.keyword == Keyword.VAR) {
builder.addReplacement(range.token(keyword), (builder) {
@@ -61,7 +61,7 @@ class SplitVariableDeclaration extends ResolvedCorrectionProducer {
await builder.addDartFileEdit(file, (builder) {
var eol = builder.eol;
if (variableList.type == null) {
var type = variable.declaredElement!.type;
var type = variable.declaredFragment!.element.type;
if (type is! DynamicType && keyword != null) {
if (!builder.canWriteType(type)) {
return;
@@ -14,8 +14,11 @@ class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
@override
void visitCatchClause(CatchClause node) {
_addLocalVariable(node, node.exceptionParameter?.declaredElement);
_addLocalVariable(node, node.stackTraceParameter?.declaredElement);
_addLocalVariable(node, node.exceptionParameter?.declaredFragment?.element);
_addLocalVariable(
node,
node.stackTraceParameter?.declaredFragment?.element,
);
node.body.accept(this);
}
@@ -36,7 +39,7 @@ class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
var loop = node.parent;
for (var variable in node.variables.variables) {
_addLocalVariable(loop, variable.declaredElement);
_addLocalVariable(loop, variable.declaredFragment?.element);
variable.initializer?.accept(this);
}
}
@@ -71,7 +74,7 @@ class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
var block = node.parent;
if (block != null) {
for (var variable in node.variables.variables) {
_addLocalVariable(block, variable.declaredElement);
_addLocalVariable(block, variable.declaredFragment?.element);
variable.initializer?.accept(this);
}
}
@@ -55,7 +55,7 @@ class AstWriter extends UnifyingAstVisitor<void> with TreeWriter {
} else if (node is ConstructorName) {
properties['element'] = node.element;
} else if (node is DeclaredIdentifier) {
properties['element'] = node.declaredElement;
properties['element'] = node.declaredFragment?.element;
properties['keyword'] = node.keyword;
} else if (node is ExportDirective) {
properties['library export'] = node.libraryExport;
+10
View File
@@ -1,3 +1,13 @@
## 8.2.0-dev
* Deprecate `CatchClauseParameter.declaredElement` and `CatchClauseParameter.declaredElement2`.
Use `CatchClauseParameter.declaredFragment` instead.
* Deprecate `DeclaredIdentifier.declaredElement` and `DeclaredIdentifier.declaredElement2`.
Use `DeclaredIdentifier.declaredFragment` instead.
* Deprecate `DeclaredVariablePattern.declaredElement` and `DeclaredVariablePattern.declaredElement2`.
Use `DeclaredVariablePattern.declaredFragment` instead.
* Deprecate `VariableDeclaration.declaredElement` and `VariableDeclaration.declaredElement2`.
Use `VariableDeclaration.declaredFragment` instead.
## 8.1.1
* Fix for `EnumSet` usage when compiled to JavaScript.
+4 -4
View File
@@ -860,7 +860,7 @@ package:analyzer/dart/ast/ast.dart:
rightParenthesis (getter: Token?)
stackTraceParameter (getter: CatchClauseParameter?)
CatchClauseParameter (class extends AstNode):
declaredElement (getter: LocalVariableElement?, experimental)
declaredElement (getter: LocalVariableElement?, deprecated, experimental)
declaredElement2 (getter: LocalVariableElement?, deprecated, experimental)
declaredFragment (getter: LocalVariableFragment?, experimental)
name (getter: Token)
@@ -994,7 +994,7 @@ package:analyzer/dart/ast/ast.dart:
Declaration (class extends Object implements AnnotatedNode):
declaredFragment (getter: Fragment?, experimental)
DeclaredIdentifier (class extends Object implements Declaration):
declaredElement (getter: LocalVariableElement?, experimental)
declaredElement (getter: LocalVariableElement?, deprecated, experimental)
declaredElement2 (getter: LocalVariableElement?, deprecated, experimental)
declaredFragment (getter: LocalVariableFragment?)
isConst (getter: bool)
@@ -1003,7 +1003,7 @@ package:analyzer/dart/ast/ast.dart:
name (getter: Token)
type (getter: TypeAnnotation?)
DeclaredVariablePattern (class extends Object implements VariablePattern, sealed (immediate subtypes: DeclaredVariablePatternImpl)):
declaredElement (getter: BindPatternVariableElement?, experimental)
declaredElement (getter: BindPatternVariableElement?, deprecated, experimental)
declaredElement2 (getter: BindPatternVariableElement?, deprecated, experimental)
declaredFragment (getter: BindPatternVariableFragment?)
keyword (getter: Token?)
@@ -1742,7 +1742,7 @@ package:analyzer/dart/ast/ast.dart:
UriBasedDirective (class extends Object implements Directive, sealed (immediate subtypes: NamespaceDirective, PartDirective, UriBasedDirectiveImpl)):
uri (getter: StringLiteral)
VariableDeclaration (class extends Object implements Declaration):
declaredElement (getter: LocalVariableElement?, experimental)
declaredElement (getter: LocalVariableElement?, deprecated, experimental)
declaredElement2 (getter: LocalVariableElement?, deprecated, experimental)
declaredFragment (getter: VariableFragment?, experimental)
equals (getter: Token?)
+20 -11
View File
@@ -2750,13 +2750,14 @@ abstract final class CatchClauseParameter extends AstNode {
/// The declared element.
///
/// Returns `null` if the AST hasn't been resolved.
@Deprecated('Use declaredFragment instead')
@experimental
LocalVariableElement? get declaredElement;
/// The declared element.
///
/// Returns `null` if the AST hasn't been resolved.
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
LocalVariableElement? get declaredElement2;
@@ -2789,12 +2790,13 @@ final class CatchClauseParameterImpl extends AstNodeImpl
return name;
}
@Deprecated('Use declaredFragment instead')
@override
LocalVariableElementImpl? get declaredElement {
return declaredFragment?.element;
}
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@override
LocalVariableElementImpl? get declaredElement2 {
return declaredElement;
@@ -5650,6 +5652,7 @@ abstract final class DeclaredIdentifier implements Declaration {
///
/// Returns `null` if either this node corresponds to a list of declarations
/// or if the AST structure hasn't been resolved.
@Deprecated('Use declaredFragment instead')
@experimental
LocalVariableElement? get declaredElement;
@@ -5657,7 +5660,7 @@ abstract final class DeclaredIdentifier implements Declaration {
///
/// Returns `null` if either this node corresponds to a list of declarations
/// or if the AST structure hasn't been resolved.
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
LocalVariableElement? get declaredElement2;
@@ -5719,13 +5722,14 @@ final class DeclaredIdentifierImpl extends DeclarationImpl
_becomeParentOf(type);
}
@Deprecated('Use declaredFragment instead')
@experimental
@override
LocalVariableElementImpl? get declaredElement {
return declaredFragment?.element;
}
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
@override
LocalVariableElementImpl? get declaredElement2 {
@@ -5808,13 +5812,14 @@ sealed class DeclaredVariablePattern implements VariablePattern {
/// The element declared by this declaration.
///
/// Returns `null` if the AST structure hasn't been resolved.
@Deprecated('Use declaredFragment instead')
@experimental
BindPatternVariableElement? get declaredElement;
/// The element declared by this declaration.
///
/// Returns `null` if the AST structure hasn't been resolved.
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
BindPatternVariableElement? get declaredElement2;
@@ -5871,13 +5876,14 @@ final class DeclaredVariablePatternImpl extends VariablePatternImpl
return name;
}
@Deprecated('Use declaredFragment instead')
@experimental
@override
BindPatternVariableElementImpl? get declaredElement {
return declaredFragment?.element;
}
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
@override
BindPatternVariableElementImpl? get declaredElement2 {
@@ -5939,14 +5945,15 @@ final class DeclaredVariablePatternImpl extends VariablePatternImpl
SharedMatchContext context,
) {
inferenceLogWriter?.enterPattern(this);
var declaredElement = declaredFragment!.element;
var result = resolverVisitor.analyzeDeclaredVariablePattern(
context,
this,
declaredElement!,
declaredFragment!.name ?? '',
declaredElement,
declaredElement.name ?? '',
type?.typeOrThrow.wrapSharedTypeView(),
);
declaredElement!.type = result.staticType.unwrapTypeView();
declaredElement.type = result.staticType.unwrapTypeView();
resolverVisitor.checkPatternNeverMatchesValueType(
context: context,
@@ -24788,6 +24795,7 @@ abstract final class VariableDeclaration implements Declaration {
///
/// Returns `null` if the AST structure hasn't been resolved or if this node
/// represents the declaration of a top-level variable or a field.
@Deprecated('Use declaredFragment instead')
@experimental
LocalVariableElement? get declaredElement;
@@ -24795,7 +24803,7 @@ abstract final class VariableDeclaration implements Declaration {
///
/// Returns `null` if the AST structure hasn't been resolved or if this node
/// represents the declaration of a top-level variable or a field.
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
LocalVariableElement? get declaredElement2;
@@ -24871,13 +24879,14 @@ final class VariableDeclarationImpl extends DeclarationImpl
_becomeParentOf(initializer);
}
@Deprecated('Use declaredFragment instead')
@experimental
@override
LocalVariableElementImpl? get declaredElement {
return declaredFragment?.element.ifTypeOrNull<LocalVariableElementImpl>();
}
@Deprecated('Use declaredElement instead')
@Deprecated('Use declaredFragment instead')
@experimental
@override
LocalVariableElementImpl? get declaredElement2 {
@@ -43,7 +43,7 @@ class _ElementMapper2 extends GeneralizingAstVisitor<Element> {
@override
Element? visitCatchClauseParameter(CatchClauseParameter node) {
return node.declaredElement;
return node.declaredFragment?.element;
}
@override
@@ -80,12 +80,12 @@ class _ElementMapper2 extends GeneralizingAstVisitor<Element> {
@override
Element? visitDeclaredIdentifier(DeclaredIdentifier node) {
return node.declaredElement;
return node.declaredFragment?.element;
}
@override
Element? visitDeclaredVariablePattern(DeclaredVariablePattern node) {
return node.declaredElement;
return node.declaredFragment?.element;
}
@override
@@ -309,6 +309,6 @@ class _ElementMapper2 extends GeneralizingAstVisitor<Element> {
@override
Element? visitVariableDeclaration(VariableDeclaration node) {
return node.declaredFragment?.element ?? node.declaredElement;
return node.declaredFragment?.element ?? node.declaredFragment?.element;
}
}
@@ -346,7 +346,9 @@ class FlowAnalysisHelper {
var variables = node.variables;
for (var i = 0; i < variables.length; ++i) {
var variable = variables[i];
var declaredElement = variable.declaredElement!;
var declaredFragment =
variable.declaredFragment as LocalVariableFragmentImpl;
var declaredElement = declaredFragment.element;
flow!.declare(
declaredElement,
SharedTypeView(declaredElement.type),
@@ -1003,7 +1005,7 @@ class _AssignedVariablesVisitor extends RecursiveAstVisitor<void> {
node.stackTraceParameter,
]) {
if (identifier != null) {
assignedVariables.declare(identifier.declaredElement!);
assignedVariables.declare(identifier.declaredFragment!.element);
}
}
super.visitCatchClause(node);
@@ -1194,7 +1196,8 @@ class _AssignedVariablesVisitor extends RecursiveAstVisitor<void> {
grandParent is FieldDeclaration) {
throw StateError('Should not visit top level declarations');
}
var declaredElement = node.declaredElement as PromotableElementImpl;
var declaredElement =
node.declaredFragment?.element as PromotableElementImpl;
assignedVariables.declare(declaredElement);
if (declaredElement.isLate && node.initializer != null) {
assignedVariables.beginNode();
@@ -1247,7 +1250,7 @@ class _AssignedVariablesVisitor extends RecursiveAstVisitor<void> {
assignedVariables.write(element);
}
} else if (forLoopParts is ForEachPartsWithDeclarationImpl) {
var variable = forLoopParts.loopVariable.declaredElement!;
var variable = forLoopParts.loopVariable.declaredFragment!.element;
assignedVariables.declare(variable);
} else if (forLoopParts is ForEachPartsWithPatternImpl) {
for (var variable in forLoopParts.variables) {
@@ -190,7 +190,7 @@ class ForResolver {
}
if (loopVariable != null) {
var declaredElement = loopVariable.declaredElement!;
var declaredElement = loopVariable.declaredFragment!.element;
_resolver.flowAnalysis.flow?.declare(
declaredElement,
SharedTypeView(declaredElement.type),
@@ -37,7 +37,7 @@ class DuplicateDefinitionVerifier {
var exceptionParameter = node.exceptionParameter;
var stackTraceParameter = node.stackTraceParameter;
if (exceptionParameter != null && stackTraceParameter != null) {
var element = exceptionParameter.declaredElement;
var element = exceptionParameter.declaredFragment?.element;
if (element != null && element.isWildcardVariable) return;
String exceptionName = exceptionParameter.name.lexeme;
if (exceptionName == stackTraceParameter.name.lexeme) {
@@ -61,14 +61,14 @@ class GatherUsedLocalElementsVisitor extends RecursiveAstVisitor<void> {
var exceptionParameter = node.exceptionParameter;
var stackTraceParameter = node.stackTraceParameter;
if (exceptionParameter != null) {
var element = exceptionParameter.declaredElement;
var element = exceptionParameter.declaredFragment?.element;
usedElements.addCatchException(element);
if (stackTraceParameter != null || node.onKeyword == null) {
usedElements.addElement(element);
}
}
if (stackTraceParameter != null) {
var element = stackTraceParameter.declaredElement;
var element = stackTraceParameter.declaredFragment?.element;
usedElements.addCatchStackTrace(element);
}
super.visitCatchClause(node);
@@ -521,7 +521,7 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
@override
void visitCatchClauseParameter(CatchClauseParameter node) {
_visitLocalVariableElement(node.declaredElement!);
_visitLocalVariableElement(node.declaredFragment!.element);
super.visitCatchClauseParameter(node);
}
@@ -553,7 +553,7 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
void visitDeclaredVariablePattern(
covariant DeclaredVariablePatternImpl node,
) {
var declaredElement = node.declaredElement!;
var declaredElement = node.declaredFragment!.element;
if (!declaredElement.isDuplicate) {
var patternVariableElements = _patternVariableElements;
if (patternVariableElements != null) {
@@ -618,7 +618,7 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
for (var variable in node.variables.variables) {
_visitLocalVariableElement(
variable.declaredElement as LocalVariableElement,
variable.declaredFragment!.element as LocalVariableElement,
);
}
@@ -748,7 +748,7 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
for (var variable in node.variables.variables) {
_visitLocalVariableElement(
variable.declaredElement as LocalVariableElement,
variable.declaredFragment!.element as LocalVariableElement,
);
}
@@ -568,7 +568,7 @@ class PatternConverter with SpaceCreator<DartPattern, TypeImpl> {
return createVariableSpace(
path,
contextType,
pattern.declaredElement!.type,
pattern.declaredFragment!.element.type,
nonNull: nonNull,
);
} else if (pattern is ObjectPattern) {
+6 -6
View File
@@ -4083,9 +4083,9 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
// TODO(paulberry): try to remove these casts by changing `node` to a
// `TryStatementImpl`
flow.tryCatchStatement_catchBegin(
catchClause.exceptionParameter?.declaredElement
catchClause.exceptionParameter?.declaredFragment?.element
as PromotableElementImpl?,
catchClause.stackTraceParameter?.declaredElement
catchClause.stackTraceParameter?.declaredFragment?.element
as PromotableElementImpl?,
);
catchClause.accept(this);
@@ -4151,7 +4151,7 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
var declaredType = parent.type;
var initializerStaticType = initializer.typeOrThrow;
flowAnalysis.flow?.initialize(
node.declaredElement as PromotableElementImpl,
node.declaredFragment?.element as PromotableElementImpl,
SharedTypeView(initializerStaticType),
initializer,
isFinal: parent.isFinal,
@@ -4904,10 +4904,10 @@ class ScopeResolverVisitor extends UnifyingAstVisitor<void> {
Scope outerScope = nameScope;
try {
nameScope = LocalScope(nameScope);
_define(exception.declaredElement!);
_define(exception.declaredFragment!.element);
var stackTrace = node.stackTraceParameter;
if (stackTrace != null) {
_define(stackTrace.declaredElement!);
_define(stackTrace.declaredFragment!.element);
}
super.visitCatchClause(node);
} finally {
@@ -5601,7 +5601,7 @@ class ScopeResolverVisitor extends UnifyingAstVisitor<void> {
super.visitVariableDeclaration(node);
if (node.parent!.parent is ForParts) {
_define(node.declaredElement!);
_define(node.declaredFragment!.element);
}
}
@@ -141,13 +141,13 @@ class FindElement2 extends _FindElementBase {
unit.accept(
FunctionAstVisitor(
catchClauseParameter: (node) {
updateResult(node.declaredElement!);
updateResult(node.declaredFragment!.element);
},
declaredIdentifier: (node) {
updateResult(node.declaredElement!);
updateResult(node.declaredFragment!.element);
},
declaredVariablePattern: (node) {
updateResult(node.declaredElement!);
updateResult(node.declaredFragment!.element);
},
variableDeclaration: (node) {
updateResult(node.declaredFragment!.element);
@@ -246,7 +246,7 @@ class FindNode {
BindPatternVariableElement bindPatternVariableElement(String search) {
var node = declaredVariablePattern(search);
return node.declaredElement!;
return node.declaredFragment!.element;
}
Block block(String search) {
+1 -1
View File
@@ -1,5 +1,5 @@
name: analyzer
version: 8.1.1
version: 8.2.0-dev
description: >-
This package provides a library that performs static analysis of Dart code.
repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
@@ -246,7 +246,7 @@ void test(List<A> listA, List<B> listB) {
) {
var node = findNode.declaredIdentifier(vSearch);
var element = node.declaredElement as LocalVariableElement;
var element = node.declaredFragment?.element as LocalVariableElement;
assertType(element.type, vType);
var invocation = findNode.methodInvocation(fSearch);
@@ -375,12 +375,13 @@ class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
@override
void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
if (node.declaredElement case BindPatternVariableElement(:var join?)) {
var declaredElement = node.declaredFragment?.element;
if (declaredElement case BindPatternVariableElement(:var join?)) {
for (var variable in join.variables) {
computer._addRegionForElement(node.name, variable);
}
} else {
computer._addRegionForElement(node.name, node.declaredElement);
computer._addRegionForElement(node.name, declaredElement);
}
super.visitDeclaredVariablePattern(node);
}
@@ -82,7 +82,7 @@ abstract class LocalDeclarationVisitor extends UnifyingAstVisitor {
if (exceptionParameter != null) {
declaredParam(
exceptionParameter.name,
exceptionParameter.declaredElement,
exceptionParameter.declaredFragment?.element,
node.exceptionType,
);
}
@@ -91,7 +91,7 @@ abstract class LocalDeclarationVisitor extends UnifyingAstVisitor {
if (stackTraceParameter != null) {
declaredParam(
stackTraceParameter.name,
stackTraceParameter.declaredElement,
stackTraceParameter.declaredFragment?.element,
null,
);
}
@@ -133,13 +133,13 @@ abstract class LocalDeclarationVisitor extends UnifyingAstVisitor {
var forLoopParts = node.forLoopParts;
if (forLoopParts is ForEachPartsWithDeclaration) {
var loopVariable = forLoopParts.loopVariable;
declaredLocalVar(
loopVariable.name, loopVariable.type, loopVariable.declaredElement!);
declaredLocalVar(loopVariable.name, loopVariable.type,
loopVariable.declaredFragment!.element);
} else if (forLoopParts is ForPartsWithDeclarations) {
var varList = forLoopParts.variables;
for (var varDecl in varList.variables) {
declaredLocalVar(varDecl.name, varList.type,
varDecl.declaredElement as LocalVariableElement);
varDecl.declaredFragment!.element as LocalVariableElement);
}
}
visitNode(node);
@@ -150,13 +150,13 @@ abstract class LocalDeclarationVisitor extends UnifyingAstVisitor {
var forLoopParts = node.forLoopParts;
if (forLoopParts is ForEachPartsWithDeclaration) {
var loopVariable = forLoopParts.loopVariable;
declaredLocalVar(
loopVariable.name, loopVariable.type, loopVariable.declaredElement!);
declaredLocalVar(loopVariable.name, loopVariable.type,
loopVariable.declaredFragment!.element);
} else if (forLoopParts is ForPartsWithDeclarations) {
var varList = forLoopParts.variables;
for (var varDecl in varList.variables) {
declaredLocalVar(varDecl.name, varList.type,
varDecl.declaredElement as LocalVariableElement);
varDecl.declaredFragment!.element as LocalVariableElement);
}
}
visitNode(node);
@@ -412,7 +412,7 @@ abstract class LocalDeclarationVisitor extends UnifyingAstVisitor {
/// Visit the given [pattern] without visiting any of its parents.
void _visitDeclaredVariablePattern(DeclaredVariablePattern pattern) {
var declaredElement = pattern.declaredElement;
var declaredElement = pattern.declaredFragment?.element;
if (declaredElement != null) {
declaredLocalVar(pattern.name, pattern.type, declaredElement);
}
@@ -448,7 +448,7 @@ abstract class LocalDeclarationVisitor extends UnifyingAstVisitor {
for (var varDecl in varList.variables) {
if (varDecl.end < offset) {
declaredLocalVar(varDecl.name, varList.type,
varDecl.declaredElement as LocalVariableElement);
varDecl.declaredFragment?.element as LocalVariableElement);
}
}
} else if (stmt is FunctionDeclarationStatement) {
@@ -71,7 +71,7 @@ class _Visitor extends SimpleAstVisitor<void> {
void visitDeclaredIdentifier(DeclaredIdentifier node) {
var keyword = node.keyword;
if (node.type == null && keyword != null) {
var element = node.declaredElement;
var element = node.declaredFragment?.element;
if (element is VariableElement) {
if (keyword.keyword == Keyword.VAR) {
rule.reportAtToken(
@@ -141,7 +141,7 @@ class _Visitor extends SimpleAstVisitor<void> {
@override
void visitCatchClause(CatchClause node) {
if (node.onKeyword != null) return;
var caughtException = node.exceptionParameter?.declaredElement;
var caughtException = node.exceptionParameter?.declaredFragment?.element;
if (caughtException == null) return;
var validUseVisitor = _ValidUseVisitor(caughtException);
@@ -60,8 +60,7 @@ class _Visitor extends SimpleAstVisitor<void> {
@override
void visitVariableDeclaration(VariableDeclaration node) {
var declaredElement =
node.declaredElement ?? node.declaredFragment?.element;
var declaredElement = node.declaredFragment?.element;
if (declaredElement != null &&
!node.isConst &&
!node.isFinal &&
@@ -29,7 +29,7 @@ Element? _getElementFromVariableDeclarationStatement(
// In such a case, we should not return any cascadable element here.
return null;
}
return variable.declaredElement ?? variable.declaredFragment?.element;
return variable.declaredFragment?.element;
}
return null;
}
@@ -50,7 +50,7 @@ class _Visitor extends SimpleAstVisitor<void> {
if (loopVariable.isFinal) return;
var function = node.thisOrAncestorOfType<FunctionBody>();
var loopVariableElement = loopVariable.declaredElement;
var loopVariableElement = loopVariable.declaredFragment?.element;
if (function != null &&
loopVariableElement != null &&
!function.isPotentiallyMutatedInScope(loopVariableElement)) {
@@ -108,7 +108,7 @@ class _Visitor extends SimpleAstVisitor<void> {
extension on FunctionBody {
bool potentiallyMutates(Object pattern) {
if (pattern is! DeclaredVariablePattern) return true;
var element = pattern.declaredElement;
var element = pattern.declaredFragment?.element;
if (element == null) return true;
return isPotentiallyMutatedInScope(element.baseElement);
}
@@ -43,7 +43,7 @@ class _DeclaredVariableVisitor extends RecursiveAstVisitor<void> {
@override
void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
var element = node.declaredElement;
var element = node.declaredFragment?.element;
if (element != null) {
declaredElements.add(element);
}
@@ -57,7 +57,7 @@ class _Visitor extends SimpleAstVisitor<void> {
bool isPotentiallyMutated(AstNode pattern, FunctionBody function) {
if (pattern is DeclaredVariablePattern) {
var element = pattern.declaredElement;
var element = pattern.declaredFragment?.element;
if (element == null || function.isPotentiallyMutatedInScope(element)) {
return true;
}
@@ -132,7 +132,7 @@ class _Visitor extends SimpleAstVisitor<void> {
if (variable.equals == null || variable.initializer == null) {
return;
}
var declaredElement = variable.declaredElement;
var declaredElement = variable.declaredFragment?.element;
if (declaredElement != null &&
(declaredElement.isWildcardVariable ||
function.isPotentiallyMutatedInScope(declaredElement))) {
+1 -1
View File
@@ -53,7 +53,7 @@ class _PreferForEachVisitor extends SimpleAstVisitor<void> {
void visitForStatement(ForStatement node) {
var loopParts = node.forLoopParts;
if (loopParts is ForEachPartsWithDeclaration) {
var element = loopParts.loopVariable.declaredElement;
var element = loopParts.loopVariable.declaredFragment?.element;
if (element != null) {
forEachStatement = node;
this.element = element;
@@ -50,7 +50,7 @@ class _Visitor extends SimpleAstVisitor<void> {
rule.reportAtNode(node);
}
} else {
var declaredElement = node.declaredElement;
var declaredElement = node.declaredFragment?.element;
if (declaredElement != null &&
!function.isPotentiallyMutatedInScope(declaredElement)) {
rule.reportAtNode(node);
@@ -213,8 +213,7 @@ class _Visitor extends SimpleAstVisitor<void> {
if (argType == null) return;
if (!typeSystem.isSubtypeOf(tearoffType, argType)) return;
} else if (parent is VariableDeclaration) {
var variableElement =
parent.declaredElement ?? parent.declaredFragment?.element;
var variableElement = parent.declaredFragment?.element;
var variableType = variableElement?.type;
if (variableType == null) return;
if (!typeSystem.isSubtypeOf(tearoffType, variableType)) return;
@@ -70,7 +70,7 @@ DartType? getExpectedType(PostfixExpression node) {
}
// in variable declaration
if (parent is VariableDeclaration) {
var element = parent.declaredFragment?.element ?? parent.declaredElement;
var element = parent.declaredFragment?.element;
return element?.type;
}
// as right member of binary operator
@@ -48,7 +48,7 @@ class _Visitor extends SimpleAstVisitor<void> {
void check(AstNode node) {
if (node is! DeclaredVariablePattern) return;
var type = node.declaredElement?.type;
var type = node.declaredFragment?.element.type;
if (type == null) return;
if (type is DynamicType) return;
var valueType = node.matchedValueType;
@@ -100,8 +100,7 @@ class _Visitor extends SimpleAstVisitor<void> {
var initializerType = variable.initializer?.staticType;
if (initializerType == null) return;
var declaredElement =
variable.declaredElement ?? variable.declaredFragment?.element;
var declaredElement = variable.declaredFragment?.element;
if (declaredElement == null || declaredElement.type is DynamicType) {
return;
}
@@ -70,7 +70,7 @@ class _Visitor extends SimpleAstVisitor<void> {
// Don't over-report on records missing trailing commas.
// `(int,) r = (3);` is OK.
if (parent is VariableDeclaration &&
parent.declaredElement?.type is RecordType) {
parent.declaredFragment?.element.type is RecordType) {
if (expression is! RecordLiteral) return;
}
@@ -59,10 +59,10 @@ class _Visitor extends SimpleAstVisitor<void> {
nullCheckTarget = leftOperand.canonicalElement;
}
} else if (node.caseClause?.guardedPattern.pattern case NullCheckPattern(
pattern: DeclaredVariablePattern(:var declaredElement),
pattern: DeclaredVariablePattern(:var declaredFragment),
)) {
// Case of pattern null checks of the form `if (x case var y?) y`.
nullCheckTarget = declaredElement;
nullCheckTarget = declaredFragment?.element;
}
if (nullCheckTarget is PromotableElementImpl) {
@@ -42,7 +42,8 @@ class _Visitor extends SimpleAstVisitor<void> {
var element = node.expression.canonicalElement;
if (element != null) {
var catchClause = node.thisOrAncestorOfType<CatchClause>();
var exceptionParameter = catchClause?.exceptionParameter?.declaredElement;
var exceptionParameter =
catchClause?.exceptionParameter?.declaredFragment?.element;
if (element == exceptionParameter) {
rule.reportAtNode(node);
}
@@ -129,7 +129,7 @@ class _UseStringBufferVisitor extends SimpleAstVisitor<void> {
@override
void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
for (var variable in node.variables.variables) {
localElements.add(variable.declaredElement);
localElements.add(variable.declaredFragment?.element);
}
}
}