Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: pkg/analysis_server/lib/src/services/completion/local_computer.dart

Issue 657593002: include locally inherited members in suggestions (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/completion/completion_test_util.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/services/completion/local_computer.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/local_computer.dart b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
index 2805cacd7c0e5662d16936917036afbcbbaefa65..8269f9dd3ba482a174534c287f0a78e0ed7819ea 100644
--- a/pkg/analysis_server/lib/src/services/completion/local_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/local_computer.dart
@@ -103,6 +103,66 @@ class _LocalVisitor extends GeneralizingAstVisitor<dynamic> {
@override
visitClassDeclaration(ClassDeclaration node) {
+ _addClassDeclarationMembers(node);
+ _addInheritedTypeMembers(node);
+ visitNode(node);
+ }
+
+ void _addInheritedTypeMembers(ClassDeclaration node) {
+ ExtendsClause extendsClause = node.extendsClause;
+ if (extendsClause != null) {
+ _addLocalTypeMembers(extendsClause.superclass, node);
+ }
+ ImplementsClause implementsClause = node.implementsClause;
+ if (implementsClause != null) {
+ NodeList<TypeName> interfaces = implementsClause.interfaces;
+ if (interfaces != null) {
+ interfaces.forEach((TypeName type) {
+ _addLocalTypeMembers(type, node);
+ });
+ }
+ }
+ WithClause withClause = node.withClause;
+ if (withClause != null) {
+ NodeList<TypeName> mixinTypes = withClause.mixinTypes;
+ if (mixinTypes != null) {
+ mixinTypes.forEach((TypeName type) {
+ _addLocalTypeMembers(type, node);
+ });
+ }
+ }
+ }
+
+ void _addLocalTypeMembers(TypeName type, ClassDeclaration node) {
+ if (type == null) {
+ return;
+ }
+ Identifier typeId = type.name;
+ if (typeId == null) {
+ return;
+ }
+ String typeName = typeId.name;
+ if (typeName == null || typeName.length == 0) {
+ return;
+ }
+ CompilationUnit unit = node.getAncestor((p) => p is CompilationUnit);
+ if (unit == null) {
+ return;
+ }
+ unit.declarations.forEach((CompilationUnitMember m) {
+ if (m is ClassDeclaration) {
+ SimpleIdentifier id = m.name;
+ if (id != null) {
+ if (id.name == typeName) {
+ _addClassDeclarationMembers(m);
+ _addInheritedTypeMembers(m);
+ }
+ }
+ }
+ });
+ }
+
+ void _addClassDeclarationMembers(ClassDeclaration node) {
node.members.forEach((ClassMember classMbr) {
if (classMbr is FieldDeclaration) {
_addFieldSuggestions(node, classMbr);
@@ -110,7 +170,6 @@ class _LocalVisitor extends GeneralizingAstVisitor<dynamic> {
_addMethodSuggestion(node, classMbr);
}
});
- visitNode(node);
}
@override
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/completion/completion_test_util.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698