@@ -185,6 +185,155 @@ import 'lib.dart' show C;
185185f(C c) {
186186 c.a;
187187}
188+ ''' , [
189+ error (StaticTypeWarningCode .UNDEFINED_GETTER , 40 , 1 ),
190+ ]);
191+ }
192+
193+ test_visibility_shadowed_byClass () async {
194+ newFile ('/test/lib/lib.dart' , content: '''
195+ class C {}
196+ extension E on C {
197+ int get a => 1;
198+ }
199+ ''' );
200+ await assertNoErrorsInCode ('''
201+ import 'lib.dart';
202+
203+ class E {}
204+ f(C c) {
205+ c.a;
206+ }
207+ ''' );
208+ var access = findNode.prefixed ('c.a' );
209+ var import = findElement.importFind ('package:test/lib.dart' );
210+ assertElement (access, import.extension_ ('E' ).getGetter ('a' ));
211+ assertType (access, 'int' );
212+ }
213+
214+ test_visibility_shadowed_byImport () async {
215+ newFile ('/test/lib/lib1.dart' , content: '''
216+ extension E on Object {
217+ int get a => 1;
218+ }
219+ ''' );
220+ newFile ('/test/lib/lib2.dart' , content: '''
221+ class E {}
222+ class A {}
223+ ''' );
224+ await assertNoErrorsInCode ('''
225+ import 'lib1.dart';
226+ import 'lib2.dart';
227+
228+ f(Object o, A a) {
229+ o.a;
230+ }
231+ ''' );
232+ var access = findNode.prefixed ('o.a' );
233+ var import = findElement.importFind ('package:test/lib1.dart' );
234+ assertElement (access, import.extension_ ('E' ).getGetter ('a' ));
235+ assertType (access, 'int' );
236+ }
237+
238+ test_visibility_shadowed_byLocal_imported () async {
239+ newFile ('/test/lib/lib.dart' , content: '''
240+ class C {}
241+ extension E on C {
242+ int get a => 1;
243+ }
244+ ''' );
245+ await assertNoErrorsInCode ('''
246+ import 'lib.dart';
247+
248+ f(C c) {
249+ double E = 2.71;
250+ c.a;
251+ }
252+ ''' );
253+ var access = findNode.prefixed ('c.a' );
254+ var import = findElement.importFind ('package:test/lib.dart' );
255+ assertElement (access, import.extension_ ('E' ).getGetter ('a' ));
256+ assertType (access, 'int' );
257+ }
258+
259+ test_visibility_shadowed_byLocal_local () async {
260+ await assertNoErrorsInCode ('''
261+ class C {}
262+ extension E on C {
263+ int get a => 1;
264+ }
265+ f(C c) {
266+ double E = 2.71;
267+ c.a;
268+ }
269+ ''' );
270+ var access = findNode.prefixed ('c.a' );
271+ assertElement (access, findElement.getter ('a' ));
272+ assertType (access, 'int' );
273+ }
274+
275+ test_visibility_shadowed_byTopLevelVariable () async {
276+ newFile ('/test/lib/lib.dart' , content: '''
277+ class C {}
278+ extension E on C {
279+ int get a => 1;
280+ }
281+ ''' );
282+ await assertNoErrorsInCode ('''
283+ import 'lib.dart';
284+
285+ double E = 2.71;
286+ f(C c) {
287+ c.a;
288+ }
289+ ''' );
290+ var access = findNode.prefixed ('c.a' );
291+ var import = findElement.importFind ('package:test/lib.dart' );
292+ assertElement (access, import.extension_ ('E' ).getGetter ('a' ));
293+ assertType (access, 'int' );
294+ }
295+
296+ test_visibility_shadowed_coreByNonCore () async {
297+ newFile ('/test/lib/core.dart' , content: '''
298+ library dart.core;
299+
300+ extension E on Object {
301+ int get a => 1;
302+ }
303+ class A {}
304+ ''' );
305+ newFile ('/test/lib/lib.dart' , content: '''
306+ extension E on Object {
307+ int get a => 1;
308+ }
309+ class B {}
310+ ''' );
311+ await assertErrorsInCode ('''
312+ import 'core.dart';
313+ import 'lib.dart';
314+
315+ f(Object o, A a, B b) {
316+ o.a;
317+ }
318+ ''' , [
319+ error (CompileTimeErrorCode .AMBIGUOUS_EXTENSION_METHOD_ACCESS , 68 , 1 ),
320+ ]);
321+ }
322+
323+ @failingTest
324+ test_visibility_withPrefix () async {
325+ newFile ('/test/lib/lib.dart' , content: '''
326+ class C {}
327+ extension E on C {
328+ int get a => 1;
329+ }
330+ ''' );
331+ await assertErrorsInCode ('''
332+ import 'lib.dart' as p;
333+
334+ f(p.C c) {
335+ c.a;
336+ }
188337''' , [
189338 error (StaticTypeWarningCode .UNDEFINED_GETTER , 40 , 1 ),
190339 ]);
0 commit comments