Suggest constructors for implicit creation in previewDart2.

R=brianwilkerson@google.com

Bug: https://github.com/flutter/flutter-intellij/issues/998
Change-Id: I43270f47fb43402d1a9e0f7d9814494ffd83bb5e
Reviewed-on: https://dart-review.googlesource.com/43080
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2018-02-22 18:03:12 +00:00 committed by commit-bot@chromium.org
parent d0be238ca3
commit 0ce1a92d98
8 changed files with 84 additions and 18 deletions

View file

@ -67,6 +67,13 @@ class _SuggestionBuilder extends GeneralizingElementVisitor {
// ignored
}
@override
visitConstructorElement(ConstructorElement element) {
if (element.context.analysisOptions.previewDart2) {
_addSuggestion(element);
}
}
@override
visitFieldElement(FieldElement element) {
if (element.isStatic) {

View file

@ -89,6 +89,12 @@ class Required {
return source;
}
void configurePreviewDart2() {
driver.configure(
analysisOptions: new AnalysisOptionsImpl.from(driver.analysisOptions)
..previewDart2 = true);
}
void processRequiredPlugins() {
AnalysisEngine.instance.processRequiredPlugins();
}

View file

@ -781,21 +781,17 @@ main() {
<String>["1+fooConst", "1-fooNotConst", "1-bar"],
failingTests: '1');
buildTests(
'testCompletion_annotation_type',
'''
buildTests('testCompletion_annotation_type', '''
class AAA {
const AAA({int a, int b});
const AAA.nnn(int c, int d);
}
@AAA!1
main() {
}''',
<String>[
"1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
"1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
],
failingTests: '1');
}''', <String>[
"1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
"1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
]);
buildTests('testCompletion_annotation_type_inClass_withoutMember', '''
class AAA {

View file

@ -198,6 +198,7 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
CompletionSuggestion assertSuggestConstructor(String name,
{int relevance: DART_RELEVANCE_DEFAULT,
String importUri,
String elementName,
int elemOffset,
String defaultArgListString: _UNCHECKED,
List<int> defaultArgumentListTextRanges}) {
@ -211,7 +212,8 @@ abstract class DartCompletionContributorTest extends AbstractContextTest {
expect(element, isNotNull);
expect(element.kind, equals(ElementKind.CONSTRUCTOR));
int index = name.indexOf('.');
expect(element.name, index >= 0 ? name.substring(index + 1) : '');
elementName ??= index >= 0 ? name.substring(index + 1) : '';
expect(element.name, elementName);
return cs;
}

View file

@ -2381,6 +2381,36 @@ class B extends A {
assertNotSuggested('int');
}
test_implicitCreation() async {
configurePreviewDart2();
addSource('/a.dart', '''
class A {
A.a1();
A.a2();
}
class B {
B.b1();
B.b2();
}
''');
addTestSource('''
import 'a.dart';
main() {
^;
}
''');
await computeSuggestions();
assertSuggestClass('A');
assertSuggestConstructor('A.a1');
assertSuggestConstructor('A.a2');
assertSuggestClass('B');
assertSuggestConstructor('B.b1');
assertSuggestConstructor('B.b2');
}
test_ImportDirective_dart() async {
// SimpleStringLiteral ImportDirective
addTestSource('''

View file

@ -97,6 +97,27 @@ class StaticMemberContributorTest extends DartCompletionContributorTest {
assertSuggestField('values', 'List<E>', isDeprecated: true);
}
test_implicitCreation() async {
configurePreviewDart2();
addSource('/a.dart', '''
class A {
A.foo();
A.bar();
}
''');
addTestSource('''
import 'a.dart';
main() {
A.^;
}
''');
await computeSuggestions();
assertSuggestConstructor('foo', elementName: 'foo');
assertSuggestConstructor('bar', elementName: 'bar');
}
test_keyword() async {
addTestSource('class C { static C get instance => null; } main() {C.in^}');
await computeSuggestions();

View file

@ -3258,7 +3258,7 @@ class FakeFlutter {
}
test_flutterWrapCenter_OK_implicitNew() async {
_configurePreviewDart2();
configurePreviewDart2();
addFlutterPackage();
await resolveTestUnit('''
import 'package:flutter/widgets.dart';
@ -3352,7 +3352,7 @@ class FakeFlutter {
}
test_flutterWrapColumn_OK_implicitNew() async {
_configurePreviewDart2();
configurePreviewDart2();
addFlutterPackage();
await resolveTestUnit('''
import 'package:flutter/widgets.dart';
@ -5330,12 +5330,6 @@ main() {
return await processor.compute();
}
void _configurePreviewDart2() {
driver.configure(
analysisOptions: new AnalysisOptionsImpl.from(driver.analysisOptions)
..previewDart2 = true);
}
List<Position> _findResultPositions(List<String> searchStrings) {
List<Position> positions = <Position>[];
for (String search in searchStrings) {

View file

@ -125,6 +125,16 @@ class OpType {
target.containingNode.getAncestor((p) => p is MethodDeclaration);
optype.inStaticMethodBody =
mthDecl is MethodDeclaration && mthDecl.isStatic;
// If a value should be suggested, suggest also constructors.
if (optype.includeReturnValueSuggestions) {
CompilationUnitElement unitElement = target.unit.element;
if (unitElement != null &&
unitElement.context.analysisOptions.previewDart2) {
optype.includeConstructorSuggestions = true;
}
}
return optype;
}