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

Side by Side Diff: pkg/analyzer/lib/src/plugin/engine_plugin.dart

Issue 1311773005: Extension point for WorkManagerFactory(s). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Move classes as by review comments. Created 5 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.src.plugin.engine_plugin; 5 library analyzer.src.plugin.engine_plugin;
6 6
7 import 'package:analyzer/plugin/task.dart'; 7 import 'package:analyzer/plugin/task.dart';
8 import 'package:analyzer/src/generated/engine.dart'
9 show InternalAnalysisContext;
8 import 'package:analyzer/src/task/dart.dart'; 10 import 'package:analyzer/src/task/dart.dart';
11 import 'package:analyzer/src/task/dart_work_manager.dart';
9 import 'package:analyzer/src/task/general.dart'; 12 import 'package:analyzer/src/task/general.dart';
10 import 'package:analyzer/src/task/html.dart'; 13 import 'package:analyzer/src/task/html.dart';
14 import 'package:analyzer/src/task/html_work_manager.dart';
11 import 'package:analyzer/task/model.dart'; 15 import 'package:analyzer/task/model.dart';
12 import 'package:plugin/plugin.dart'; 16 import 'package:plugin/plugin.dart';
13 17
14 /** 18 /**
15 * A plugin that defines the extension points and extensions that are inherently 19 * A plugin that defines the extension points and extensions that are inherently
16 * defined by the analysis engine. 20 * defined by the analysis engine.
17 */ 21 */
18 class EnginePlugin implements Plugin { 22 class EnginePlugin implements Plugin {
19 /** 23 /**
20 * The simple identifier of the extension point that allows plugins to 24 * The simple identifier of the extension point that allows plugins to
21 * register new analysis tasks with the analysis engine. 25 * register new analysis tasks with the analysis engine.
22 */ 26 */
23 static const String TASK_EXTENSION_POINT = 'task'; 27 static const String TASK_EXTENSION_POINT = 'task';
24 28
25 /** 29 /**
30 * The simple identifier of the extension point that allows plugins to
31 * register new work manager factories with the analysis engine.
32 */
33 static const String WORK_MANAGER_FACTORY_EXTENSION_POINT =
34 'workManagerFactory';
35
36 /**
26 * The unique identifier of this plugin. 37 * The unique identifier of this plugin.
27 */ 38 */
28 static const String UNIQUE_IDENTIFIER = 'analysis_engine.core'; 39 static const String UNIQUE_IDENTIFIER = 'analysis_engine.core';
29 40
30 /** 41 /**
31 * The extension point that allows plugins to register new analysis tasks with 42 * The extension point that allows plugins to register new analysis tasks with
32 * the analysis engine. 43 * the analysis engine.
33 */ 44 */
34 ExtensionPoint taskExtensionPoint; 45 ExtensionPoint taskExtensionPoint;
35 46
36 /** 47 /**
48 * The extension point that allows plugins to register new work manager
49 * factories with the analysis engine.
50 */
51 ExtensionPoint workManagerFactoryExtensionPoint;
52
53 /**
37 * Initialize a newly created plugin. 54 * Initialize a newly created plugin.
38 */ 55 */
39 EnginePlugin(); 56 EnginePlugin();
40 57
41 /** 58 /**
42 * Return a list containing all of the task descriptors that were contributed. 59 * Return a list containing all of the task descriptors that were contributed.
43 */ 60 */
44 List<TaskDescriptor> get taskDescriptors => taskExtensionPoint.extensions; 61 List<TaskDescriptor> get taskDescriptors => taskExtensionPoint.extensions;
45 62
46 @override 63 @override
47 String get uniqueIdentifier => UNIQUE_IDENTIFIER; 64 String get uniqueIdentifier => UNIQUE_IDENTIFIER;
48 65
66 /**
67 * Return a list containing all of the work manager factories that were
68 * contributed.
69 */
70 List<WorkManagerFactory> get workManagerFactories =>
71 workManagerFactoryExtensionPoint.extensions;
72
49 @override 73 @override
50 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { 74 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
51 taskExtensionPoint = 75 taskExtensionPoint =
52 registerExtensionPoint(TASK_EXTENSION_POINT, _validateTaskExtension); 76 registerExtensionPoint(TASK_EXTENSION_POINT, _validateTaskExtension);
77 workManagerFactoryExtensionPoint = registerExtensionPoint(
78 WORK_MANAGER_FACTORY_EXTENSION_POINT,
79 _validateWorkManagerFactoryExtension);
53 } 80 }
54 81
55 @override 82 @override
56 void registerExtensions(RegisterExtension registerExtension) { 83 void registerExtensions(RegisterExtension registerExtension) {
84 _registerTaskExtensions(registerExtension);
85 _registerWorkManagerFactoryExtensions(registerExtension);
86 }
87
88 void _registerTaskExtensions(RegisterExtension registerExtension) {
57 String taskId = TASK_EXTENSION_POINT_ID; 89 String taskId = TASK_EXTENSION_POINT_ID;
58 // 90 //
59 // Register general tasks. 91 // Register general tasks.
60 // 92 //
61 registerExtension(taskId, GetContentTask.DESCRIPTOR); 93 registerExtension(taskId, GetContentTask.DESCRIPTOR);
62 // 94 //
63 // Register Dart tasks. 95 // Register Dart tasks.
64 // 96 //
65 registerExtension(taskId, BuildCompilationUnitElementTask.DESCRIPTOR); 97 registerExtension(taskId, BuildCompilationUnitElementTask.DESCRIPTOR);
66 registerExtension(taskId, BuildDirectiveElementsTask.DESCRIPTOR); 98 registerExtension(taskId, BuildDirectiveElementsTask.DESCRIPTOR);
(...skipping 23 matching lines...) Expand all
90 registerExtension(taskId, ScanDartTask.DESCRIPTOR); 122 registerExtension(taskId, ScanDartTask.DESCRIPTOR);
91 registerExtension(taskId, VerifyUnitTask.DESCRIPTOR); 123 registerExtension(taskId, VerifyUnitTask.DESCRIPTOR);
92 // 124 //
93 // Register HTML tasks. 125 // Register HTML tasks.
94 // 126 //
95 registerExtension(taskId, DartScriptsTask.DESCRIPTOR); 127 registerExtension(taskId, DartScriptsTask.DESCRIPTOR);
96 registerExtension(taskId, HtmlErrorsTask.DESCRIPTOR); 128 registerExtension(taskId, HtmlErrorsTask.DESCRIPTOR);
97 registerExtension(taskId, ParseHtmlTask.DESCRIPTOR); 129 registerExtension(taskId, ParseHtmlTask.DESCRIPTOR);
98 } 130 }
99 131
132 void _registerWorkManagerFactoryExtensions(
133 RegisterExtension registerExtension) {
134 String taskId = WORK_MANAGER_EXTENSION_POINT_ID;
135 registerExtension(taskId,
136 (InternalAnalysisContext context) => new DartWorkManager(context));
137 registerExtension(taskId,
138 (InternalAnalysisContext context) => new HtmlWorkManager(context));
139 }
140
100 /** 141 /**
101 * Validate the given extension by throwing an [ExtensionError] if it is not a 142 * Validate the given extension by throwing an [ExtensionError] if it is not a
102 * valid domain. 143 * valid domain.
103 */ 144 */
104 void _validateTaskExtension(Object extension) { 145 void _validateTaskExtension(Object extension) {
105 if (extension is! TaskDescriptor) { 146 if (extension is! TaskDescriptor) {
106 String id = taskExtensionPoint.uniqueIdentifier; 147 String id = taskExtensionPoint.uniqueIdentifier;
107 throw new ExtensionError('Extensions to $id must be a TaskDescriptor'); 148 throw new ExtensionError('Extensions to $id must be a TaskDescriptor');
108 } 149 }
109 } 150 }
151
152 /**
153 * Validate the given extension by throwing an [ExtensionError] if it is not a
154 * valid domain.
155 */
156 void _validateWorkManagerFactoryExtension(Object extension) {
157 if (extension is! WorkManagerFactory) {
158 String id = taskExtensionPoint.uniqueIdentifier;
159 throw new ExtensionError(
160 'Extensions to $id must be a WorkManagerFactory');
161 }
162 }
110 } 163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698