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
* Require `collection: ^1.17.0` because we use `elementAtOrNull`.

View file

@ -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<T>(ElementVisitor<T> 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<T>(ElementVisitor<T> 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<T>(ElementVisitor<T> 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<T>(ElementVisitor<T> visitor) => visitor.visitMethodElement(this);
@ -929,6 +938,9 @@ class ParameterMember extends VariableMember
return const <ParameterElement>[];
}
@override
Source? get source => _declaration.source;
@override
T? accept<T>(ElementVisitor<T> 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<T>(ElementVisitor<T> visitor) {
return visitor.visitTopLevelVariableElement(this);

View file

@ -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

View file

@ -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<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 {
await assertNoErrorsInCode('''
void foo<T extends Object>(T? value) {}