| // Copyright (c) 2015, 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 analysis_server.src.provisional.completion.dart.plugin; |
| |
| import 'package:analysis_server/src/provisional/completion/completion.dart'; |
| import 'package:analysis_server/src/provisional/completion/dart/completion.dart'; |
| import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart'; |
| import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'; |
| import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/imported_reference_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/inherited_reference_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/keyword_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/label_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/library_member_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/library_prefix_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/local_constructor_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/local_reference_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/named_constructor_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/static_member_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/type_member_contributor.dart'; |
| import 'package:analysis_server/src/services/completion/dart/uri_contributor.dart'; |
| import 'package:plugin/plugin.dart'; |
| |
| /** |
| * The shared dart completion plugin instance. |
| */ |
| final DartCompletionPlugin dartCompletionPlugin = new DartCompletionPlugin(); |
| |
| class DartCompletionPlugin implements Plugin { |
| /** |
| * The simple identifier of the extension point that allows plugins to |
| * register Dart specific completion contributor factories. |
| * Use [DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID] |
| * when registering contributors. |
| */ |
| static const String CONTRIBUTOR_EXTENSION_POINT = 'contributor'; |
| |
| /** |
| * The unique identifier of this plugin. |
| */ |
| static const String UNIQUE_IDENTIFIER = 'dart.completion'; |
| |
| /** |
| * The extension point that allows plugins to register Dart specific |
| * completion contributor factories. |
| */ |
| ExtensionPoint _contributorExtensionPoint; |
| |
| @override |
| String get uniqueIdentifier => UNIQUE_IDENTIFIER; |
| |
| /** |
| * Return a list containing all of the Dart specific completion contributors. |
| */ |
| Iterable<DartCompletionContributorFactory> get contributors => |
| _contributorExtensionPoint.extensions |
| .map((DartCompletionContributorFactory factory) => factory()); |
| |
| @override |
| void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { |
| _contributorExtensionPoint = registerExtensionPoint( |
| CONTRIBUTOR_EXTENSION_POINT, |
| _validateDartCompletionContributorExtension); |
| } |
| |
| @override |
| void registerExtensions(RegisterExtension registerExtension) { |
| // |
| // Register DartCompletionManager as a CompletionContributor |
| // which delegates to all the DartCompletionContributors |
| // |
| registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new DartCompletionManager()); |
| // |
| // Register the default DartCompletionContributors |
| // |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new ArgListContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new CombinatorContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new FieldFormalContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new ImportedReferenceContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new InheritedReferenceContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new KeywordContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new LabelContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new LibraryMemberContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new LibraryPrefixContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new LocalConstructorContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new LocalLibraryContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new LocalReferenceContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new NamedConstructorContributor()); |
| // Revisit this contributor and these tests |
| // once DartChangeBuilder API has solidified. |
| // registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| // () => new OverrideContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new StaticMemberContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new TypeMemberContributor()); |
| registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, |
| () => new UriContributor()); |
| } |
| |
| /** |
| * Validate the given extension by throwing an [ExtensionError] if it is not a |
| * valid Dart specific completion contributor. |
| */ |
| void _validateDartCompletionContributorExtension(Object extension) { |
| if (extension is! DartCompletionContributorFactory) { |
| String id = _contributorExtensionPoint.uniqueIdentifier; |
| throw new ExtensionError( |
| 'Extensions to $id must be a DartCompletionContributorFactory'); |
| } |
| } |
| } |