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

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

Issue 1068483002: rename completion source files to match content (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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
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
deleted file mode 100644
index f547a746f8dd6dd0919eb31d49e664b9349d7ac0..0000000000000000000000000000000000000000
--- a/pkg/analysis_server/lib/src/services/completion/local_computer.dart
+++ /dev/null
@@ -1,700 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library services.completion.contributor.dart.local;
-
-import 'dart:async';
-
-import 'package:analysis_server/src/protocol.dart' as protocol
- show Element, ElementKind;
-import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
-import 'package:analysis_server/src/services/completion/local_declaration_visitor.dart';
-import 'package:analysis_server/src/services/completion/optype.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/scanner.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
-
-const _DYNAMIC = 'dynamic';
-
-final TypeName _NO_RETURN_TYPE = new TypeName(
- new SimpleIdentifier(new StringToken(TokenType.IDENTIFIER, '', 0)), null);
-
-/**
- * Create a new protocol Element for inclusion in a completion suggestion.
- */
-protocol.Element _createElement(protocol.ElementKind kind, SimpleIdentifier id,
- {String parameters, TypeName returnType, bool isAbstract: false,
- bool isDeprecated: false}) {
- String name = id != null ? id.name : '';
- int flags = protocol.Element.makeFlags(
- isAbstract: isAbstract,
- isDeprecated: isDeprecated,
- isPrivate: Identifier.isPrivateName(name));
- return new protocol.Element(kind, name, flags,
- parameters: parameters, returnType: _nameForType(returnType));
-}
-
-/**
- * Return `true` if the @deprecated annotation is present
- */
-bool _isDeprecated(AnnotatedNode node) {
- if (node != null) {
- NodeList<Annotation> metadata = node.metadata;
- if (metadata != null) {
- return metadata.any((Annotation a) {
- return a.name is SimpleIdentifier && a.name.name == 'deprecated';
- });
- }
- }
- return false;
-}
-
-/**
- * Return the name for the given type.
- */
-String _nameForType(TypeName type) {
- if (type == _NO_RETURN_TYPE) {
- return null;
- }
- if (type == null) {
- return _DYNAMIC;
- }
- Identifier id = type.name;
- if (id == null) {
- return _DYNAMIC;
- }
- String name = id.name;
- if (name == null || name.length <= 0) {
- return _DYNAMIC;
- }
- TypeArgumentList typeArgs = type.typeArguments;
- if (typeArgs != null) {
- //TODO (danrubel) include type arguments
- }
- return name;
-}
-
-/**
- * A contributor for calculating `completion.getSuggestions` request results
- * for the local library in which the completion is requested.
- */
-class LocalReferenceContributor extends DartCompletionContributor {
- @override
- bool computeFast(DartCompletionRequest request) {
- OpType optype = request.optype;
-
- // Collect suggestions from the specific child [AstNode] that contains
- // the completion offset and all of its parents recursively.
- if (optype.includeReturnValueSuggestions ||
- optype.includeTypeNameSuggestions ||
- optype.includeVoidReturnSuggestions) {
- _LocalVisitor localVisitor =
- new _LocalVisitor(request, request.offset, optype);
- localVisitor.visit(request.target.containingNode);
- }
- if (optype.includeStatementLabelSuggestions ||
- optype.includeCaseLabelSuggestions) {
- _LabelVisitor labelVisitor = new _LabelVisitor(request,
- optype.includeStatementLabelSuggestions,
- optype.includeCaseLabelSuggestions);
- labelVisitor.visit(request.target.containingNode);
- }
- if (optype.includeConstructorSuggestions) {
- new _ConstructorVisitor(request).visit(request.target.containingNode);
- }
-
- // If target is an argument in an argument list
- // then suggestions may need to be adjusted
- return request.target.argIndex == null;
- }
-
- @override
- Future<bool> computeFull(DartCompletionRequest request) {
- _updateSuggestions(request);
- return new Future.value(false);
- }
-
- /**
- * If target is a function argument, suggest identifiers not invocations
- */
- void _updateSuggestions(DartCompletionRequest request) {
- if (request.target.isFunctionalArgument()) {
- request.convertInvocationsToIdentifiers();
- }
- }
-}
-
-/**
- * A visitor for collecting constructor suggestions.
- */
-class _ConstructorVisitor extends LocalDeclarationVisitor {
- final DartCompletionRequest request;
-
- _ConstructorVisitor(DartCompletionRequest request)
- : super(request.offset),
- request = request;
-
- @override
- void declaredClass(ClassDeclaration declaration) {
- bool found = false;
- for (ClassMember member in declaration.members) {
- if (member is ConstructorDeclaration) {
- found = true;
- _addSuggestion(declaration, member);
- }
- }
- if (!found) {
- _addSuggestion(declaration, null);
- }
- }
-
- @override
- void declaredClassTypeAlias(ClassTypeAlias declaration) {
- // TODO: implement declaredClassTypeAlias
- }
-
- @override
- void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
- // TODO: implement declaredField
- }
-
- @override
- void declaredFunction(FunctionDeclaration declaration) {
- // TODO: implement declaredFunction
- }
-
- @override
- void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
- // TODO: implement declaredFunctionTypeAlias
- }
-
- @override
- void declaredLabel(Label label, bool isCaseLabel) {
- // TODO: implement declaredLabel
- }
-
- @override
- void declaredLocalVar(SimpleIdentifier name, TypeName type) {
- // TODO: implement declaredLocalVar
- }
-
- @override
- void declaredMethod(MethodDeclaration declaration) {
- // TODO: implement declaredMethod
- }
-
- @override
- void declaredParam(SimpleIdentifier name, TypeName type) {
- // TODO: implement declaredParam
- }
-
- @override
- void declaredTopLevelVar(
- VariableDeclarationList varList, VariableDeclaration varDecl) {
- // TODO: implement declaredTopLevelVar
- }
-
- /**
- * For the given class and constructor,
- * add a suggestion of the form B(...) or B.name(...).
- * If the given constructor is `null`
- * then add a default constructor suggestion.
- */
- CompletionSuggestion _addSuggestion(
- ClassDeclaration classDecl, ConstructorDeclaration constructorDecl) {
- SimpleIdentifier elemId;
- String completion = classDecl.name.name;
- if (constructorDecl != null) {
- elemId = constructorDecl.name;
- if (elemId != null) {
- String name = elemId.name;
- if (name != null && name.length > 0) {
- completion = '$completion.$name';
- }
- }
- }
- bool isDeprecated =
- constructorDecl != null && _isDeprecated(constructorDecl);
- List<String> parameterNames = new List<String>();
- List<String> parameterTypes = new List<String>();
- int requiredParameterCount = 0;
- bool hasNamedParameters = false;
- StringBuffer paramBuf = new StringBuffer();
- paramBuf.write('(');
- int paramCount = 0;
- if (constructorDecl != null) {
- for (FormalParameter param in constructorDecl.parameters.parameters) {
- if (paramCount > 0) {
- paramBuf.write(', ');
- }
- String paramName;
- String typeName;
- if (param is NormalFormalParameter) {
- paramName = param.identifier.name;
- typeName = _nameForParamType(param);
- ++requiredParameterCount;
- } else if (param is DefaultFormalParameter) {
- NormalFormalParameter childParam = param.parameter;
- paramName = childParam.identifier.name;
- typeName = _nameForParamType(childParam);
- if (param.kind == ParameterKind.NAMED) {
- hasNamedParameters = true;
- }
- if (paramCount == requiredParameterCount) {
- paramBuf.write(hasNamedParameters ? '{' : '[');
- }
- }
- parameterNames.add(paramName);
- parameterTypes.add(typeName);
- paramBuf.write(typeName);
- paramBuf.write(' ');
- paramBuf.write(paramName);
- ++paramCount;
- }
- }
- if (paramCount > requiredParameterCount) {
- paramBuf.write(hasNamedParameters ? '}' : ']');
- }
- paramBuf.write(')');
- protocol.Element element = _createElement(
- protocol.ElementKind.CONSTRUCTOR, elemId,
- parameters: paramBuf.toString());
- element.returnType = classDecl.name.name;
- CompletionSuggestion suggestion = new CompletionSuggestion(
- CompletionSuggestionKind.INVOCATION,
- isDeprecated ? DART_RELEVANCE_LOW : DART_RELEVANCE_DEFAULT, completion,
- completion.length, 0, isDeprecated, false,
- declaringType: classDecl.name.name,
- element: element,
- parameterNames: parameterNames,
- parameterTypes: parameterTypes,
- requiredParameterCount: requiredParameterCount,
- hasNamedParameters: hasNamedParameters);
- request.addSuggestion(suggestion);
- return suggestion;
- }
-
- /**
- * Determine the name of the type for the given constructor parameter.
- */
- String _nameForParamType(NormalFormalParameter param) {
- if (param is SimpleFormalParameter) {
- return _nameForType(param.type);
- }
- SimpleIdentifier id = param.identifier;
- if (param is FieldFormalParameter && id != null) {
- String fieldName = id.name;
- AstNode classDecl = param.getAncestor((p) => p is ClassDeclaration);
- if (classDecl is ClassDeclaration) {
- for (ClassMember member in classDecl.members) {
- if (member is FieldDeclaration) {
- for (VariableDeclaration field in member.fields.variables) {
- if (field.name.name == fieldName) {
- return _nameForType(member.fields.type);
- }
- }
- }
- }
- }
- }
- return _DYNAMIC;
- }
-}
-
-/**
- * A visitor for collecting suggestions for break and continue labels.
- */
-class _LabelVisitor extends LocalDeclarationVisitor {
- final DartCompletionRequest request;
-
- /**
- * True if statement labels should be included as suggestions.
- */
- final bool includeStatementLabels;
-
- /**
- * True if case labels should be included as suggestions.
- */
- final bool includeCaseLabels;
-
- _LabelVisitor(DartCompletionRequest request, this.includeStatementLabels,
- this.includeCaseLabels)
- : super(request.offset),
- request = request;
-
- @override
- void declaredClass(ClassDeclaration declaration) {
- // ignored
- }
-
- @override
- void declaredClassTypeAlias(ClassTypeAlias declaration) {
- // ignored
- }
-
- @override
- void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
- // ignored
- }
-
- @override
- void declaredFunction(FunctionDeclaration declaration) {
- // ignored
- }
-
- @override
- void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
- // ignored
- }
-
- @override
- void declaredLabel(Label label, bool isCaseLabel) {
- if (isCaseLabel ? includeCaseLabels : includeStatementLabels) {
- CompletionSuggestion suggestion = _addSuggestion(label.label);
- if (suggestion != null) {
- suggestion.element =
- _createElement(protocol.ElementKind.LABEL, label.label);
- }
- }
- }
-
- @override
- void declaredLocalVar(SimpleIdentifier name, TypeName type) {
- // ignored
- }
-
- @override
- void declaredMethod(MethodDeclaration declaration) {
- // ignored
- }
-
- @override
- void declaredParam(SimpleIdentifier name, TypeName type) {
- // ignored
- }
-
- @override
- void declaredTopLevelVar(
- VariableDeclarationList varList, VariableDeclaration varDecl) {
- // ignored
- }
-
- @override
- void visitFunctionExpression(FunctionExpression node) {
- // Labels are only accessible within the local function, so stop visiting
- // once we reach a function boundary.
- finished();
- }
-
- @override
- void visitMethodDeclaration(MethodDeclaration node) {
- // Labels are only accessible within the local function, so stop visiting
- // once we reach a function boundary.
- finished();
- }
-
- CompletionSuggestion _addSuggestion(SimpleIdentifier id) {
- if (id != null) {
- String completion = id.name;
- if (completion != null && completion.length > 0 && completion != '_') {
- CompletionSuggestion suggestion = new CompletionSuggestion(
- CompletionSuggestionKind.IDENTIFIER, DART_RELEVANCE_DEFAULT,
- completion, completion.length, 0, false, false);
- request.addSuggestion(suggestion);
- return suggestion;
- }
- }
- return null;
- }
-
- /**
- * Create a new protocol Element for inclusion in a completion suggestion.
- */
- protocol.Element _createElement(
- protocol.ElementKind kind, SimpleIdentifier id) {
- String name = id.name;
- int flags =
- protocol.Element.makeFlags(isPrivate: Identifier.isPrivateName(name));
- return new protocol.Element(kind, name, flags);
- }
-}
-
-/**
- * A visitor for collecting suggestions from the most specific child [AstNode]
- * that contains the completion offset to the [CompilationUnit].
- */
-class _LocalVisitor extends LocalDeclarationVisitor {
- final DartCompletionRequest request;
- final OpType optype;
-
- _LocalVisitor(this.request, int offset, this.optype) : super(offset);
-
- @override
- void declaredClass(ClassDeclaration declaration) {
- if (optype.includeTypeNameSuggestions) {
- bool isDeprecated = _isDeprecated(declaration);
- CompletionSuggestion suggestion = _addSuggestion(declaration.name,
- _NO_RETURN_TYPE, isDeprecated, DART_RELEVANCE_DEFAULT);
- if (suggestion != null) {
- suggestion.element = _createElement(
- protocol.ElementKind.CLASS, declaration.name,
- returnType: _NO_RETURN_TYPE,
- isAbstract: declaration.isAbstract,
- isDeprecated: isDeprecated);
- }
- }
- }
-
- @override
- void declaredClassTypeAlias(ClassTypeAlias declaration) {
- if (optype.includeTypeNameSuggestions) {
- bool isDeprecated = _isDeprecated(declaration);
- CompletionSuggestion suggestion = _addSuggestion(declaration.name,
- _NO_RETURN_TYPE, isDeprecated, DART_RELEVANCE_DEFAULT);
- if (suggestion != null) {
- suggestion.element = _createElement(
- protocol.ElementKind.CLASS_TYPE_ALIAS, declaration.name,
- returnType: _NO_RETURN_TYPE,
- isAbstract: true,
- isDeprecated: isDeprecated);
- }
- }
- }
-
- @override
- void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
- if (optype.includeReturnValueSuggestions) {
- bool isDeprecated = _isDeprecated(fieldDecl) || _isDeprecated(varDecl);
- TypeName type = fieldDecl.fields.type;
- CompletionSuggestion suggestion = _addSuggestion(
- varDecl.name, type, isDeprecated, DART_RELEVANCE_LOCAL_FIELD,
- classDecl: fieldDecl.parent);
- if (suggestion != null) {
- suggestion.element = _createElement(
- protocol.ElementKind.FIELD, varDecl.name,
- returnType: type, isDeprecated: isDeprecated);
- }
- }
- }
-
- @override
- void declaredFunction(FunctionDeclaration declaration) {
- if (optype.includeReturnValueSuggestions ||
- optype.includeVoidReturnSuggestions) {
- TypeName returnType = declaration.returnType;
- bool isDeprecated = _isDeprecated(declaration);
- protocol.ElementKind kind;
- int defaultRelevance = DART_RELEVANCE_DEFAULT;
- if (declaration.isGetter) {
- kind = protocol.ElementKind.GETTER;
- defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
- } else if (declaration.isSetter) {
- if (!optype.includeVoidReturnSuggestions) {
- return;
- }
- kind = protocol.ElementKind.SETTER;
- returnType = _NO_RETURN_TYPE;
- defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
- } else {
- if (!optype.includeVoidReturnSuggestions && _isVoid(returnType)) {
- return;
- }
- kind = protocol.ElementKind.FUNCTION;
- defaultRelevance = DART_RELEVANCE_LOCAL_FUNCTION;
- }
- CompletionSuggestion suggestion = _addSuggestion(
- declaration.name, returnType, isDeprecated, defaultRelevance);
- if (suggestion != null) {
- FormalParameterList param = declaration.functionExpression.parameters;
- suggestion.element = _createElement(kind, declaration.name,
- parameters: param != null ? param.toSource() : null,
- returnType: returnType,
- isDeprecated: isDeprecated);
- if (kind == protocol.ElementKind.FUNCTION) {
- _addParameterInfo(
- suggestion, declaration.functionExpression.parameters);
- }
- }
- }
- }
-
- @override
- void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
- if (optype.includeTypeNameSuggestions) {
- bool isDeprecated = _isDeprecated(declaration);
- TypeName returnType = declaration.returnType;
- CompletionSuggestion suggestion = _addSuggestion(
- declaration.name, returnType, isDeprecated, DART_RELEVANCE_DEFAULT);
- if (suggestion != null) {
- // TODO (danrubel) determine parameters and return type
- suggestion.element = _createElement(
- protocol.ElementKind.FUNCTION_TYPE_ALIAS, declaration.name,
- returnType: returnType,
- isAbstract: true,
- isDeprecated: isDeprecated);
- }
- }
- }
-
- @override
- void declaredLabel(Label label, bool isCaseLabel) {
- // ignored
- }
-
- @override
- void declaredLocalVar(SimpleIdentifier name, TypeName type) {
- if (optype.includeReturnValueSuggestions) {
- CompletionSuggestion suggestion =
- _addSuggestion(name, type, false, DART_RELEVANCE_LOCAL_VARIABLE);
- if (suggestion != null) {
- suggestion.element = _createElement(
- protocol.ElementKind.LOCAL_VARIABLE, name, returnType: type);
- }
- }
- }
-
- @override
- void declaredMethod(MethodDeclaration declaration) {
- if (optype.includeReturnValueSuggestions ||
- optype.includeVoidReturnSuggestions) {
- protocol.ElementKind kind;
- String parameters;
- TypeName returnType = declaration.returnType;
- int defaultRelevance = DART_RELEVANCE_DEFAULT;
- if (declaration.isGetter) {
- kind = protocol.ElementKind.GETTER;
- parameters = null;
- defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
- } else if (declaration.isSetter) {
- if (!optype.includeVoidReturnSuggestions) {
- return;
- }
- kind = protocol.ElementKind.SETTER;
- returnType = _NO_RETURN_TYPE;
- defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
- } else {
- if (!optype.includeVoidReturnSuggestions && _isVoid(returnType)) {
- return;
- }
- kind = protocol.ElementKind.METHOD;
- parameters = declaration.parameters.toSource();
- defaultRelevance = DART_RELEVANCE_LOCAL_METHOD;
- }
- bool isDeprecated = _isDeprecated(declaration);
- CompletionSuggestion suggestion = _addSuggestion(
- declaration.name, returnType, isDeprecated, defaultRelevance,
- classDecl: declaration.parent);
- if (suggestion != null) {
- suggestion.element = _createElement(kind, declaration.name,
- parameters: parameters,
- returnType: returnType,
- isAbstract: declaration.isAbstract,
- isDeprecated: isDeprecated);
- if (kind == protocol.ElementKind.METHOD) {
- _addParameterInfo(suggestion, declaration.parameters);
- }
- }
- }
- }
-
- @override
- void declaredParam(SimpleIdentifier name, TypeName type) {
- if (optype.includeReturnValueSuggestions) {
- CompletionSuggestion suggestion =
- _addSuggestion(name, type, false, DART_RELEVANCE_PARAMETER);
- if (suggestion != null) {
- suggestion.element = _createElement(
- protocol.ElementKind.PARAMETER, name, returnType: type);
- }
- }
- }
-
- @override
- void declaredTopLevelVar(
- VariableDeclarationList varList, VariableDeclaration varDecl) {
- if (optype.includeReturnValueSuggestions) {
- bool isDeprecated = _isDeprecated(varList) || _isDeprecated(varDecl);
- CompletionSuggestion suggestion = _addSuggestion(varDecl.name,
- varList.type, isDeprecated, DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
- if (suggestion != null) {
- suggestion.element = _createElement(
- protocol.ElementKind.TOP_LEVEL_VARIABLE, varDecl.name,
- returnType: varList.type, isDeprecated: isDeprecated);
- }
- }
- }
-
- void _addParameterInfo(
- CompletionSuggestion suggestion, FormalParameterList parameters) {
- var paramList = parameters.parameters;
- suggestion.parameterNames = paramList
- .map((FormalParameter param) => param.identifier.name)
- .toList();
- suggestion.parameterTypes = paramList.map((FormalParameter param) {
- TypeName type = null;
- if (param is DefaultFormalParameter) {
- NormalFormalParameter child = param.parameter;
- if (child is SimpleFormalParameter) {
- type = child.type;
- } else if (child is FieldFormalParameter) {
- type = child.type;
- }
- }
- if (param is SimpleFormalParameter) {
- type = param.type;
- } else if (param is FieldFormalParameter) {
- type = param.type;
- }
- if (type == null) {
- return 'dynamic';
- }
- Identifier typeId = type.name;
- if (typeId == null) {
- return 'dynamic';
- }
- return typeId.name;
- }).toList();
- suggestion.requiredParameterCount = paramList.where(
- (FormalParameter param) => param is! DefaultFormalParameter).length;
- suggestion.hasNamedParameters = paramList
- .any((FormalParameter param) => param.kind == ParameterKind.NAMED);
- }
-
- CompletionSuggestion _addSuggestion(SimpleIdentifier id, TypeName returnType,
- bool isDeprecated, int defaultRelevance, {ClassDeclaration classDecl}) {
- if (id != null) {
- String completion = id.name;
- if (completion != null && completion.length > 0 && completion != '_') {
- CompletionSuggestion suggestion = new CompletionSuggestion(
- CompletionSuggestionKind.INVOCATION,
- isDeprecated ? DART_RELEVANCE_LOW : defaultRelevance, completion,
- completion.length, 0, isDeprecated, false,
- returnType: _nameForType(returnType));
- if (classDecl != null) {
- SimpleIdentifier identifier = classDecl.name;
- if (identifier != null) {
- String name = identifier.name;
- if (name != null && name.length > 0) {
- suggestion.declaringType = name;
- }
- }
- }
- request.addSuggestion(suggestion);
- return suggestion;
- }
- }
- return null;
- }
-
- bool _isVoid(TypeName returnType) {
- if (returnType != null) {
- Identifier id = returnType.name;
- if (id != null && id.name == 'void') {
- return true;
- }
- }
- return false;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698