| 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/utilities.dart'; | 9 import 'package:analyzer/src/dart/ast/utilities.dart'; |
| 10 import 'package:analyzer/src/generated/engine.dart'; | 10 import 'package:analyzer/src/generated/engine.dart'; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 } | 29 } |
| 30 | 30 |
| 31 SimpleIdentifier _findSimpleIdentifier( | 31 SimpleIdentifier _findSimpleIdentifier( |
| 32 AstNode root, String code, String search) { | 32 AstNode root, String code, String search) { |
| 33 return EngineTestCase.findNode( | 33 return EngineTestCase.findNode( |
| 34 root, code, search, (n) => n is SimpleIdentifier); | 34 root, code, search, (n) => n is SimpleIdentifier); |
| 35 } | 35 } |
| 36 | 36 |
| 37 @reflectiveTest | 37 @reflectiveTest |
| 38 class DeclarationResolverTest extends ResolverTestCase { | 38 class DeclarationResolverTest extends ResolverTestCase { |
| 39 void fail_visitMethodDeclaration_setter_duplicate() { | |
| 40 // https://github.com/dart-lang/sdk/issues/25601 | |
| 41 String code = r''' | |
| 42 class C { | |
| 43 set zzz(x) {} | |
| 44 set zzz(y) {} | |
| 45 } | |
| 46 '''; | |
| 47 CompilationUnit unit = resolveSource(code); | |
| 48 PropertyAccessorElement firstElement = | |
| 49 _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement; | |
| 50 PropertyAccessorElement secondElement = | |
| 51 _findSimpleIdentifier(unit, code, 'zzz(y)').staticElement; | |
| 52 // re-resolve | |
| 53 CompilationUnit unit2 = _cloneResolveUnit(unit); | |
| 54 SimpleIdentifier firstName = _findSimpleIdentifier(unit2, code, 'zzz(x)'); | |
| 55 SimpleIdentifier secondName = _findSimpleIdentifier(unit2, code, 'zzz(y)'); | |
| 56 expect(firstName.staticElement, same(firstElement)); | |
| 57 expect(secondName.staticElement, same(secondElement)); | |
| 58 } | |
| 59 | |
| 60 @override | 39 @override |
| 61 void setUp() { | 40 void setUp() { |
| 62 super.setUp(); | 41 super.setUp(); |
| 63 } | 42 } |
| 64 | 43 |
| 65 void test_functionDeclaration_getter() { | 44 void test_functionDeclaration_getter() { |
| 66 String code = r''' | 45 String code = r''' |
| 67 int get zzz => 42; | 46 int get zzz => 42; |
| 68 '''; | 47 '''; |
| 69 CompilationUnit unit = resolveSource(code); | 48 CompilationUnit unit = resolveSource(code); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 _findSimpleIdentifier(unit, code, 'zzz => null').staticElement; | 113 _findSimpleIdentifier(unit, code, 'zzz => null').staticElement; |
| 135 // re-resolve | 114 // re-resolve |
| 136 CompilationUnit unit2 = _cloneResolveUnit(unit); | 115 CompilationUnit unit2 = _cloneResolveUnit(unit); |
| 137 SimpleIdentifier firstName = _findSimpleIdentifier(unit2, code, 'zzz => 1'); | 116 SimpleIdentifier firstName = _findSimpleIdentifier(unit2, code, 'zzz => 1'); |
| 138 SimpleIdentifier secondName = | 117 SimpleIdentifier secondName = |
| 139 _findSimpleIdentifier(unit2, code, 'zzz => null'); | 118 _findSimpleIdentifier(unit2, code, 'zzz => null'); |
| 140 expect(firstName.staticElement, same(firstElement)); | 119 expect(firstName.staticElement, same(firstElement)); |
| 141 expect(secondName.staticElement, same(secondElement)); | 120 expect(secondName.staticElement, same(secondElement)); |
| 142 } | 121 } |
| 143 | 122 |
| 123 void test_visitMethodDeclaration_getterSetter() { |
| 124 String code = r''' |
| 125 class C { |
| 126 int _field = 0; |
| 127 int get field => _field; |
| 128 void set field(value) {_field = value;} |
| 129 } |
| 130 '''; |
| 131 CompilationUnit unit = resolveSource(code); |
| 132 FieldElement getterElement = |
| 133 _findSimpleIdentifier(unit, code, 'field =').staticElement; |
| 134 PropertyAccessorElement setterElement = |
| 135 _findSimpleIdentifier(unit, code, 'field(').staticElement; |
| 136 // re-resolve |
| 137 CompilationUnit unit2 = _cloneResolveUnit(unit); |
| 138 SimpleIdentifier getterName = _findSimpleIdentifier(unit2, code, 'field ='); |
| 139 SimpleIdentifier setterName = _findSimpleIdentifier(unit2, code, 'field('); |
| 140 expect(getterName.staticElement, same(getterElement)); |
| 141 expect(setterName.staticElement, same(setterElement)); |
| 142 } |
| 143 |
| 144 void test_visitMethodDeclaration_method_duplicate() { | 144 void test_visitMethodDeclaration_method_duplicate() { |
| 145 String code = r''' | 145 String code = r''' |
| 146 class C { | 146 class C { |
| 147 void zzz(x) {} | 147 void zzz(x) {} |
| 148 void zzz(y) {} | 148 void zzz(y) {} |
| 149 } | 149 } |
| 150 '''; | 150 '''; |
| 151 CompilationUnit unit = resolveSource(code); | 151 CompilationUnit unit = resolveSource(code); |
| 152 MethodElement firstElement = | 152 MethodElement firstElement = |
| 153 _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement; | 153 _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement; |
| 154 MethodElement secondElement = | 154 MethodElement secondElement = |
| 155 _findSimpleIdentifier(unit, code, 'zzz(y)').staticElement; | 155 _findSimpleIdentifier(unit, code, 'zzz(y)').staticElement; |
| 156 // re-resolve | 156 // re-resolve |
| 157 CompilationUnit unit2 = _cloneResolveUnit(unit); | 157 CompilationUnit unit2 = _cloneResolveUnit(unit); |
| 158 SimpleIdentifier firstName = _findSimpleIdentifier(unit2, code, 'zzz(x)'); | 158 SimpleIdentifier firstName = _findSimpleIdentifier(unit2, code, 'zzz(x)'); |
| 159 SimpleIdentifier secondName = _findSimpleIdentifier(unit2, code, 'zzz(y)'); | 159 SimpleIdentifier secondName = _findSimpleIdentifier(unit2, code, 'zzz(y)'); |
| 160 expect(firstName.staticElement, same(firstElement)); | 160 expect(firstName.staticElement, same(firstElement)); |
| 161 expect(secondName.staticElement, same(secondElement)); | 161 expect(secondName.staticElement, same(secondElement)); |
| 162 } | 162 } |
| 163 |
| 164 void test_visitMethodDeclaration_setter_duplicate() { |
| 165 // https://github.com/dart-lang/sdk/issues/25601 |
| 166 String code = r''' |
| 167 class C { |
| 168 set zzz(x) {} |
| 169 set zzz(y) {} |
| 170 } |
| 171 '''; |
| 172 CompilationUnit unit = resolveSource(code); |
| 173 PropertyAccessorElement firstElement = |
| 174 _findSimpleIdentifier(unit, code, 'zzz(x)').staticElement; |
| 175 PropertyAccessorElement secondElement = |
| 176 _findSimpleIdentifier(unit, code, 'zzz(y)').staticElement; |
| 177 // re-resolve |
| 178 CompilationUnit unit2 = _cloneResolveUnit(unit); |
| 179 SimpleIdentifier firstName = _findSimpleIdentifier(unit2, code, 'zzz(x)'); |
| 180 SimpleIdentifier secondName = _findSimpleIdentifier(unit2, code, 'zzz(y)'); |
| 181 expect(firstName.staticElement, same(firstElement)); |
| 182 expect(secondName.staticElement, same(secondElement)); |
| 183 } |
| 163 } | 184 } |
| 164 | 185 |
| 165 /** | 186 /** |
| 166 * Strong mode DeclarationResolver tests | 187 * Strong mode DeclarationResolver tests |
| 167 */ | 188 */ |
| 168 @reflectiveTest | 189 @reflectiveTest |
| 169 class StrongModeDeclarationResolverTest extends ResolverTestCase { | 190 class StrongModeDeclarationResolverTest extends ResolverTestCase { |
| 170 @override | 191 @override |
| 171 void setUp() { | 192 void setUp() { |
| 172 resetWithOptions(new AnalysisOptionsImpl()..strongMode = true); | 193 resetWithOptions(new AnalysisOptionsImpl()..strongMode = true); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 expect(element.type.toString(), "<T>(T, T) → T"); | 232 expect(element.type.toString(), "<T>(T, T) → T"); |
| 212 expect(t.element, same(tElement)); | 233 expect(t.element, same(tElement)); |
| 213 | 234 |
| 214 // re-resolve | 235 // re-resolve |
| 215 CompilationUnit unit2 = _cloneResolveUnit(unit); | 236 CompilationUnit unit2 = _cloneResolveUnit(unit); |
| 216 node = _findSimpleIdentifier(unit2, code, 'max').parent; | 237 node = _findSimpleIdentifier(unit2, code, 'max').parent; |
| 217 t = node.typeParameters.typeParameters[0]; | 238 t = node.typeParameters.typeParameters[0]; |
| 218 expect(t.element, same(tElement)); | 239 expect(t.element, same(tElement)); |
| 219 } | 240 } |
| 220 } | 241 } |
| OLD | NEW |