| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library engine.declaration_resolver_test; | 5 library engine.declaration_resolver_test; |
| 6 | 6 |
| 7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
| 8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
| 9 import 'package:analyzer/src/dart/ast/ast.dart'; | 9 import 'package:analyzer/src/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/src/dart/ast/utilities.dart'; | 10 import 'package:analyzer/src/dart/ast/utilities.dart'; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 setupCode('@a enum E { v }'); | 94 setupCode('@a enum E { v }'); |
| 95 checkMetadata('E'); | 95 checkMetadata('E'); |
| 96 } | 96 } |
| 97 | 97 |
| 98 void test_metadata_exportDirective() { | 98 void test_metadata_exportDirective() { |
| 99 addNamedSource('/foo.dart', 'class C {}'); | 99 addNamedSource('/foo.dart', 'class C {}'); |
| 100 setupCode('@a export "foo.dart";'); | 100 setupCode('@a export "foo.dart";'); |
| 101 checkMetadata('export'); | 101 checkMetadata('export'); |
| 102 } | 102 } |
| 103 | 103 |
| 104 void test_metadata_exportDirective_resynthesized() { |
| 105 CompilationUnit unit = resolveSource(r''' |
| 106 @a |
| 107 export "dart:async"; |
| 108 |
| 109 @b |
| 110 export "dart:math"; |
| 111 |
| 112 const a = null; |
| 113 const b = null; |
| 114 '''); |
| 115 expect(unit.directives[0].metadata.single.name.name, 'a'); |
| 116 expect(unit.directives[1].metadata.single.name.name, 'b'); |
| 117 var unitElement = unit.element as CompilationUnitElementImpl; |
| 118 // Damage the unit element - as if "setAnnotations" were not called. |
| 119 // The ImportElement(s) still have the metadata, we should use it. |
| 120 unitElement.setAnnotations(unit.directives[0].offset, []); |
| 121 unitElement.setAnnotations(unit.directives[1].offset, []); |
| 122 expect(unitElement.library.exports[0].metadata, hasLength(1)); |
| 123 expect(unitElement.library.exports[1].metadata, hasLength(1)); |
| 124 // DeclarationResolver on the clone should succeed. |
| 125 CompilationUnit clonedUnit = AstCloner.clone(unit); |
| 126 new DeclarationResolver().resolve(clonedUnit, unit.element); |
| 127 expect(unit.directives[0].metadata.single.name.name, 'a'); |
| 128 expect(unit.directives[1].metadata.single.name.name, 'b'); |
| 129 } |
| 130 |
| 104 void test_metadata_fieldDeclaration() { | 131 void test_metadata_fieldDeclaration() { |
| 105 setupCode('class C { @a int x; }'); | 132 setupCode('class C { @a int x; }'); |
| 106 checkMetadata('x'); | 133 checkMetadata('x'); |
| 107 } | 134 } |
| 108 | 135 |
| 109 void test_metadata_fieldFormalParameter() { | 136 void test_metadata_fieldFormalParameter() { |
| 110 setupCode('class C { var x; C(@a this.x); }'); | 137 setupCode('class C { var x; C(@a this.x); }'); |
| 111 checkMetadata('this'); | 138 checkMetadata('this'); |
| 112 } | 139 } |
| 113 | 140 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 addNamedSource('/foo.dart', 'class C {}'); | 183 addNamedSource('/foo.dart', 'class C {}'); |
| 157 this.code = 'const a = null; @a import "foo.dart";'; | 184 this.code = 'const a = null; @a import "foo.dart";'; |
| 158 Source source = addNamedSource('/test.dart', code); | 185 Source source = addNamedSource('/test.dart', code); |
| 159 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); | 186 LibrarySpecificUnit target = new LibrarySpecificUnit(source, source); |
| 160 analysisContext.computeResult(source, LIBRARY_ELEMENT1); | 187 analysisContext.computeResult(source, LIBRARY_ELEMENT1); |
| 161 unit = analysisContext.computeResult(target, RESOLVED_UNIT1); | 188 unit = analysisContext.computeResult(target, RESOLVED_UNIT1); |
| 162 unit2 = _cloneResolveUnit(unit); | 189 unit2 = _cloneResolveUnit(unit); |
| 163 checkMetadata('import'); | 190 checkMetadata('import'); |
| 164 } | 191 } |
| 165 | 192 |
| 193 void test_metadata_importDirective_resynthesized() { |
| 194 CompilationUnit unit = resolveSource(r''' |
| 195 @a |
| 196 import "dart:async"; |
| 197 |
| 198 @b |
| 199 import "dart:math"; |
| 200 |
| 201 const a = null; |
| 202 const b = null; |
| 203 '''); |
| 204 expect(unit.directives[0].metadata.single.name.name, 'a'); |
| 205 expect(unit.directives[1].metadata.single.name.name, 'b'); |
| 206 var unitElement = unit.element as CompilationUnitElementImpl; |
| 207 // Damage the unit element - as if "setAnnotations" were not called. |
| 208 // The ImportElement(s) still have the metadata, we should use it. |
| 209 unitElement.setAnnotations(unit.directives[0].offset, []); |
| 210 unitElement.setAnnotations(unit.directives[1].offset, []); |
| 211 expect(unitElement.library.imports[0].metadata, hasLength(1)); |
| 212 expect(unitElement.library.imports[1].metadata, hasLength(1)); |
| 213 // DeclarationResolver on the clone should succeed. |
| 214 CompilationUnit clonedUnit = AstCloner.clone(unit); |
| 215 new DeclarationResolver().resolve(clonedUnit, unit.element); |
| 216 expect(unit.directives[0].metadata.single.name.name, 'a'); |
| 217 expect(unit.directives[1].metadata.single.name.name, 'b'); |
| 218 } |
| 219 |
| 166 void test_metadata_libraryDirective() { | 220 void test_metadata_libraryDirective() { |
| 167 setupCode('@a library L;'); | 221 setupCode('@a library L;'); |
| 168 checkMetadata('L'); | 222 checkMetadata('L'); |
| 169 } | 223 } |
| 170 | 224 |
| 171 void test_metadata_libraryDirective_resynthesized() { | 225 void test_metadata_libraryDirective_resynthesized() { |
| 172 CompilationUnit unit = resolveSource('@a library L; const a = null;'); | 226 CompilationUnit unit = resolveSource('@a library L; const a = null;'); |
| 173 expect(unit.directives.single.metadata.single.name.name, 'a'); | 227 expect(unit.directives.single.metadata.single.name.name, 'a'); |
| 174 var unitElement = unit.element as CompilationUnitElementImpl; | 228 var unitElement = unit.element as CompilationUnitElementImpl; |
| 175 // Damage the unit element - as if "setAnnotations" were not called. | 229 // Damage the unit element - as if "setAnnotations" were not called. |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 expect(element.type.toString(), "<T>(T, T) → T"); | 676 expect(element.type.toString(), "<T>(T, T) → T"); |
| 623 expect(t.element, same(tElement)); | 677 expect(t.element, same(tElement)); |
| 624 | 678 |
| 625 // re-resolve | 679 // re-resolve |
| 626 CompilationUnit unit2 = _cloneResolveUnit(unit); | 680 CompilationUnit unit2 = _cloneResolveUnit(unit); |
| 627 node = _findSimpleIdentifier(unit2, code, 'max').parent; | 681 node = _findSimpleIdentifier(unit2, code, 'max').parent; |
| 628 t = node.typeParameters.typeParameters[0]; | 682 t = node.typeParameters.typeParameters[0]; |
| 629 expect(t.element, same(tElement)); | 683 expect(t.element, same(tElement)); |
| 630 } | 684 } |
| 631 } | 685 } |
| OLD | NEW |