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

Unified Diff: pkg/analysis_server/lib/src/domain_context.dart

Issue 137703010: Add server and request handlers (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 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/domain_context.dart
diff --git a/pkg/analysis_server/lib/src/domain_context.dart b/pkg/analysis_server/lib/src/domain_context.dart
new file mode 100644
index 0000000000000000000000000000000000000000..c9893ba5bcda91bd12592858f918fbe9d9fffe3d
--- /dev/null
+++ b/pkg/analysis_server/lib/src/domain_context.dart
@@ -0,0 +1,204 @@
+// 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 domain.context;
+
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+import 'analysis_server.dart';
+import 'protocol.dart';
+
+/**
+ * Instances of the class [ContextDomainHandler] implement a [RequestHandler]
+ * that handles requests in the server domain.
danrubel 2014/01/22 01:04:07 server domain -> context domain ?
Brian Wilkerson 2014/01/24 21:49:27 Done
+ */
+class ContextDomainHandler implements RequestHandler {
+ /**
+ * The name of the context.applyChanges request.
+ */
+ static const String APPLY_CHANGES_NAME = 'context.applyChanges';
+
+ /**
+ * The name of the context.setOptions request.
+ */
+ static const String SET_OPTIONS_NAME = 'context.setOptions';
+
+ /**
+ * The name of the context.setPrioritySources request.
+ */
+ static const String SET_PRIORITY_SOURCES_NAME = 'context.setPrioritySources';
+
+ /**
+ * The name of the changes parameter.
+ */
+ static const String CHANGES_PARAM = 'changes';
+
+ /**
+ * The name of the contextId parameter.
+ */
+ static const String CONTEXT_ID_PARAM = 'contextId';
+
+ /**
+ * The name of the options parameter.
+ */
+ static const String OPTIONS_PARAM = 'options';
+
+ /**
+ * The name of the sources parameter.
+ */
+ static const String SOURCES_PARAM = 'sources';
+
+ /**
+ * The name of the cacheSize option.
+ */
+ static const String CACHE_SIZE_OPTION = 'cacheSize';
+
+ /**
+ * The name of the generateHints option.
+ */
+ static const String GENERATE_HINTS_OPTION = 'generateHints';
+
+ /**
+ * The name of the generateDart2jsHints option.
+ */
+ static const String GENERATE_DART2JS_OPTION = 'generateDart2jsHints';
+
+ /**
+ * The name of the provideErrors option.
+ */
+ static const String PROVIDE_ERRORS_OPTION = 'provideErrors';
+
+ /**
+ * The name of the provideNavigation option.
+ */
+ static const String PROVIDE_NAVIGATION_OPTION = 'provideNavigation';
+
+ /**
+ * The name of the provideOutline option.
+ */
+ static const String PROVIDE_OUTLINE_OPTION = 'provideOutline';
+
+ /**
+ * The analysis server that is using this handler to process requests.
+ */
+ final AnalysisServer server;
+
+ /**
+ * Initialize a newly created handler to handle requests for the given [server].
+ */
+ ContextDomainHandler(this.server);
+
+ @override
+ Response handleRequest(Request request) {
+ try {
+ String requestName = request.method;
+ if (requestName == APPLY_CHANGES_NAME) {
+ applyChanges(request);
+ } else if (requestName == SET_OPTIONS_NAME) {
+ setOptions(request);
+ } else if (requestName == SET_PRIORITY_SOURCES_NAME) {
+ setPrioritySources(request);
+ }
+ } on RequestFailure catch (exception) {
+ return exception.response;
+ }
+ }
+
+ /**
+ * Inform the specified context that the changes encoded in the change set
+ * have been made. Any invalidated analysis results will be flushed from the
+ * context.
+ */
+ Response applyChanges(Request request) {
+ AnalysisContext context = getAnalysisContext(request);
+ Map<String, Object> changesData = request.getRequiredParameter(CHANGES_PARAM);
+ ChangeSet changeSet = createChangeSet(changesData);
+
+ context.applyChanges(changeSet);
+ }
+
+ /**
+ * Convert the given JSON object into a [ChangeSet].
+ */
+ ChangeSet createChangeSet(Map<String, Object> jsonData) {
+ // TODO(brianwilkerson) Implement this.
+ return null;
+ }
+
+ /**
+ * Set the options controlling analysis within a context to the given set of
+ * options.
+ */
+ Response setOptions(Request request) {
+ AnalysisContext context = getAnalysisContext(request);
+
+ context.analysisOptions = createAnalysisOptions(request);
+ }
+
+ /**
+ * Return the set of analysis options associated with the given [request], or
+ * throw a [RequestFailure] exception if the analysis options are not valid.
+ */
+ AnalysisOptions createAnalysisOptions(Request request) {
+ Map<String, Object> optionsData = request.getRequiredParameter(OPTIONS_PARAM);
+ AnalysisOptionsImpl options = new AnalysisOptionsImpl();
+ optionsData.forEach((String key, Object value) {
+ if (key == CACHE_SIZE_OPTION) {
+ options.cacheSize = request.toInt(value);
+ } else if (key == GENERATE_HINTS_OPTION) {
+ options.hint = request.toBool(value);
+ } else if (key == GENERATE_DART2JS_OPTION) {
+ options.dart2jsHint = request.toBool(value);
+ } else if (key == PROVIDE_ERRORS_OPTION) {
+// options.provideErrors = toBool(request, value);
+ } else if (key == PROVIDE_NAVIGATION_OPTION) {
+// options.provideNavigation = toBool(request, value);
+ } else if (key == PROVIDE_OUTLINE_OPTION) {
+// options.provideOutline = toBool(request, value);
+ } else {
+ throw new RequestFailure(new Response.unknownAnalysisOption(request, key));
+ }
+ });
+ return options;
+ }
+
+ /**
+ * Set the priority sources in the specified context to the sources in the
+ * given array.
+ */
+ Response setPrioritySources(Request request) {
+ AnalysisContext context = getAnalysisContext(request);
+ List<String> sourcesData = request.getRequiredParameter(SOURCES_PARAM);
+ List<Source> sources = convertToSources(context.sourceFactory, sourcesData);
+
+ context.analysisPriorityOrder = sources;
+ }
+
+ /**
+ * Convert the given list of strings into a list of sources owned by the given
+ * [sourceFactory].
+ */
+ List<Source> convertToSources(SourceFactory sourceFactory, List<String> sourcesData) {
+ List<Source> sources = new List<Source>();
+ sourcesData.forEach((String string) {
+ sources.add(sourceFactory.fromEncoding(string));
+ });
+ return sources;
+ }
+
+ /**
+ * Return the analysis context specified by the given request, or throw a
+ * [RequestFailure] exception if either there is no specified context or if
+ * the specified context does not exist.
+ */
+ AnalysisContext getAnalysisContext(Request request) {
+ String contextId = request.getRequiredParameter(CONTEXT_ID_PARAM);
+ AnalysisContext context = server.contextMap[contextId];
+ if (context == null) {
+ throw new RequestFailure(new Response.contextDoesNotExist(request));
+ }
+ return context;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698