Skip to content

Commit 0ce1a92

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Suggest constructors for implicit creation in previewDart2.
[email protected] Bug: flutter/flutter-intellij#998 Change-Id: I43270f47fb43402d1a9e0f7d9814494ffd83bb5e Reviewed-on: https://dart-review.googlesource.com/43080 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent d0be238 commit 0ce1a92

File tree

8 files changed

+84
-18
lines changed

8 files changed

+84
-18
lines changed

pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ class _SuggestionBuilder extends GeneralizingElementVisitor {
6767
// ignored
6868
}
6969

70+
@override
71+
visitConstructorElement(ConstructorElement element) {
72+
if (element.context.analysisOptions.previewDart2) {
73+
_addSuggestion(element);
74+
}
75+
}
76+
7077
@override
7178
visitFieldElement(FieldElement element) {
7279
if (element.isStatic) {

pkg/analysis_server/test/abstract_context.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ class Required {
8989
return source;
9090
}
9191

92+
void configurePreviewDart2() {
93+
driver.configure(
94+
analysisOptions: new AnalysisOptionsImpl.from(driver.analysisOptions)
95+
..previewDart2 = true);
96+
}
97+
9298
void processRequiredPlugins() {
9399
AnalysisEngine.instance.processRequiredPlugins();
94100
}

pkg/analysis_server/test/completion_test.dart

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -781,21 +781,17 @@ main() {
781781
<String>["1+fooConst", "1-fooNotConst", "1-bar"],
782782
failingTests: '1');
783783

784-
buildTests(
785-
'testCompletion_annotation_type',
786-
'''
784+
buildTests('testCompletion_annotation_type', '''
787785
class AAA {
788786
const AAA({int a, int b});
789787
const AAA.nnn(int c, int d);
790788
}
791789
@AAA!1
792790
main() {
793-
}''',
794-
<String>[
795-
"1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
796-
"1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
797-
],
798-
failingTests: '1');
791+
}''', <String>[
792+
"1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
793+
"1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
794+
]);
799795

800796
buildTests('testCompletion_annotation_type_inClass_withoutMember', '''
801797
class AAA {

pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
198198
CompletionSuggestion assertSuggestConstructor(String name,
199199
{int relevance: DART_RELEVANCE_DEFAULT,
200200
String importUri,
201+
String elementName,
201202
int elemOffset,
202203
String defaultArgListString: _UNCHECKED,
203204
List<int> defaultArgumentListTextRanges}) {
@@ -211,7 +212,8 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
211212
expect(element, isNotNull);
212213
expect(element.kind, equals(ElementKind.CONSTRUCTOR));
213214
int index = name.indexOf('.');
214-
expect(element.name, index >= 0 ? name.substring(index + 1) : '');
215+
elementName ??= index >= 0 ? name.substring(index + 1) : '';
216+
expect(element.name, elementName);
215217
return cs;
216218
}
217219

pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2381,6 +2381,36 @@ class B extends A {
23812381
assertNotSuggested('int');
23822382
}
23832383

2384+
test_implicitCreation() async {
2385+
configurePreviewDart2();
2386+
addSource('/a.dart', '''
2387+
class A {
2388+
A.a1();
2389+
A.a2();
2390+
}
2391+
class B {
2392+
B.b1();
2393+
B.b2();
2394+
}
2395+
''');
2396+
addTestSource('''
2397+
import 'a.dart';
2398+
2399+
main() {
2400+
^;
2401+
}
2402+
''');
2403+
await computeSuggestions();
2404+
2405+
assertSuggestClass('A');
2406+
assertSuggestConstructor('A.a1');
2407+
assertSuggestConstructor('A.a2');
2408+
2409+
assertSuggestClass('B');
2410+
assertSuggestConstructor('B.b1');
2411+
assertSuggestConstructor('B.b2');
2412+
}
2413+
23842414
test_ImportDirective_dart() async {
23852415
// SimpleStringLiteral ImportDirective
23862416
addTestSource('''

pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,27 @@ class StaticMemberContributorTest extends DartCompletionContributorTest {
9797
assertSuggestField('values', 'List<E>', isDeprecated: true);
9898
}
9999

100+
test_implicitCreation() async {
101+
configurePreviewDart2();
102+
addSource('/a.dart', '''
103+
class A {
104+
A.foo();
105+
A.bar();
106+
}
107+
''');
108+
addTestSource('''
109+
import 'a.dart';
110+
111+
main() {
112+
A.^;
113+
}
114+
''');
115+
await computeSuggestions();
116+
117+
assertSuggestConstructor('foo', elementName: 'foo');
118+
assertSuggestConstructor('bar', elementName: 'bar');
119+
}
120+
100121
test_keyword() async {
101122
addTestSource('class C { static C get instance => null; } main() {C.in^}');
102123
await computeSuggestions();

pkg/analysis_server/test/services/correction/assist_test.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3258,7 +3258,7 @@ class FakeFlutter {
32583258
}
32593259

32603260
test_flutterWrapCenter_OK_implicitNew() async {
3261-
_configurePreviewDart2();
3261+
configurePreviewDart2();
32623262
addFlutterPackage();
32633263
await resolveTestUnit('''
32643264
import 'package:flutter/widgets.dart';
@@ -3352,7 +3352,7 @@ class FakeFlutter {
33523352
}
33533353

33543354
test_flutterWrapColumn_OK_implicitNew() async {
3355-
_configurePreviewDart2();
3355+
configurePreviewDart2();
33563356
addFlutterPackage();
33573357
await resolveTestUnit('''
33583358
import 'package:flutter/widgets.dart';
@@ -5330,12 +5330,6 @@ main() {
53305330
return await processor.compute();
53315331
}
53325332

5333-
void _configurePreviewDart2() {
5334-
driver.configure(
5335-
analysisOptions: new AnalysisOptionsImpl.from(driver.analysisOptions)
5336-
..previewDart2 = true);
5337-
}
5338-
53395333
List<Position> _findResultPositions(List<String> searchStrings) {
53405334
List<Position> positions = <Position>[];
53415335
for (String search in searchStrings) {

pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,16 @@ class OpType {
125125
target.containingNode.getAncestor((p) => p is MethodDeclaration);
126126
optype.inStaticMethodBody =
127127
mthDecl is MethodDeclaration && mthDecl.isStatic;
128+
129+
// If a value should be suggested, suggest also constructors.
130+
if (optype.includeReturnValueSuggestions) {
131+
CompilationUnitElement unitElement = target.unit.element;
132+
if (unitElement != null &&
133+
unitElement.context.analysisOptions.previewDart2) {
134+
optype.includeConstructorSuggestions = true;
135+
}
136+
}
137+
128138
return optype;
129139
}
130140

0 commit comments

Comments
 (0)