mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 19:21:30 +00:00
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:
parent
d0be238ca3
commit
0ce1a92d98
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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('''
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue