Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 89cd39c

Browse files
author
Dart CI
committed
Version 2.12.0-263.0.dev
Merge commit 'cc1cc0bb578e7372a40f3fd515fa37427f66e5ec' into 'dev'
2 parents 15dfe85 + cc1cc0b commit 89cd39c

File tree

72 files changed

+10908
-1479
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+10908
-1479
lines changed

pkg/analysis_server/test/search/element_references_test.dart

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@ import 'package:analyzer_plugin/protocol/protocol_common.dart';
77
import 'package:test/test.dart';
88
import 'package:test_reflective_loader/test_reflective_loader.dart';
99

10+
import '../analysis_abstract.dart';
1011
import 'abstract_search_domain.dart';
1112

1213
void main() {
1314
defineReflectiveSuite(() {
1415
defineReflectiveTests(ElementReferencesTest);
16+
defineReflectiveTests(ElementReferencesWithNonFunctionTypeAliasesTest);
1517
});
1618
}
1719

1820
@reflectiveTest
1921
class ElementReferencesTest extends AbstractSearchDomainTest {
2022
Element searchElement;
2123

24+
bool get hasNonFunctionTypeAliases => false;
25+
2226
void assertHasRef(SearchResultKind kind, String search, bool isPotential) {
2327
assertHasResult(kind, search);
2428
expect(result.isPotential, isPotential);
@@ -863,26 +867,36 @@ main() {
863867
assertHasResult(SearchResultKind.REFERENCE, 'int b');
864868
}
865869

866-
Future<void> test_typeReference_functionType() async {
870+
Future<void> test_typeReference_typeAlias_functionType() async {
867871
addTestFile('''
868-
typedef F();
872+
typedef F = Function();
869873
main(F f) {
870874
}
871875
''');
872-
await findElementReferences('F()', false);
873-
expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS);
876+
await findElementReferences('F =', false);
877+
expect(
878+
searchElement.kind,
879+
hasNonFunctionTypeAliases
880+
? ElementKind.TYPE_ALIAS
881+
: ElementKind.FUNCTION_TYPE_ALIAS,
882+
);
874883
expect(results, hasLength(1));
875884
assertHasResult(SearchResultKind.REFERENCE, 'F f');
876885
}
877886

878-
Future<void> test_typeReference_genericTypeAlias_function() async {
887+
Future<void> test_typeReference_typeAlias_legacy() async {
879888
addTestFile('''
880-
typedef F = Function();
889+
typedef F();
881890
main(F f) {
882891
}
883892
''');
884-
await findElementReferences('F =', false);
885-
expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS);
893+
await findElementReferences('F()', false);
894+
expect(
895+
searchElement.kind,
896+
hasNonFunctionTypeAliases
897+
? ElementKind.TYPE_ALIAS
898+
: ElementKind.FUNCTION_TYPE_ALIAS,
899+
);
886900
expect(results, hasLength(1));
887901
assertHasResult(SearchResultKind.REFERENCE, 'F f');
888902
}
@@ -901,3 +915,28 @@ class A<T> {
901915
assertHasResult(SearchResultKind.REFERENCE, 'T m()');
902916
}
903917
}
918+
919+
@reflectiveTest
920+
class ElementReferencesWithNonFunctionTypeAliasesTest
921+
extends ElementReferencesTest with WithNonFunctionTypeAliasesMixin {
922+
@override
923+
bool get hasNonFunctionTypeAliases => true;
924+
925+
Future<void> test_typeReference_typeAlias_interfaceType() async {
926+
addTestFile('''
927+
typedef A<T> = Map<int, T>;
928+
929+
void(A<String> a) {}
930+
''');
931+
// Can find `A`.
932+
await findElementReferences('A<T> =', false);
933+
expect(searchElement.kind, ElementKind.TYPE_ALIAS);
934+
expect(results, hasLength(1));
935+
assertHasResult(SearchResultKind.REFERENCE, 'A<String>');
936+
937+
// Can find in `A`.
938+
await findElementReferences('int,', false);
939+
expect(searchElement.kind, ElementKind.CLASS);
940+
assertHasResult(SearchResultKind.REFERENCE, 'int,');
941+
}
942+
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
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.
4+
5+
var result;
6+
7+
class Class {
8+
int instanceMethod() => 1;
9+
int instanceMethod() => 2;
10+
11+
int get instanceGetter => 1;
12+
int get instanceGetter => 2;
13+
14+
void set instanceSetter(value) {
15+
result = 1;
16+
}
17+
18+
void set instanceSetter(value) {
19+
result = 2;
20+
}
21+
22+
int instanceField = 1;
23+
int instanceField = 2;
24+
25+
int instanceFieldAndSetter1 = 1;
26+
void set instanceFieldAndSetter1(int value) {
27+
result = 2;
28+
}
29+
30+
void set instanceFieldAndSetter2(int value) {
31+
result = 2;
32+
}
33+
34+
int instanceFieldAndSetter2 = 1;
35+
36+
late final int instanceLateFinalFieldAndSetter1;
37+
void set instanceLateFinalFieldAndSetter1(int value) {
38+
result = 2;
39+
}
40+
41+
void set instanceLateFinalFieldAndSetter2(int value) {
42+
result = 2;
43+
}
44+
45+
late final int instanceLateFinalFieldAndSetter2;
46+
47+
final int instanceDuplicateFieldAndSetter = 1;
48+
final int instanceDuplicateFieldAndSetter = 2;
49+
void set instanceDuplicateFieldAndSetter(int value) {
50+
result = 3;
51+
}
52+
53+
final int instanceFieldAndDuplicateSetter = 1;
54+
void set instanceFieldAndDuplicateSetter(int value) {
55+
result = 2;
56+
}
57+
58+
void set instanceFieldAndDuplicateSetter(int value) {
59+
result = 3;
60+
}
61+
62+
final int instanceDuplicateFieldAndDuplicateSetter = 1;
63+
final int instanceDuplicateFieldAndDuplicateSetter = 2;
64+
void set instanceDuplicateFieldAndDuplicateSetter(int value) {
65+
result = 3;
66+
}
67+
68+
void set instanceDuplicateFieldAndDuplicateSetter(int value) {
69+
result = 4;
70+
}
71+
72+
int instanceMethodAndSetter1() => 1;
73+
void set instanceMethodAndSetter1(int value) {
74+
result = 2;
75+
}
76+
77+
void set instanceMethodAndSetter2(int value) {
78+
result = 2;
79+
}
80+
81+
int instanceMethodAndSetter2() => 1;
82+
}
83+
84+
test() {
85+
Class c = new Class();
86+
c.instanceMethod();
87+
(c.instanceMethod)();
88+
c.instanceGetter;
89+
c.instanceSetter = 0;
90+
c.instanceField;
91+
c.instanceField = 0;
92+
c.instanceDuplicateFieldAndSetter;
93+
c.instanceDuplicateFieldAndSetter = 0;
94+
c.instanceFieldAndDuplicateSetter;
95+
c.instanceFieldAndDuplicateSetter = 0;
96+
c.instanceDuplicateFieldAndDuplicateSetter;
97+
c.instanceDuplicateFieldAndDuplicateSetter = 0;
98+
}
99+
100+
main() {
101+
Class c = new Class();
102+
c.instanceFieldAndSetter1 = 0;
103+
expect(2, result);
104+
expect(1, c.instanceFieldAndSetter1);
105+
106+
result = null;
107+
c.instanceFieldAndSetter2 = 0;
108+
expect(null, result);
109+
expect(0, c.instanceFieldAndSetter2);
110+
111+
result = null;
112+
c.instanceLateFinalFieldAndSetter1 = 0;
113+
expect(2, result);
114+
throws(() => c.instanceLateFinalFieldAndSetter1);
115+
116+
result = null;
117+
c.instanceLateFinalFieldAndSetter2 = 0;
118+
expect(null, result);
119+
expect(0, c.instanceLateFinalFieldAndSetter2);
120+
121+
result = null;
122+
expect(1, c.instanceMethodAndSetter1());
123+
c.instanceMethodAndSetter1 = 0;
124+
expect(2, result);
125+
126+
result = null;
127+
expect(1, c.instanceMethodAndSetter2());
128+
c.instanceMethodAndSetter2 = 0;
129+
expect(2, result);
130+
}
131+
132+
expect(expected, actual) {
133+
if (expected != actual) throw 'Expected $expected, actual $actual';
134+
}
135+
136+
throws(dynamic Function() f) {
137+
try {
138+
f();
139+
} catch (e) {
140+
print(e);
141+
return;
142+
}
143+
throw 'Expected exception.';
144+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
6+
// int instanceMethod() => 2;
7+
// ^^^^^^^^^^^^^^
8+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
9+
// int instanceMethod() => 1;
10+
// ^^^^^^^^^^^^^^
11+
//
12+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
13+
// int get instanceGetter => 2;
14+
// ^^^^^^^^^^^^^^
15+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
16+
// int get instanceGetter => 1;
17+
// ^^^^^^^^^^^^^^
18+
//
19+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
20+
// void set instanceSetter(value) {
21+
// ^^^^^^^^^^^^^^
22+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
23+
// void set instanceSetter(value) {
24+
// ^^^^^^^^^^^^^^
25+
//
26+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
27+
// int instanceField = 2;
28+
// ^^^^^^^^^^^^^
29+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
30+
// int instanceField = 1;
31+
// ^^^^^^^^^^^^^
32+
//
33+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
34+
// final int instanceDuplicateFieldAndSetter = 2;
35+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
36+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
37+
// final int instanceDuplicateFieldAndSetter = 1;
38+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39+
//
40+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
41+
// void set instanceFieldAndDuplicateSetter(int value) {
42+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
43+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
44+
// void set instanceFieldAndDuplicateSetter(int value) {
45+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
46+
//
47+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
48+
// final int instanceDuplicateFieldAndDuplicateSetter = 2;
49+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
50+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
51+
// final int instanceDuplicateFieldAndDuplicateSetter = 1;
52+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53+
//
54+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
55+
// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
56+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
57+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
58+
// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
59+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
60+
//
61+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
62+
// void set instanceFieldAndSetter1(int value) {
63+
// ^
64+
//
65+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
66+
// int instanceFieldAndSetter1 = 1;
67+
// ^
68+
//
69+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
70+
// void set instanceFieldAndSetter2(int value) {
71+
// ^
72+
//
73+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
74+
// int instanceFieldAndSetter2 = 1;
75+
// ^
76+
//
77+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
78+
// void set instanceMethodAndSetter1(int value) {
79+
// ^^^^^^^^^^^^^^^^^^^^^^^^
80+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
81+
// int instanceMethodAndSetter1() => 1;
82+
// ^^^^^^^^^^^^^^^^^^^^^^^^
83+
//
84+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
85+
// int instanceMethodAndSetter2() => 1;
86+
// ^^^^^^^^^^^^^^^^^^^^^^^^
87+
// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
88+
// void set instanceMethodAndSetter2(int value) {
89+
// ^^^^^^^^^^^^^^^^^^^^^^^^
90+
//
91+
import self as self;
92+
import "dart:core" as core;
93+
94+
class Class extends core::Object {
95+
field core::int instanceField;
96+
field core::int instanceFieldAndSetter1;
97+
field core::int instanceFieldAndSetter2;
98+
late final [setter] field core::int instanceLateFinalFieldAndSetter1;
99+
late final [setter] field core::int instanceLateFinalFieldAndSetter2;
100+
final field core::int instanceDuplicateFieldAndSetter;
101+
final field core::int instanceFieldAndDuplicateSetter;
102+
final field core::int instanceDuplicateFieldAndDuplicateSetter;
103+
synthetic constructor •() → self::Class
104+
;
105+
method instanceMethod() → core::int
106+
;
107+
get instanceGetter() → core::int
108+
;
109+
set instanceSetter(dynamic value) → void
110+
;
111+
set instanceFieldAndSetter1(core::int value) → void
112+
;
113+
set instanceFieldAndSetter2(core::int value) → void
114+
;
115+
set instanceLateFinalFieldAndSetter1(core::int value) → void
116+
;
117+
set instanceLateFinalFieldAndSetter2(core::int value) → void
118+
;
119+
set instanceDuplicateFieldAndSetter(core::int value) → void
120+
;
121+
set instanceFieldAndDuplicateSetter(core::int value) → void
122+
;
123+
set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void
124+
;
125+
method instanceMethodAndSetter1() → core::int
126+
;
127+
set instanceMethodAndSetter1(core::int value) → void
128+
;
129+
set instanceMethodAndSetter2(core::int value) → void
130+
;
131+
method instanceMethodAndSetter2() → core::int
132+
;
133+
}
134+
static field dynamic result;
135+
static method test() → dynamic
136+
;
137+
static method main() → dynamic
138+
;
139+
static method expect(dynamic expected, dynamic actual) → dynamic
140+
;
141+
static method throws(() → dynamic f) → dynamic
142+
;

0 commit comments

Comments
 (0)