Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(527)

Unified Diff: pkg/analyzer/test/generated/all_the_rest_test.dart

Issue 1660713002: Create ElementAnnotation objects prior to resolution. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fix accidental comment change Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/resolver.dart ('k') | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/generated/all_the_rest_test.dart
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index ee26679c3af5041643ac598ab30ae6140fb2bd8b..3cc77be49f351063f010b2e5c46a7036c60d5bd1 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -266,6 +266,30 @@ class DirectoryBasedSourceContainerTest {
@reflectiveTest
class ElementBuilderTest extends ParserTestCase {
+ /**
+ * Parse the given [code], pass it through [ElementBuilder], and return the
+ * resulting [ElementHolder].
+ */
+ ElementHolder buildElementsForText(String code) {
+ CompilationUnit unit = ParserTestCase.parseCompilationUnit(code);
+ ElementHolder holder = new ElementHolder();
+ ElementBuilder builder = new ElementBuilder(holder);
+ unit.accept(builder);
+ return holder;
+ }
+
+ /**
+ * Verify that the given [element] has exactly one annotation, and that its
+ * [ElementAnnotationImpl] is unresolved and points back to [element].
+ */
+ void checkMetadata(Element element) {
+ expect(element.metadata, hasLength(1));
+ expect(element.metadata[0], new isInstanceOf<ElementAnnotationImpl>());
+ ElementAnnotationImpl elementAnnotation = element.metadata[0];
+ expect(elementAnnotation.element, isNull); // Not yet resolved
+ expect(elementAnnotation.annotatedElement, element);
+ }
+
void fail_visitMethodDeclaration_setter_duplicate() {
// https://github.com/dart-lang/sdk/issues/25601
String code = r'''
@@ -274,16 +298,123 @@ class C {
set zzz(y) {}
}
''';
- CompilationUnit unit = ParserTestCase.parseCompilationUnit(code);
- ElementHolder holder = new ElementHolder();
- ElementBuilder builder = new ElementBuilder(holder);
- unit.accept(builder);
- ClassElement classElement = holder.types[0];
+ ClassElement classElement = buildElementsForText(code).types[0];
for (PropertyAccessorElement accessor in classElement.accessors) {
expect(accessor.variable.setter, same(accessor));
}
}
+ void test_metadata_variableDeclaration() {
+ List<TopLevelVariableElement> topLevelVariables =
+ buildElementsForText('@a int x, y;').topLevelVariables;
+ checkMetadata(topLevelVariables[0]);
+ checkMetadata(topLevelVariables[1]);
+ }
+
+ void test_metadata_visitClassDeclaration() {
+ ClassElement classElement = buildElementsForText('@a class C {}').types[0];
+ checkMetadata(classElement);
+ }
+
+ void test_metadata_visitClassTypeAlias() {
+ ClassElement classElement =
+ buildElementsForText('@a class C = D with E;').types[0];
+ checkMetadata(classElement);
+ }
+
+ void test_metadata_visitConstructorDeclaration() {
+ ConstructorElement constructorElement =
+ buildElementsForText('class C { @a C(); }').types[0].constructors[0];
+ checkMetadata(constructorElement);
+ }
+
+ void test_metadata_visitDeclaredIdentifier() {
+ LocalVariableElement localVariableElement =
+ buildElementsForText('f() { for (@a var x in y) {} }')
+ .functions[0]
+ .localVariables[0];
+ checkMetadata(localVariableElement);
+ }
+
+ void test_metadata_visitEnumDeclaration() {
+ ClassElement classElement =
+ buildElementsForText('@a enum E { v }').enums[0];
+ checkMetadata(classElement);
+ }
+
+ void test_metadata_visitFieldFormalParameter() {
+ ParameterElement parameterElement =
+ buildElementsForText('class C { var x; C(@a this.x); }')
+ .types[0]
+ .constructors[0]
+ .parameters[0];
+ checkMetadata(parameterElement);
+ }
+
+ void test_metadata_visitFunctionDeclaration_function() {
+ FunctionElement functionElement =
+ buildElementsForText('@a f() {}').functions[0];
+ checkMetadata(functionElement);
+ }
+
+ void test_metadata_visitFunctionDeclaration_getter() {
+ PropertyAccessorElement propertyAccessorElement =
+ buildElementsForText('@a get f => null;').accessors[0];
+ checkMetadata(propertyAccessorElement);
+ }
+
+ void test_metadata_visitFunctionDeclaration_setter() {
+ PropertyAccessorElement propertyAccessorElement =
+ buildElementsForText('@a set f(value) {}').accessors[0];
+ checkMetadata(propertyAccessorElement);
+ }
+
+ void test_metadata_visitFunctionTypeAlias() {
+ FunctionTypeAliasElement functionTypeAliasElement =
+ buildElementsForText('@a typedef F();').typeAliases[0];
+ checkMetadata(functionTypeAliasElement);
+ }
+
+ void test_metadata_visitFunctionTypedFormalParameter() {
+ ParameterElement parameterElement =
+ buildElementsForText('f(@a g()) {}').functions[0].parameters[0];
+ checkMetadata(parameterElement);
+ }
+
+ void test_metadata_visitMethodDeclaration_getter() {
+ PropertyAccessorElement propertyAccessorElement =
+ buildElementsForText('class C { @a get m => null; }')
+ .types[0]
+ .accessors[0];
+ checkMetadata(propertyAccessorElement);
+ }
+
+ void test_metadata_visitMethodDeclaration_method() {
+ MethodElement methodElement =
+ buildElementsForText('class C { @a m() {} }').types[0].methods[0];
+ checkMetadata(methodElement);
+ }
+
+ void test_metadata_visitMethodDeclaration_setter() {
+ PropertyAccessorElement propertyAccessorElement =
+ buildElementsForText('class C { @a set f(value) {} }')
+ .types[0]
+ .accessors[0];
+ checkMetadata(propertyAccessorElement);
+ }
+
+ void test_metadata_visitSimpleFormalParameter() {
+ ParameterElement parameterElement =
+ buildElementsForText('f(@a x) {}').functions[0].parameters[0];
+ checkMetadata(parameterElement);
+ }
+
+ void test_metadata_visitTypeParameter() {
+ TypeParameterElement typeParameterElement =
+ buildElementsForText('class C<@a T> {}').types[0].typeParameters[0];
+ checkMetadata(typeParameterElement);
+ }
+
void test_visitCatchClause() {
// } catch (e, s) {
ElementHolder holder = new ElementHolder();
« no previous file with comments | « pkg/analyzer/lib/src/generated/resolver.dart ('k') | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698