Issue 50660. Fix 'get Source' for ParameterMember.

Bug: https://github.com/dart-lang/sdk/issues/50660
Change-Id: Ie6af7c60178b2010f4cd5254e563185eb7e27042
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274603
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:
Konstantin Shcheglov 2022-12-09 02:08:24 +00:00 committed by Commit Queue
parent db636ba8fe
commit 09a5d048e8
4 changed files with 40 additions and 4 deletions

View file

@ -1,3 +1,6 @@
## 5.4.0-dev
* Bug fixes: 50660
## 5.3.1 ## 5.3.1
* Require `collection: ^1.17.0` because we use `elementAtOrNull`. * Require `collection: ^1.17.0` because we use `elementAtOrNull`.

View file

@ -97,6 +97,9 @@ class ConstructorMember extends ExecutableMember
@override @override
InterfaceType get returnType => type.returnType as InterfaceType; InterfaceType get returnType => type.returnType as InterfaceType;
@override
Source get source => _declaration.source!;
@override @override
T? accept<T>(ElementVisitor<T> visitor) => T? accept<T>(ElementVisitor<T> visitor) =>
visitor.visitConstructorElement(this); visitor.visitConstructorElement(this);
@ -396,6 +399,9 @@ class FieldMember extends VariableMember implements FieldElement {
_typeProvider, baseSetter, _substitution, isLegacy); _typeProvider, baseSetter, _substitution, isLegacy);
} }
@override
Source? get source => _declaration.source;
@override @override
T? accept<T>(ElementVisitor<T> visitor) => visitor.visitFieldElement(this); T? accept<T>(ElementVisitor<T> visitor) => visitor.visitFieldElement(this);
@ -458,6 +464,9 @@ class FunctionMember extends ExecutableMember implements FunctionElement {
@override @override
String get name => declaration.name; String get name => declaration.name;
@override
Source get source => _declaration.source!;
@override @override
T? accept<T>(ElementVisitor<T> visitor) { T? accept<T>(ElementVisitor<T> visitor) {
return visitor.visitFunctionElement(this); return visitor.visitFunctionElement(this);
@ -620,9 +629,6 @@ abstract class Member implements Element {
@override @override
AnalysisSession? get session => _declaration.session; AnalysisSession? get session => _declaration.session;
@override
Source get source => _declaration.source!;
/// The substitution for type parameters referenced in the base element. /// The substitution for type parameters referenced in the base element.
MapSubstitution get substitution => _substitution; MapSubstitution get substitution => _substitution;
@ -807,6 +813,9 @@ class MethodMember extends ExecutableMember implements MethodElement {
@override @override
String get name => declaration.name; String get name => declaration.name;
@override
Source get source => _declaration.source!;
@override @override
T? accept<T>(ElementVisitor<T> visitor) => visitor.visitMethodElement(this); T? accept<T>(ElementVisitor<T> visitor) => visitor.visitMethodElement(this);
@ -929,6 +938,9 @@ class ParameterMember extends VariableMember
return const <ParameterElement>[]; return const <ParameterElement>[];
} }
@override
Source? get source => _declaration.source;
@override @override
T? accept<T>(ElementVisitor<T> visitor) => T? accept<T>(ElementVisitor<T> visitor) =>
visitor.visitParameterElement(this); visitor.visitParameterElement(this);
@ -1043,6 +1055,9 @@ class PropertyAccessorMember extends ExecutableMember
@override @override
String get name => declaration.name; String get name => declaration.name;
@override
Source get source => _declaration.source!;
@override @override
PropertyInducingElement get variable { PropertyInducingElement get variable {
// TODO // TODO
@ -1188,6 +1203,9 @@ class TopLevelVariableMember extends VariableMember
_typeProvider, baseSetter, _substitution, isLegacy); _typeProvider, baseSetter, _substitution, isLegacy);
} }
@override
Source get source => _declaration.source!;
@override @override
T? accept<T>(ElementVisitor<T> visitor) { T? accept<T>(ElementVisitor<T> visitor) {
return visitor.visitTopLevelVariableElement(this); return visitor.visitTopLevelVariableElement(this);

View file

@ -1,5 +1,5 @@
name: analyzer name: analyzer
version: 5.3.1 version: 5.4.0-dev
description: This package provides a library that performs static analysis of Dart code. description: This package provides a library that performs static analysis of Dart code.
repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer

View file

@ -5,6 +5,7 @@
import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart'; import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/error/codes.dart'; import 'package:analyzer/src/error/codes.dart';
import 'package:test/expect.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'context_collection_resolution.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<T>({int? a}) {}
void f() {
foo(a: 0);
}
''');
var element = findNode.simple('a:').staticElement!;
expect(element.source, isNull);
}
test_typeArgumentTypes_generic_inferred_leftTop_dynamic() async { test_typeArgumentTypes_generic_inferred_leftTop_dynamic() async {
await assertNoErrorsInCode(''' await assertNoErrorsInCode('''
void foo<T extends Object>(T? value) {} void foo<T extends Object>(T? value) {}