Skip to content

Commit 2a5d00b

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Issue 38992. Build annotation elements for type parameter elements on their creation.
[email protected] Bug: #38992 Change-Id: I98f7690914ce2acb7074a8333b9a482605bb9afb Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125527 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent aa0cf44 commit 2a5d00b

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -917,9 +917,6 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
917917
boundNode.accept(this);
918918
if (_elementWalker == null) {
919919
element.bound = boundNode.type;
920-
921-
element.metadata = _createElementAnnotations(node.metadata);
922-
_setCodeRange(element, node);
923920
}
924921
}
925922
}
@@ -1059,6 +1056,9 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
10591056
} else {
10601057
element = TypeParameterElementImpl.forNode(name);
10611058
_elementHolder.addTypeParameter(element);
1059+
1060+
element.metadata = _createElementAnnotations(typeParameter.metadata);
1061+
_setCodeRange(element, typeParameter);
10621062
}
10631063
name.staticElement = element;
10641064
_nameScope.define(element);

pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analyzer/dart/ast/ast.dart';
6+
import 'package:test/test.dart';
67
import 'package:test_reflective_loader/test_reflective_loader.dart';
78

89
import 'driver_resolution.dart';
@@ -47,6 +48,17 @@ int Function(int a) y;
4748
''');
4849
}
4950

51+
test_metadata_typeParameter() async {
52+
await assertNoErrorsInCode(r'''
53+
const a = 42;
54+
55+
Function<@a T>() x;
56+
''');
57+
var T = findNode.typeParameter('T');
58+
var annotation = T.declaredElement.metadata[0];
59+
expect(annotation.element, findElement.topGet('a'));
60+
}
61+
5062
/// Test that when multiple [GenericFunctionType]s are used in a
5163
/// [FunctionDeclaration], all of them are resolved correctly.
5264
test_typeAnnotation_function() async {

0 commit comments

Comments
 (0)