diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md index 07bf9d52163..94b9595297b 100644 --- a/pkg/analyzer/CHANGELOG.md +++ b/pkg/analyzer/CHANGELOG.md @@ -1,3 +1,6 @@ +## 5.4.0-dev +* Bug fixes: 50660 + ## 5.3.1 * Require `collection: ^1.17.0` because we use `elementAtOrNull`. diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart index 201032eaf4b..e46a7ebfe94 100644 --- a/pkg/analyzer/lib/src/dart/element/member.dart +++ b/pkg/analyzer/lib/src/dart/element/member.dart @@ -97,6 +97,9 @@ class ConstructorMember extends ExecutableMember @override InterfaceType get returnType => type.returnType as InterfaceType; + @override + Source get source => _declaration.source!; + @override T? accept(ElementVisitor visitor) => visitor.visitConstructorElement(this); @@ -396,6 +399,9 @@ class FieldMember extends VariableMember implements FieldElement { _typeProvider, baseSetter, _substitution, isLegacy); } + @override + Source? get source => _declaration.source; + @override T? accept(ElementVisitor visitor) => visitor.visitFieldElement(this); @@ -458,6 +464,9 @@ class FunctionMember extends ExecutableMember implements FunctionElement { @override String get name => declaration.name; + @override + Source get source => _declaration.source!; + @override T? accept(ElementVisitor visitor) { return visitor.visitFunctionElement(this); @@ -620,9 +629,6 @@ abstract class Member implements Element { @override AnalysisSession? get session => _declaration.session; - @override - Source get source => _declaration.source!; - /// The substitution for type parameters referenced in the base element. MapSubstitution get substitution => _substitution; @@ -807,6 +813,9 @@ class MethodMember extends ExecutableMember implements MethodElement { @override String get name => declaration.name; + @override + Source get source => _declaration.source!; + @override T? accept(ElementVisitor visitor) => visitor.visitMethodElement(this); @@ -929,6 +938,9 @@ class ParameterMember extends VariableMember return const []; } + @override + Source? get source => _declaration.source; + @override T? accept(ElementVisitor visitor) => visitor.visitParameterElement(this); @@ -1043,6 +1055,9 @@ class PropertyAccessorMember extends ExecutableMember @override String get name => declaration.name; + @override + Source get source => _declaration.source!; + @override PropertyInducingElement get variable { // TODO @@ -1188,6 +1203,9 @@ class TopLevelVariableMember extends VariableMember _typeProvider, baseSetter, _substitution, isLegacy); } + @override + Source get source => _declaration.source!; + @override T? accept(ElementVisitor visitor) { return visitor.visitTopLevelVariableElement(this); diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml index 664232f5090..83fc48489a2 100644 --- a/pkg/analyzer/pubspec.yaml +++ b/pkg/analyzer/pubspec.yaml @@ -1,5 +1,5 @@ name: analyzer -version: 5.3.1 +version: 5.4.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 diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart index 29cb4e1d68d..bfebef954ad 100644 --- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart @@ -5,6 +5,7 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/src/dart/error/syntactic_errors.dart'; import 'package:analyzer/src/error/codes.dart'; +import 'package:test/expect.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; import 'context_collection_resolution.dart'; @@ -1000,6 +1001,20 @@ CascadeExpression '''); } + test_parameterMember_source() async { + // See https://github.com/dart-lang/sdk/issues/50660 + await assertNoErrorsInCode(r''' +void foo({int? a}) {} + +void f() { + foo(a: 0); +} +'''); + + var element = findNode.simple('a:').staticElement!; + expect(element.source, isNull); + } + test_typeArgumentTypes_generic_inferred_leftTop_dynamic() async { await assertNoErrorsInCode(''' void foo(T? value) {}