CQ. Fix resolution of CommentReference(s) on field / function-typed / super formal parameters.
Bug: https://buganizer.corp.google.com/issues/488989811 Change-Id: I54e97d9ef895999a648d1f6626403804407cd60e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/484660 Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
c3cc1d53a3
commit
3828142590
@@ -213,6 +213,7 @@ class ScopeContext {
|
||||
var element = node.declaredFragment!.element;
|
||||
|
||||
node.metadata.accept(visitor);
|
||||
node.documentationComment?.accept(visitor);
|
||||
|
||||
withTypeParameterScope(element.typeParameters, () {
|
||||
node.type?.accept(visitor);
|
||||
@@ -287,6 +288,7 @@ class ScopeContext {
|
||||
var element = node.declaredFragment!.element;
|
||||
|
||||
node.metadata.accept(visitor);
|
||||
node.documentationComment?.accept(visitor);
|
||||
|
||||
withTypeParameterScope(element.typeParameters, () {
|
||||
node.returnType?.accept(visitor);
|
||||
@@ -413,6 +415,7 @@ class ScopeContext {
|
||||
var element = node.declaredFragment!.element;
|
||||
|
||||
node.metadata.accept(visitor);
|
||||
node.documentationComment?.accept(visitor);
|
||||
|
||||
withTypeParameterScope(element.typeParameters, () {
|
||||
node.type?.accept(visitor);
|
||||
|
||||
@@ -2086,6 +2086,62 @@ CommentReference
|
||||
''');
|
||||
}
|
||||
|
||||
test_onFieldFormalParameter() async {
|
||||
// TODO(scheglov): add tests for references to nested formal parameters
|
||||
await assertNoErrorsInCode(r'''
|
||||
class A {
|
||||
final int f;
|
||||
A({
|
||||
/// [int]
|
||||
required this.f,
|
||||
});
|
||||
}
|
||||
''');
|
||||
|
||||
var node = findNode.commentReference('int]');
|
||||
assertResolvedNodeText(node, r'''
|
||||
CommentReference
|
||||
expression: SimpleIdentifier
|
||||
token: int
|
||||
element: dart:core::@class::int
|
||||
staticType: null
|
||||
''');
|
||||
}
|
||||
|
||||
test_onFunctionTypedFormalParameter() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
void f(
|
||||
/// [int]
|
||||
void g(int a),
|
||||
) {}
|
||||
''');
|
||||
|
||||
var node = findNode.commentReference('int]');
|
||||
assertResolvedNodeText(node, r'''
|
||||
CommentReference
|
||||
expression: SimpleIdentifier
|
||||
token: int
|
||||
element: dart:core::@class::int
|
||||
staticType: null
|
||||
''');
|
||||
}
|
||||
|
||||
test_onFunctionTypedFormalParameter_self() async {
|
||||
// TODO(scheglov): add tests for references to nested formal parameters
|
||||
await assertNoErrorsInCode(r'''
|
||||
/// [bar]
|
||||
void f(int bar()) {}
|
||||
''');
|
||||
|
||||
assertResolvedNodeText(findNode.commentReference('bar]'), r'''
|
||||
CommentReference
|
||||
expression: SimpleIdentifier
|
||||
token: bar
|
||||
element: <testLibrary>::@function::f::@formalParameter::bar
|
||||
staticType: null
|
||||
''');
|
||||
}
|
||||
|
||||
test_onSimpleFormalParameter() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
void f(
|
||||
@@ -2104,17 +2160,27 @@ CommentReference
|
||||
''');
|
||||
}
|
||||
|
||||
test_parameter_functionTyped() async {
|
||||
test_onSuperFormalParameter() async {
|
||||
// TODO(scheglov): add tests for references to nested formal parameters
|
||||
await assertNoErrorsInCode(r'''
|
||||
/// [bar]
|
||||
foo(int bar()) {}
|
||||
class A {
|
||||
A({required int f});
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
B({
|
||||
/// [int]
|
||||
required super.f,
|
||||
});
|
||||
}
|
||||
''');
|
||||
|
||||
assertResolvedNodeText(findNode.commentReference('bar]'), r'''
|
||||
var node = findNode.commentReference('int]');
|
||||
assertResolvedNodeText(node, r'''
|
||||
CommentReference
|
||||
expression: SimpleIdentifier
|
||||
token: bar
|
||||
element: <testLibrary>::@function::foo::@formalParameter::bar
|
||||
token: int
|
||||
element: dart:core::@class::int
|
||||
staticType: null
|
||||
''');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user