From c7745a1a0ddef52103ad686c417495807212cb6a Mon Sep 17 00:00:00 2001 From: pq Date: Thu, 16 Jan 2020 22:55:53 +0000 Subject: [PATCH] contribute local completions for mixin members Fixes: https://github.com/dart-lang/sdk/issues/39795 Change-Id: I1a186dd63e59463706d18dd484653c0bee70ba90 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132165 Reviewed-by: Brian Wilkerson Commit-Queue: Phil Quitslund --- .../local_reference_contributor_test.dart | 26 +++++++++++++++++++ .../visitors/local_declaration_visitor.dart | 16 ++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart index 28662d4b82191..2c151ae449bbe 100644 --- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart +++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart @@ -4050,6 +4050,32 @@ A T;'''); assertNotSuggested('x'); } + test_mixinDeclaration_method_access() async { + addTestSource(r''' +class A { } + +mixin X on A { + int _x() => 0; + int get x => ^ +} +'''); + await computeSuggestions(); + assertSuggestMethod('_x', 'X', 'int'); + } + + test_mixinDeclaration_property_access() async { + addTestSource(r''' +class A { } + +mixin X on A { + int _x; + int get x => ^ +} +'''); + await computeSuggestions(); + assertSuggestField('_x', 'int'); + } + test_new_instance() async { addTestSource('import "dart:math"; class A {x() {new Random().^}}'); await computeSuggestions(); diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart index 5bdf50e4fb35a..db7f5adfb0cf9 100644 --- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart +++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart @@ -97,7 +97,7 @@ abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor { @override void visitClassDeclaration(ClassDeclaration node) { - _visitClassDeclarationMembers(node); + _visitClassOrMixinMembers(node); visitNode(node); } @@ -146,13 +146,13 @@ abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor { } @override - visitConstructorDeclaration(ConstructorDeclaration node) { + void visitConstructorDeclaration(ConstructorDeclaration node) { _visitParamList(node.parameters); visitNode(node); } @override - visitForStatement(ForStatement node) { + void visitForStatement(ForStatement node) { var forLoopParts = node.forLoopParts; if (forLoopParts is ForEachPartsWithDeclaration) { DeclaredIdentifier loopVariable = forLoopParts.loopVariable; @@ -199,6 +199,12 @@ abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor { visitNode(node); } + @override + void visitMixinDeclaration(MixinDeclaration node) { + _visitClassOrMixinMembers(node); + visitNode(node); + } + @override void visitNode(AstNode node) { // Support the case of searching partial ASTs by aborting on nodes with no @@ -227,7 +233,7 @@ abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor { visitNode(node); } - void _visitClassDeclarationMembers(ClassDeclaration node) { + void _visitClassOrMixinMembers(ClassOrMixinDeclaration node) { for (ClassMember member in node.members) { if (member is FieldDeclaration) { member.fields.variables.forEach((VariableDeclaration varDecl) { @@ -263,7 +269,7 @@ abstract class LocalDeclarationVisitor extends GeneralizingAstVisitor { } } - _visitStatements(NodeList statements) { + void _visitStatements(NodeList statements) { for (Statement stmt in statements) { if (stmt.offset < offset) { if (stmt is VariableDeclarationStatement) {