| Index: pkg/analysis_server/test/integration/integration_test_methods.dart
|
| diff --git a/pkg/analysis_server/test/integration/integration_test_methods.dart b/pkg/analysis_server/test/integration/integration_test_methods.dart
|
| index 8ab5dcaf1dde08d2b544082740de8503788f498d..ee03c41cc61cd9c408d24d2ad6f3dc589086d73c 100644
|
| --- a/pkg/analysis_server/test/integration/integration_test_methods.dart
|
| +++ b/pkg/analysis_server/test/integration/integration_test_methods.dart
|
| @@ -13,74 +13,17 @@ library test.integration.methods;
|
|
|
| import 'dart:async';
|
|
|
| -import 'package:analysis_server/src/protocol.dart';
|
| +import 'package:analysis_server/plugin/protocol/protocol.dart';
|
| +import 'package:analysis_server/src/protocol/protocol_internal.dart';
|
| import 'package:unittest/unittest.dart';
|
|
|
| import 'integration_tests.dart';
|
| import 'protocol_matchers.dart';
|
|
|
| -
|
| /**
|
| * Convenience methods for running integration tests
|
| */
|
| abstract class IntegrationTestMixin {
|
| - Server get server;
|
| -
|
| - /**
|
| - * Return the version number of the analysis server.
|
| - *
|
| - * Returns
|
| - *
|
| - * version ( String )
|
| - *
|
| - * The version number of the analysis server.
|
| - */
|
| - Future<ServerGetVersionResult> sendServerGetVersion() {
|
| - return server.send("server.getVersion", null)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new ServerGetVersionResult.fromJson(decoder, 'result', result);
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Cleanly shutdown the analysis server. Requests that are received after
|
| - * this request will not be processed. Requests that were received before
|
| - * this request, but for which a response has not yet been sent, will not be
|
| - * responded to. No further responses or notifications will be sent after the
|
| - * response to this request has been sent.
|
| - */
|
| - Future sendServerShutdown() {
|
| - return server.send("server.shutdown", null)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Subscribe for services. All previous subscriptions are replaced by the
|
| - * given set of services.
|
| - *
|
| - * It is an error if any of the elements in the list are not valid services.
|
| - * If there is an error, then the current subscriptions will remain
|
| - * unchanged.
|
| - *
|
| - * Parameters
|
| - *
|
| - * subscriptions ( List<ServerService> )
|
| - *
|
| - * A list of the services being subscribed to.
|
| - */
|
| - Future sendServerSetSubscriptions(List<ServerService> subscriptions) {
|
| - var params = new ServerSetSubscriptionsParams(subscriptions).toJson();
|
| - return server.send("server.setSubscriptions", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| -
|
| /**
|
| * Reports that the server is running. This notification is issued once after
|
| * the server has started running but before any requests are processed to
|
| @@ -161,1003 +104,1012 @@ abstract class IntegrationTestMixin {
|
| StreamController<ServerStatusParams> _onServerStatus;
|
|
|
| /**
|
| - * Return the errors associated with the given file. If the errors for the
|
| - * given file have not yet been computed, or the most recently computed
|
| - * errors for the given file are out of date, then the response for this
|
| - * request will be delayed until they have been computed. If some or all of
|
| - * the errors for the file cannot be computed, then the subset of the errors
|
| - * that can be computed will be returned and the response will contain an
|
| - * error to indicate why the errors could not be computed. If the content of
|
| - * the file changes after this request was received but before a response
|
| - * could be sent, then an error of type CONTENT_MODIFIED will be generated.
|
| - *
|
| - * This request is intended to be used by clients that cannot asynchronously
|
| - * apply updated error information. Clients that can apply error information
|
| - * as it becomes available should use the information provided by the
|
| - * 'analysis.errors' notification.
|
| + * Reports the paths of the files that are being analyzed.
|
| *
|
| - * If a request is made for a file which does not exist, or which is not
|
| - * currently subject to analysis (e.g. because it is not associated with any
|
| - * analysis root specified to analysis.setAnalysisRoots), an error of type
|
| - * GET_ERRORS_INVALID_FILE will be generated.
|
| + * This notification is not subscribed to by default. Clients can subscribe
|
| + * by including the value "ANALYZED_FILES" in the list of services passed in
|
| + * an analysis.setGeneralSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| - * file ( FilePath )
|
| - *
|
| - * The file for which errors are being requested.
|
| - *
|
| - * Returns
|
| - *
|
| - * errors ( List<AnalysisError> )
|
| + * directories ( List<FilePath> )
|
| *
|
| - * The errors associated with the file.
|
| + * A list of the paths of the files that are being analyzed.
|
| */
|
| - Future<AnalysisGetErrorsResult> sendAnalysisGetErrors(String file) {
|
| - var params = new AnalysisGetErrorsParams(file).toJson();
|
| - return server.send("analysis.getErrors", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new AnalysisGetErrorsResult.fromJson(decoder, 'result', result);
|
| - });
|
| - }
|
| + Stream<AnalysisAnalyzedFilesParams> onAnalysisAnalyzedFiles;
|
|
|
| /**
|
| - * Return the hover information associate with the given location. If some or
|
| - * all of the hover information is not available at the time this request is
|
| - * processed the information will be omitted from the response.
|
| + * Stream controller for [onAnalysisAnalyzedFiles].
|
| + */
|
| + StreamController<AnalysisAnalyzedFilesParams> _onAnalysisAnalyzedFiles;
|
| +
|
| + /**
|
| + * Reports the errors associated with a given file. The set of errors
|
| + * included in the notification is always a complete list that supersedes any
|
| + * previously reported errors.
|
| + *
|
| + * It is only possible to unsubscribe from this notification by using the
|
| + * command-line flag --no-error-notification.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file in which hover information is being requested.
|
| + * The file containing the errors.
|
| *
|
| - * offset ( int )
|
| + * errors ( List<AnalysisError> )
|
| *
|
| - * The offset for which hover information is being requested.
|
| + * The errors contained in the file.
|
| + */
|
| + Stream<AnalysisErrorsParams> onAnalysisErrors;
|
| +
|
| + /**
|
| + * Stream controller for [onAnalysisErrors].
|
| + */
|
| + StreamController<AnalysisErrorsParams> _onAnalysisErrors;
|
| +
|
| + /**
|
| + * Reports that any analysis results that were previously associated with the
|
| + * given files should be considered to be invalid because those files are no
|
| + * longer being analyzed, either because the analysis root that contained it
|
| + * is no longer being analyzed or because the file no longer exists.
|
| *
|
| - * Returns
|
| + * If a file is included in this notification and at some later time a
|
| + * notification with results for the file is received, clients should assume
|
| + * that the file is once again being analyzed and the information should be
|
| + * processed.
|
| *
|
| - * hovers ( List<HoverInformation> )
|
| + * It is not possible to subscribe to or unsubscribe from this notification.
|
| *
|
| - * The hover information associated with the location. The list will be
|
| - * empty if no information could be determined for the location. The list
|
| - * can contain multiple items if the file is being analyzed in multiple
|
| - * contexts in conflicting ways (such as a part that is included in
|
| - * multiple libraries).
|
| + * Parameters
|
| + *
|
| + * files ( List<FilePath> )
|
| + *
|
| + * The files that are no longer being analyzed.
|
| */
|
| - Future<AnalysisGetHoverResult> sendAnalysisGetHover(String file, int offset) {
|
| - var params = new AnalysisGetHoverParams(file, offset).toJson();
|
| - return server.send("analysis.getHover", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new AnalysisGetHoverResult.fromJson(decoder, 'result', result);
|
| - });
|
| - }
|
| + Stream<AnalysisFlushResultsParams> onAnalysisFlushResults;
|
|
|
| /**
|
| - * Return library dependency information for use in client-side indexing and
|
| - * package URI resolution.
|
| + * Stream controller for [onAnalysisFlushResults].
|
| + */
|
| + StreamController<AnalysisFlushResultsParams> _onAnalysisFlushResults;
|
| +
|
| + /**
|
| + * Reports the folding regions associated with a given file. Folding regions
|
| + * can be nested, but will not be overlapping. Nesting occurs when a foldable
|
| + * element, such as a method, is nested inside another foldable element such
|
| + * as a class.
|
| *
|
| - * Clients that are only using the libraries field should consider using the
|
| - * analyzedFiles notification instead.
|
| + * This notification is not subscribed to by default. Clients can subscribe
|
| + * by including the value "FOLDING" in the list of services passed in an
|
| + * analysis.setSubscriptions request.
|
| *
|
| - * Returns
|
| + * Parameters
|
| *
|
| - * libraries ( List<FilePath> )
|
| + * file ( FilePath )
|
| *
|
| - * A list of the paths of library elements referenced by files in existing
|
| - * analysis roots.
|
| + * The file containing the folding regions.
|
| *
|
| - * packageMap ( Map<String, Map<String, List<FilePath>>> )
|
| + * regions ( List<FoldingRegion> )
|
| *
|
| - * A mapping from context source roots to package maps which map package
|
| - * names to source directories for use in client-side package URI
|
| - * resolution.
|
| + * The folding regions contained in the file.
|
| */
|
| - Future<AnalysisGetLibraryDependenciesResult> sendAnalysisGetLibraryDependencies() {
|
| - return server.send("analysis.getLibraryDependencies", null)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new AnalysisGetLibraryDependenciesResult.fromJson(decoder, 'result', result);
|
| - });
|
| - }
|
| + Stream<AnalysisFoldingParams> onAnalysisFolding;
|
|
|
| /**
|
| - * Return the navigation information associated with the given region of the
|
| - * given file. If the navigation information for the given file has not yet
|
| - * been computed, or the most recently computed navigation information for
|
| - * the given file is out of date, then the response for this request will be
|
| - * delayed until it has been computed. If the content of the file changes
|
| - * after this request was received but before a response could be sent, then
|
| - * an error of type CONTENT_MODIFIED will be generated.
|
| - *
|
| - * If a navigation region overlaps (but extends either before or after) the
|
| - * given region of the file it will be included in the result. This means
|
| - * that it is theoretically possible to get the same navigation region in
|
| - * response to multiple requests. Clients can avoid this by always choosing a
|
| - * region that starts at the beginning of a line and ends at the end of a
|
| - * (possibly different) line in the file.
|
| + * Stream controller for [onAnalysisFolding].
|
| + */
|
| + StreamController<AnalysisFoldingParams> _onAnalysisFolding;
|
| +
|
| + /**
|
| + * Reports the highlight regions associated with a given file.
|
| *
|
| - * If a request is made for a file which does not exist, or which is not
|
| - * currently subject to analysis (e.g. because it is not associated with any
|
| - * analysis root specified to analysis.setAnalysisRoots), an error of type
|
| - * GET_NAVIGATION_INVALID_FILE will be generated.
|
| + * This notification is not subscribed to by default. Clients can subscribe
|
| + * by including the value "HIGHLIGHTS" in the list of services passed in an
|
| + * analysis.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file in which navigation information is being requested.
|
| + * The file containing the highlight regions.
|
| *
|
| - * offset ( int )
|
| + * regions ( List<HighlightRegion> )
|
| *
|
| - * The offset of the region for which navigation information is being
|
| - * requested.
|
| + * The highlight regions contained in the file. Each highlight region
|
| + * represents a particular syntactic or semantic meaning associated with
|
| + * some range. Note that the highlight regions that are returned can
|
| + * overlap other highlight regions if there is more than one meaning
|
| + * associated with a particular region.
|
| + */
|
| + Stream<AnalysisHighlightsParams> onAnalysisHighlights;
|
| +
|
| + /**
|
| + * Stream controller for [onAnalysisHighlights].
|
| + */
|
| + StreamController<AnalysisHighlightsParams> _onAnalysisHighlights;
|
| +
|
| + /**
|
| + * Reports the classes that are implemented or extended and class members
|
| + * that are implemented or overridden in a file.
|
| *
|
| - * length ( int )
|
| + * This notification is not subscribed to by default. Clients can subscribe
|
| + * by including the value "IMPLEMENTED" in the list of services passed in an
|
| + * analysis.setSubscriptions request.
|
| *
|
| - * The length of the region for which navigation information is being
|
| - * requested.
|
| + * Parameters
|
| *
|
| - * Returns
|
| + * file ( FilePath )
|
| *
|
| - * files ( List<FilePath> )
|
| + * The file with which the implementations are associated.
|
| *
|
| - * A list of the paths of files that are referenced by the navigation
|
| - * targets.
|
| + * classes ( List<ImplementedClass> )
|
| *
|
| - * targets ( List<NavigationTarget> )
|
| + * The classes defined in the file that are implemented or extended.
|
| *
|
| - * A list of the navigation targets that are referenced by the navigation
|
| - * regions.
|
| + * members ( List<ImplementedMember> )
|
| *
|
| - * regions ( List<NavigationRegion> )
|
| - *
|
| - * A list of the navigation regions within the requested region of the
|
| - * file.
|
| - */
|
| - Future<AnalysisGetNavigationResult> sendAnalysisGetNavigation(String file, int offset, int length) {
|
| - var params = new AnalysisGetNavigationParams(file, offset, length).toJson();
|
| - return server.send("analysis.getNavigation", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new AnalysisGetNavigationResult.fromJson(decoder, 'result', result);
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Force the re-analysis of everything contained in the specified analysis
|
| - * roots. This will cause all previously computed analysis results to be
|
| - * discarded and recomputed, and will cause all subscribed notifications to
|
| - * be re-sent.
|
| - *
|
| - * If no analysis roots are provided, then all current analysis roots will be
|
| - * re-analyzed. If an empty list of analysis roots is provided, then nothing
|
| - * will be re-analyzed. If the list contains one or more paths that are not
|
| - * currently analysis roots, then an error of type INVALID_ANALYSIS_ROOT will
|
| - * be generated.
|
| - *
|
| - * Parameters
|
| - *
|
| - * roots ( optional List<FilePath> )
|
| - *
|
| - * A list of the analysis roots that are to be re-analyzed.
|
| - */
|
| - Future sendAnalysisReanalyze({List<String> roots}) {
|
| - var params = new AnalysisReanalyzeParams(roots: roots).toJson();
|
| - return server.send("analysis.reanalyze", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Sets the root paths used to determine which files to analyze. The set of
|
| - * files to be analyzed are all of the files in one of the root paths that
|
| - * are not either explicitly or implicitly excluded. A file is explicitly
|
| - * excluded if it is in one of the excluded paths. A file is implicitly
|
| - * excluded if it is in a subdirectory of one of the root paths where the
|
| - * name of the subdirectory starts with a period (that is, a hidden
|
| - * directory).
|
| - *
|
| - * Note that this request determines the set of requested analysis roots. The
|
| - * actual set of analysis roots at any given time is the intersection of this
|
| - * set with the set of files and directories actually present on the
|
| - * filesystem. When the filesystem changes, the actual set of analysis roots
|
| - * is automatically updated, but the set of requested analysis roots is
|
| - * unchanged. This means that if the client sets an analysis root before the
|
| - * root becomes visible to server in the filesystem, there is no error; once
|
| - * the server sees the root in the filesystem it will start analyzing it.
|
| - * Similarly, server will stop analyzing files that are removed from the file
|
| - * system but they will remain in the set of requested roots.
|
| - *
|
| - * If an included path represents a file, then server will look in the
|
| - * directory containing the file for a pubspec.yaml file. If none is found,
|
| - * then the parents of the directory will be searched until such a file is
|
| - * found or the root of the file system is reached. If such a file is found,
|
| - * it will be used to resolve package: URI’s within the file.
|
| - *
|
| - * Parameters
|
| - *
|
| - * included ( List<FilePath> )
|
| - *
|
| - * A list of the files and directories that should be analyzed.
|
| - *
|
| - * excluded ( List<FilePath> )
|
| - *
|
| - * A list of the files and directories within the included directories that
|
| - * should not be analyzed.
|
| - *
|
| - * packageRoots ( optional Map<FilePath, FilePath> )
|
| - *
|
| - * A mapping from source directories to target directories that should
|
| - * override the normal package: URI resolution mechanism. The analyzer will
|
| - * behave as though each source directory in the map contains a special
|
| - * pubspec.yaml file which resolves any package: URI to the corresponding
|
| - * path within the target directory. The effect is the same as specifying
|
| - * the target directory as a "--package_root" parameter to the Dart VM when
|
| - * executing any Dart file inside the source directory.
|
| - *
|
| - * Files in any directories that are not overridden by this mapping have
|
| - * their package: URI's resolved using the normal pubspec.yaml mechanism.
|
| - * If this field is absent, or the empty map is specified, that indicates
|
| - * that the normal pubspec.yaml mechanism should always be used.
|
| + * The member defined in the file that are implemented or overridden.
|
| */
|
| - Future sendAnalysisSetAnalysisRoots(List<String> included, List<String> excluded, {Map<String, String> packageRoots}) {
|
| - var params = new AnalysisSetAnalysisRootsParams(included, excluded, packageRoots: packageRoots).toJson();
|
| - return server.send("analysis.setAnalysisRoots", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| + Stream<AnalysisImplementedParams> onAnalysisImplemented;
|
|
|
| /**
|
| - * Subscribe for general services (that is, services that are not specific to
|
| - * individual files). All previous subscriptions are replaced by the given
|
| - * set of services.
|
| - *
|
| - * It is an error if any of the elements in the list are not valid services.
|
| - * If there is an error, then the current subscriptions will remain
|
| - * unchanged.
|
| - *
|
| - * Parameters
|
| - *
|
| - * subscriptions ( List<GeneralAnalysisService> )
|
| - *
|
| - * A list of the services being subscribed to.
|
| + * Stream controller for [onAnalysisImplemented].
|
| */
|
| - Future sendAnalysisSetGeneralSubscriptions(List<GeneralAnalysisService> subscriptions) {
|
| - var params = new AnalysisSetGeneralSubscriptionsParams(subscriptions).toJson();
|
| - return server.send("analysis.setGeneralSubscriptions", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| + StreamController<AnalysisImplementedParams> _onAnalysisImplemented;
|
|
|
| /**
|
| - * Set the priority files to the files in the given list. A priority file is
|
| - * a file that is given priority when scheduling which analysis work to do
|
| - * first. The list typically contains those files that are visible to the
|
| - * user and those for which analysis results will have the biggest impact on
|
| - * the user experience. The order of the files within the list is
|
| - * significant: the first file will be given higher priority than the second,
|
| - * the second higher priority than the third, and so on.
|
| - *
|
| - * Note that this request determines the set of requested priority files. The
|
| - * actual set of priority files is the intersection of the requested set of
|
| - * priority files with the set of files currently subject to analysis. (See
|
| - * analysis.setSubscriptions for a description of files that are subject to
|
| - * analysis.)
|
| + * Reports that the navigation information associated with a region of a
|
| + * single file has become invalid and should be re-requested.
|
| *
|
| - * If a requested priority file is a directory it is ignored, but remains in
|
| - * the set of requested priority files so that if it later becomes a file it
|
| - * can be included in the set of actual priority files.
|
| + * This notification is not subscribed to by default. Clients can subscribe
|
| + * by including the value "INVALIDATE" in the list of services passed in an
|
| + * analysis.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| - * files ( List<FilePath> )
|
| - *
|
| - * The files that are to be a priority for analysis.
|
| - */
|
| - Future sendAnalysisSetPriorityFiles(List<String> files) {
|
| - var params = new AnalysisSetPriorityFilesParams(files).toJson();
|
| - return server.send("analysis.setPriorityFiles", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Subscribe for services that are specific to individual files. All previous
|
| - * subscriptions are replaced by the current set of subscriptions. If a given
|
| - * service is not included as a key in the map then no files will be
|
| - * subscribed to the service, exactly as if the service had been included in
|
| - * the map with an explicit empty list of files.
|
| - *
|
| - * Note that this request determines the set of requested subscriptions. The
|
| - * actual set of subscriptions at any given time is the intersection of this
|
| - * set with the set of files currently subject to analysis. The files
|
| - * currently subject to analysis are the set of files contained within an
|
| - * actual analysis root but not excluded, plus all of the files transitively
|
| - * reachable from those files via import, export and part directives. (See
|
| - * analysis.setAnalysisRoots for an explanation of how the actual analysis
|
| - * roots are determined.) When the actual analysis roots change, the actual
|
| - * set of subscriptions is automatically updated, but the set of requested
|
| - * subscriptions is unchanged.
|
| - *
|
| - * If a requested subscription is a directory it is ignored, but remains in
|
| - * the set of requested subscriptions so that if it later becomes a file it
|
| - * can be included in the set of actual subscriptions.
|
| - *
|
| - * It is an error if any of the keys in the map are not valid services. If
|
| - * there is an error, then the existing subscriptions will remain unchanged.
|
| + * file ( FilePath )
|
| *
|
| - * Parameters
|
| + * The file whose information has been invalidated.
|
| *
|
| - * subscriptions ( Map<AnalysisService, List<FilePath>> )
|
| + * offset ( int )
|
| *
|
| - * A table mapping services to a list of the files being subscribed to the
|
| - * service.
|
| - */
|
| - Future sendAnalysisSetSubscriptions(Map<AnalysisService, List<String>> subscriptions) {
|
| - var params = new AnalysisSetSubscriptionsParams(subscriptions).toJson();
|
| - return server.send("analysis.setSubscriptions", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Update the content of one or more files. Files that were previously
|
| - * updated but not included in this update remain unchanged. This effectively
|
| - * represents an overlay of the filesystem. The files whose content is
|
| - * overridden are therefore seen by server as being files with the given
|
| - * content, even if the files do not exist on the filesystem or if the file
|
| - * path represents the path to a directory on the filesystem.
|
| + * The offset of the invalidated region.
|
| *
|
| - * Parameters
|
| + * length ( int )
|
| *
|
| - * files ( Map<FilePath, AddContentOverlay | ChangeContentOverlay |
|
| - * RemoveContentOverlay> )
|
| + * The length of the invalidated region.
|
| *
|
| - * A table mapping the files whose content has changed to a description of
|
| - * the content change.
|
| + * delta ( int )
|
| *
|
| - * Returns
|
| + * The delta to be applied to the offsets in information that follows the
|
| + * invalidated region in order to update it so that it doesn't need to be
|
| + * re-requested.
|
| */
|
| - Future<AnalysisUpdateContentResult> sendAnalysisUpdateContent(Map<String, dynamic> files) {
|
| - var params = new AnalysisUpdateContentParams(files).toJson();
|
| - return server.send("analysis.updateContent", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new AnalysisUpdateContentResult.fromJson(decoder, 'result', result);
|
| - });
|
| - }
|
| + Stream<AnalysisInvalidateParams> onAnalysisInvalidate;
|
|
|
| /**
|
| - * Update the options controlling analysis based on the given set of options.
|
| - * Any options that are not included in the analysis options will not be
|
| - * changed. If there are options in the analysis options that are not valid,
|
| - * they will be silently ignored.
|
| - *
|
| - * Parameters
|
| - *
|
| - * options ( AnalysisOptions )
|
| - *
|
| - * The options that are to be used to control analysis.
|
| + * Stream controller for [onAnalysisInvalidate].
|
| */
|
| - Future sendAnalysisUpdateOptions(AnalysisOptions options) {
|
| - var params = new AnalysisUpdateOptionsParams(options).toJson();
|
| - return server.send("analysis.updateOptions", params)
|
| - .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| - });
|
| - }
|
| + StreamController<AnalysisInvalidateParams> _onAnalysisInvalidate;
|
|
|
| /**
|
| - * Reports the paths of the files that are being analyzed.
|
| + * Reports the navigation targets associated with a given file.
|
| *
|
| * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "ANALYZED_FILES" in the list of services passed in
|
| - * an analysis.setGeneralSubscriptions request.
|
| - *
|
| - * Parameters
|
| - *
|
| - * directories ( List<FilePath> )
|
| - *
|
| - * A list of the paths of the files that are being analyzed.
|
| - */
|
| - Stream<AnalysisAnalyzedFilesParams> onAnalysisAnalyzedFiles;
|
| -
|
| - /**
|
| - * Stream controller for [onAnalysisAnalyzedFiles].
|
| - */
|
| - StreamController<AnalysisAnalyzedFilesParams> _onAnalysisAnalyzedFiles;
|
| -
|
| - /**
|
| - * Reports the errors associated with a given file. The set of errors
|
| - * included in the notification is always a complete list that supersedes any
|
| - * previously reported errors.
|
| - *
|
| - * It is only possible to unsubscribe from this notification by using the
|
| - * command-line flag --no-error-notification.
|
| + * by including the value "NAVIGATION" in the list of services passed in an
|
| + * analysis.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file containing the errors.
|
| - *
|
| - * errors ( List<AnalysisError> )
|
| + * The file containing the navigation regions.
|
| *
|
| - * The errors contained in the file.
|
| - */
|
| - Stream<AnalysisErrorsParams> onAnalysisErrors;
|
| -
|
| - /**
|
| - * Stream controller for [onAnalysisErrors].
|
| - */
|
| - StreamController<AnalysisErrorsParams> _onAnalysisErrors;
|
| -
|
| - /**
|
| - * Reports that any analysis results that were previously associated with the
|
| - * given files should be considered to be invalid because those files are no
|
| - * longer being analyzed, either because the analysis root that contained it
|
| - * is no longer being analyzed or because the file no longer exists.
|
| + * regions ( List<NavigationRegion> )
|
| *
|
| - * If a file is included in this notification and at some later time a
|
| - * notification with results for the file is received, clients should assume
|
| - * that the file is once again being analyzed and the information should be
|
| - * processed.
|
| + * The navigation regions contained in the file. The regions are sorted by
|
| + * their offsets. Each navigation region represents a list of targets
|
| + * associated with some range. The lists will usually contain a single
|
| + * target, but can contain more in the case of a part that is included in
|
| + * multiple libraries or in Dart code that is compiled against multiple
|
| + * versions of a package. Note that the navigation regions that are
|
| + * returned do not overlap other navigation regions.
|
| *
|
| - * It is not possible to subscribe to or unsubscribe from this notification.
|
| + * targets ( List<NavigationTarget> )
|
| *
|
| - * Parameters
|
| + * The navigation targets referenced in the file. They are referenced by
|
| + * NavigationRegions by their index in this array.
|
| *
|
| * files ( List<FilePath> )
|
| *
|
| - * The files that are no longer being analyzed.
|
| + * The files containing navigation targets referenced in the file. They are
|
| + * referenced by NavigationTargets by their index in this array.
|
| */
|
| - Stream<AnalysisFlushResultsParams> onAnalysisFlushResults;
|
| + Stream<AnalysisNavigationParams> onAnalysisNavigation;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisFlushResults].
|
| + * Stream controller for [onAnalysisNavigation].
|
| */
|
| - StreamController<AnalysisFlushResultsParams> _onAnalysisFlushResults;
|
| + StreamController<AnalysisNavigationParams> _onAnalysisNavigation;
|
|
|
| /**
|
| - * Reports the folding regions associated with a given file. Folding regions
|
| - * can be nested, but will not be overlapping. Nesting occurs when a foldable
|
| - * element, such as a method, is nested inside another foldable element such
|
| - * as a class.
|
| + * Reports the occurrences of references to elements within a single file.
|
| *
|
| * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "FOLDING" in the list of services passed in an
|
| + * by including the value "OCCURRENCES" in the list of services passed in an
|
| * analysis.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file containing the folding regions.
|
| + * The file in which the references occur.
|
| *
|
| - * regions ( List<FoldingRegion> )
|
| + * occurrences ( List<Occurrences> )
|
| *
|
| - * The folding regions contained in the file.
|
| + * The occurrences of references to elements within the file.
|
| */
|
| - Stream<AnalysisFoldingParams> onAnalysisFolding;
|
| + Stream<AnalysisOccurrencesParams> onAnalysisOccurrences;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisFolding].
|
| + * Stream controller for [onAnalysisOccurrences].
|
| */
|
| - StreamController<AnalysisFoldingParams> _onAnalysisFolding;
|
| + StreamController<AnalysisOccurrencesParams> _onAnalysisOccurrences;
|
|
|
| /**
|
| - * Reports the highlight regions associated with a given file.
|
| + * Reports the outline associated with a single file.
|
| *
|
| * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "HIGHLIGHTS" in the list of services passed in an
|
| + * by including the value "OUTLINE" in the list of services passed in an
|
| * analysis.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file containing the highlight regions.
|
| - *
|
| - * regions ( List<HighlightRegion> )
|
| - *
|
| - * The highlight regions contained in the file. Each highlight region
|
| - * represents a particular syntactic or semantic meaning associated with
|
| - * some range. Note that the highlight regions that are returned can
|
| - * overlap other highlight regions if there is more than one meaning
|
| - * associated with a particular region.
|
| - */
|
| - Stream<AnalysisHighlightsParams> onAnalysisHighlights;
|
| -
|
| - /**
|
| - * Stream controller for [onAnalysisHighlights].
|
| - */
|
| - StreamController<AnalysisHighlightsParams> _onAnalysisHighlights;
|
| -
|
| - /**
|
| - * Reports the classes that are implemented or extended and class members
|
| - * that are implemented or overridden in a file.
|
| - *
|
| - * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "IMPLEMENTED" in the list of services passed in an
|
| - * analysis.setSubscriptions request.
|
| - *
|
| - * Parameters
|
| + * The file with which the outline is associated.
|
| *
|
| - * file ( FilePath )
|
| + * kind ( FileKind )
|
| *
|
| - * The file with which the implementations are associated.
|
| + * The kind of the file.
|
| *
|
| - * classes ( List<ImplementedClass> )
|
| + * libraryName ( optional String )
|
| *
|
| - * The classes defined in the file that are implemented or extended.
|
| + * The name of the library defined by the file using a "library" directive,
|
| + * or referenced by a "part of" directive. If both "library" and "part of"
|
| + * directives are present, then the "library" directive takes precedence.
|
| + * This field will be omitted if the file has neither "library" nor "part
|
| + * of" directives.
|
| *
|
| - * members ( List<ImplementedMember> )
|
| + * outline ( Outline )
|
| *
|
| - * The member defined in the file that are implemented or overridden.
|
| + * The outline associated with the file.
|
| */
|
| - Stream<AnalysisImplementedParams> onAnalysisImplemented;
|
| + Stream<AnalysisOutlineParams> onAnalysisOutline;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisImplemented].
|
| + * Stream controller for [onAnalysisOutline].
|
| */
|
| - StreamController<AnalysisImplementedParams> _onAnalysisImplemented;
|
| + StreamController<AnalysisOutlineParams> _onAnalysisOutline;
|
|
|
| /**
|
| - * Reports that the navigation information associated with a region of a
|
| - * single file has become invalid and should be re-requested.
|
| + * Reports the overridding members in a file.
|
| *
|
| * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "INVALIDATE" in the list of services passed in an
|
| + * by including the value "OVERRIDES" in the list of services passed in an
|
| * analysis.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file whose information has been invalidated.
|
| - *
|
| - * offset ( int )
|
| - *
|
| - * The offset of the invalidated region.
|
| - *
|
| - * length ( int )
|
| - *
|
| - * The length of the invalidated region.
|
| + * The file with which the overrides are associated.
|
| *
|
| - * delta ( int )
|
| + * overrides ( List<Override> )
|
| *
|
| - * The delta to be applied to the offsets in information that follows the
|
| - * invalidated region in order to update it so that it doesn't need to be
|
| - * re-requested.
|
| + * The overrides associated with the file.
|
| */
|
| - Stream<AnalysisInvalidateParams> onAnalysisInvalidate;
|
| + Stream<AnalysisOverridesParams> onAnalysisOverrides;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisInvalidate].
|
| + * Stream controller for [onAnalysisOverrides].
|
| */
|
| - StreamController<AnalysisInvalidateParams> _onAnalysisInvalidate;
|
| + StreamController<AnalysisOverridesParams> _onAnalysisOverrides;
|
|
|
| /**
|
| - * Reports the navigation targets associated with a given file.
|
| - *
|
| - * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "NAVIGATION" in the list of services passed in an
|
| - * analysis.setSubscriptions request.
|
| + * Reports the completion suggestions that should be presented to the user.
|
| + * The set of suggestions included in the notification is always a complete
|
| + * list that supersedes any previously reported suggestions.
|
| *
|
| * Parameters
|
| *
|
| - * file ( FilePath )
|
| + * id ( CompletionId )
|
| *
|
| - * The file containing the navigation regions.
|
| + * The id associated with the completion.
|
| *
|
| - * regions ( List<NavigationRegion> )
|
| + * replacementOffset ( int )
|
| *
|
| - * The navigation regions contained in the file. The regions are sorted by
|
| - * their offsets. Each navigation region represents a list of targets
|
| - * associated with some range. The lists will usually contain a single
|
| - * target, but can contain more in the case of a part that is included in
|
| - * multiple libraries or in Dart code that is compiled against multiple
|
| - * versions of a package. Note that the navigation regions that are
|
| - * returned do not overlap other navigation regions.
|
| + * The offset of the start of the text to be replaced. This will be
|
| + * different than the offset used to request the completion suggestions if
|
| + * there was a portion of an identifier before the original offset. In
|
| + * particular, the replacementOffset will be the offset of the beginning of
|
| + * said identifier.
|
| *
|
| - * targets ( List<NavigationTarget> )
|
| + * replacementLength ( int )
|
| *
|
| - * The navigation targets referenced in the file. They are referenced by
|
| - * NavigationRegions by their index in this array.
|
| + * The length of the text to be replaced if the remainder of the identifier
|
| + * containing the cursor is to be replaced when the suggestion is applied
|
| + * (that is, the number of characters in the existing identifier).
|
| *
|
| - * files ( List<FilePath> )
|
| + * results ( List<CompletionSuggestion> )
|
| *
|
| - * The files containing navigation targets referenced in the file. They are
|
| - * referenced by NavigationTargets by their index in this array.
|
| + * The completion suggestions being reported. The notification contains all
|
| + * possible completions at the requested cursor position, even those that
|
| + * do not match the characters the user has already typed. This allows the
|
| + * client to respond to further keystrokes from the user without having to
|
| + * make additional requests.
|
| + *
|
| + * isLast ( bool )
|
| + *
|
| + * True if this is that last set of results that will be returned for the
|
| + * indicated completion.
|
| */
|
| - Stream<AnalysisNavigationParams> onAnalysisNavigation;
|
| + Stream<CompletionResultsParams> onCompletionResults;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisNavigation].
|
| + * Stream controller for [onCompletionResults].
|
| */
|
| - StreamController<AnalysisNavigationParams> _onAnalysisNavigation;
|
| + StreamController<CompletionResultsParams> _onCompletionResults;
|
|
|
| /**
|
| - * Reports the occurrences of references to elements within a single file.
|
| - *
|
| - * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "OCCURRENCES" in the list of services passed in an
|
| - * analysis.setSubscriptions request.
|
| + * Reports some or all of the results of performing a requested search.
|
| + * Unlike other notifications, this notification contains search results that
|
| + * should be added to any previously received search results associated with
|
| + * the same search id.
|
| *
|
| * Parameters
|
| *
|
| - * file ( FilePath )
|
| + * id ( SearchId )
|
| *
|
| - * The file in which the references occur.
|
| + * The id associated with the search.
|
| *
|
| - * occurrences ( List<Occurrences> )
|
| + * results ( List<SearchResult> )
|
| *
|
| - * The occurrences of references to elements within the file.
|
| + * The search results being reported.
|
| + *
|
| + * isLast ( bool )
|
| + *
|
| + * True if this is that last set of results that will be returned for the
|
| + * indicated search.
|
| */
|
| - Stream<AnalysisOccurrencesParams> onAnalysisOccurrences;
|
| + Stream<SearchResultsParams> onSearchResults;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisOccurrences].
|
| + * Stream controller for [onSearchResults].
|
| */
|
| - StreamController<AnalysisOccurrencesParams> _onAnalysisOccurrences;
|
| + StreamController<SearchResultsParams> _onSearchResults;
|
|
|
| /**
|
| - * Reports the outline associated with a single file.
|
| + * Reports information needed to allow a single file to be launched.
|
| *
|
| * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "OUTLINE" in the list of services passed in an
|
| - * analysis.setSubscriptions request.
|
| + * by including the value "LAUNCH_DATA" in the list of services passed in an
|
| + * execution.setSubscriptions request.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file with which the outline is associated.
|
| - *
|
| - * kind ( FileKind )
|
| - *
|
| - * The kind of the file.
|
| + * The file for which launch data is being provided. This will either be a
|
| + * Dart library or an HTML file.
|
| *
|
| - * libraryName ( optional String )
|
| + * kind ( optional ExecutableKind )
|
| *
|
| - * The name of the library defined by the file using a "library" directive,
|
| - * or referenced by a "part of" directive. If both "library" and "part of"
|
| - * directives are present, then the "library" directive takes precedence.
|
| - * This field will be omitted if the file has neither "library" nor "part
|
| - * of" directives.
|
| + * The kind of the executable file. This field is omitted if the file is
|
| + * not a Dart file.
|
| *
|
| - * outline ( Outline )
|
| + * referencedFiles ( optional List<FilePath> )
|
| *
|
| - * The outline associated with the file.
|
| + * A list of the Dart files that are referenced by the file. This field is
|
| + * omitted if the file is not an HTML file.
|
| */
|
| - Stream<AnalysisOutlineParams> onAnalysisOutline;
|
| + Stream<ExecutionLaunchDataParams> onExecutionLaunchData;
|
|
|
| /**
|
| - * Stream controller for [onAnalysisOutline].
|
| + * Stream controller for [onExecutionLaunchData].
|
| */
|
| - StreamController<AnalysisOutlineParams> _onAnalysisOutline;
|
| + StreamController<ExecutionLaunchDataParams> _onExecutionLaunchData;
|
| +
|
| + Server get server;
|
|
|
| /**
|
| - * Reports the overridding members in a file.
|
| + * Dispatch the notification named [event], and containing parameters
|
| + * [params], to the appropriate stream.
|
| + */
|
| + void dispatchNotification(String event, params) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + switch (event) {
|
| + case "server.connected":
|
| + expect(params, isServerConnectedParams);
|
| + _onServerConnected
|
| + .add(new ServerConnectedParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "server.error":
|
| + expect(params, isServerErrorParams);
|
| + _onServerError
|
| + .add(new ServerErrorParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "server.status":
|
| + expect(params, isServerStatusParams);
|
| + _onServerStatus
|
| + .add(new ServerStatusParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.analyzedFiles":
|
| + expect(params, isAnalysisAnalyzedFilesParams);
|
| + _onAnalysisAnalyzedFiles.add(new AnalysisAnalyzedFilesParams.fromJson(
|
| + decoder, 'params', params));
|
| + break;
|
| + case "analysis.errors":
|
| + expect(params, isAnalysisErrorsParams);
|
| + _onAnalysisErrors
|
| + .add(new AnalysisErrorsParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.flushResults":
|
| + expect(params, isAnalysisFlushResultsParams);
|
| + _onAnalysisFlushResults.add(
|
| + new AnalysisFlushResultsParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.folding":
|
| + expect(params, isAnalysisFoldingParams);
|
| + _onAnalysisFolding
|
| + .add(new AnalysisFoldingParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.highlights":
|
| + expect(params, isAnalysisHighlightsParams);
|
| + _onAnalysisHighlights.add(
|
| + new AnalysisHighlightsParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.implemented":
|
| + expect(params, isAnalysisImplementedParams);
|
| + _onAnalysisImplemented.add(
|
| + new AnalysisImplementedParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.invalidate":
|
| + expect(params, isAnalysisInvalidateParams);
|
| + _onAnalysisInvalidate.add(
|
| + new AnalysisInvalidateParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.navigation":
|
| + expect(params, isAnalysisNavigationParams);
|
| + _onAnalysisNavigation.add(
|
| + new AnalysisNavigationParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.occurrences":
|
| + expect(params, isAnalysisOccurrencesParams);
|
| + _onAnalysisOccurrences.add(
|
| + new AnalysisOccurrencesParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.outline":
|
| + expect(params, isAnalysisOutlineParams);
|
| + _onAnalysisOutline
|
| + .add(new AnalysisOutlineParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "analysis.overrides":
|
| + expect(params, isAnalysisOverridesParams);
|
| + _onAnalysisOverrides.add(
|
| + new AnalysisOverridesParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "completion.results":
|
| + expect(params, isCompletionResultsParams);
|
| + _onCompletionResults.add(
|
| + new CompletionResultsParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "search.results":
|
| + expect(params, isSearchResultsParams);
|
| + _onSearchResults
|
| + .add(new SearchResultsParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + case "execution.launchData":
|
| + expect(params, isExecutionLaunchDataParams);
|
| + _onExecutionLaunchData.add(
|
| + new ExecutionLaunchDataParams.fromJson(decoder, 'params', params));
|
| + break;
|
| + default:
|
| + fail('Unexpected notification: $event');
|
| + break;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Initialize the fields in InttestMixin, and ensure that notifications will
|
| + * be handled.
|
| + */
|
| + void initializeInttestMixin() {
|
| + _onServerConnected =
|
| + new StreamController<ServerConnectedParams>(sync: true);
|
| + onServerConnected = _onServerConnected.stream.asBroadcastStream();
|
| + _onServerError = new StreamController<ServerErrorParams>(sync: true);
|
| + onServerError = _onServerError.stream.asBroadcastStream();
|
| + _onServerStatus = new StreamController<ServerStatusParams>(sync: true);
|
| + onServerStatus = _onServerStatus.stream.asBroadcastStream();
|
| + _onAnalysisAnalyzedFiles =
|
| + new StreamController<AnalysisAnalyzedFilesParams>(sync: true);
|
| + onAnalysisAnalyzedFiles =
|
| + _onAnalysisAnalyzedFiles.stream.asBroadcastStream();
|
| + _onAnalysisErrors = new StreamController<AnalysisErrorsParams>(sync: true);
|
| + onAnalysisErrors = _onAnalysisErrors.stream.asBroadcastStream();
|
| + _onAnalysisFlushResults =
|
| + new StreamController<AnalysisFlushResultsParams>(sync: true);
|
| + onAnalysisFlushResults = _onAnalysisFlushResults.stream.asBroadcastStream();
|
| + _onAnalysisFolding =
|
| + new StreamController<AnalysisFoldingParams>(sync: true);
|
| + onAnalysisFolding = _onAnalysisFolding.stream.asBroadcastStream();
|
| + _onAnalysisHighlights =
|
| + new StreamController<AnalysisHighlightsParams>(sync: true);
|
| + onAnalysisHighlights = _onAnalysisHighlights.stream.asBroadcastStream();
|
| + _onAnalysisImplemented =
|
| + new StreamController<AnalysisImplementedParams>(sync: true);
|
| + onAnalysisImplemented = _onAnalysisImplemented.stream.asBroadcastStream();
|
| + _onAnalysisInvalidate =
|
| + new StreamController<AnalysisInvalidateParams>(sync: true);
|
| + onAnalysisInvalidate = _onAnalysisInvalidate.stream.asBroadcastStream();
|
| + _onAnalysisNavigation =
|
| + new StreamController<AnalysisNavigationParams>(sync: true);
|
| + onAnalysisNavigation = _onAnalysisNavigation.stream.asBroadcastStream();
|
| + _onAnalysisOccurrences =
|
| + new StreamController<AnalysisOccurrencesParams>(sync: true);
|
| + onAnalysisOccurrences = _onAnalysisOccurrences.stream.asBroadcastStream();
|
| + _onAnalysisOutline =
|
| + new StreamController<AnalysisOutlineParams>(sync: true);
|
| + onAnalysisOutline = _onAnalysisOutline.stream.asBroadcastStream();
|
| + _onAnalysisOverrides =
|
| + new StreamController<AnalysisOverridesParams>(sync: true);
|
| + onAnalysisOverrides = _onAnalysisOverrides.stream.asBroadcastStream();
|
| + _onCompletionResults =
|
| + new StreamController<CompletionResultsParams>(sync: true);
|
| + onCompletionResults = _onCompletionResults.stream.asBroadcastStream();
|
| + _onSearchResults = new StreamController<SearchResultsParams>(sync: true);
|
| + onSearchResults = _onSearchResults.stream.asBroadcastStream();
|
| + _onExecutionLaunchData =
|
| + new StreamController<ExecutionLaunchDataParams>(sync: true);
|
| + onExecutionLaunchData = _onExecutionLaunchData.stream.asBroadcastStream();
|
| + }
|
| +
|
| + /**
|
| + * Return the errors associated with the given file. If the errors for the
|
| + * given file have not yet been computed, or the most recently computed
|
| + * errors for the given file are out of date, then the response for this
|
| + * request will be delayed until they have been computed. If some or all of
|
| + * the errors for the file cannot be computed, then the subset of the errors
|
| + * that can be computed will be returned and the response will contain an
|
| + * error to indicate why the errors could not be computed. If the content of
|
| + * the file changes after this request was received but before a response
|
| + * could be sent, then an error of type CONTENT_MODIFIED will be generated.
|
| *
|
| - * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "OVERRIDES" in the list of services passed in an
|
| - * analysis.setSubscriptions request.
|
| + * This request is intended to be used by clients that cannot asynchronously
|
| + * apply updated error information. Clients that can apply error information
|
| + * as it becomes available should use the information provided by the
|
| + * 'analysis.errors' notification.
|
| + *
|
| + * If a request is made for a file which does not exist, or which is not
|
| + * currently subject to analysis (e.g. because it is not associated with any
|
| + * analysis root specified to analysis.setAnalysisRoots), an error of type
|
| + * GET_ERRORS_INVALID_FILE will be generated.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file with which the overrides are associated.
|
| + * The file for which errors are being requested.
|
| *
|
| - * overrides ( List<Override> )
|
| + * Returns
|
| *
|
| - * The overrides associated with the file.
|
| - */
|
| - Stream<AnalysisOverridesParams> onAnalysisOverrides;
|
| -
|
| - /**
|
| - * Stream controller for [onAnalysisOverrides].
|
| + * errors ( List<AnalysisError> )
|
| + *
|
| + * The errors associated with the file.
|
| */
|
| - StreamController<AnalysisOverridesParams> _onAnalysisOverrides;
|
| + Future<AnalysisGetErrorsResult> sendAnalysisGetErrors(String file) {
|
| + var params = new AnalysisGetErrorsParams(file).toJson();
|
| + return server.send("analysis.getErrors", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new AnalysisGetErrorsResult.fromJson(decoder, 'result', result);
|
| + });
|
| + }
|
|
|
| /**
|
| - * Request that completion suggestions for the given offset in the given file
|
| - * be returned.
|
| + * Return the hover information associate with the given location. If some or
|
| + * all of the hover information is not available at the time this request is
|
| + * processed the information will be omitted from the response.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file containing the point at which suggestions are to be made.
|
| + * The file in which hover information is being requested.
|
| *
|
| * offset ( int )
|
| *
|
| - * The offset within the file at which suggestions are to be made.
|
| + * The offset for which hover information is being requested.
|
| *
|
| * Returns
|
| *
|
| - * id ( CompletionId )
|
| + * hovers ( List<HoverInformation> )
|
| *
|
| - * The identifier used to associate results with this completion request.
|
| + * The hover information associated with the location. The list will be
|
| + * empty if no information could be determined for the location. The list
|
| + * can contain multiple items if the file is being analyzed in multiple
|
| + * contexts in conflicting ways (such as a part that is included in
|
| + * multiple libraries).
|
| */
|
| - Future<CompletionGetSuggestionsResult> sendCompletionGetSuggestions(String file, int offset) {
|
| - var params = new CompletionGetSuggestionsParams(file, offset).toJson();
|
| - return server.send("completion.getSuggestions", params)
|
| - .then((result) {
|
| + Future<AnalysisGetHoverResult> sendAnalysisGetHover(String file, int offset) {
|
| + var params = new AnalysisGetHoverParams(file, offset).toJson();
|
| + return server.send("analysis.getHover", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new CompletionGetSuggestionsResult.fromJson(decoder, 'result', result);
|
| + return new AnalysisGetHoverResult.fromJson(decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| - * Reports the completion suggestions that should be presented to the user.
|
| - * The set of suggestions included in the notification is always a complete
|
| - * list that supersedes any previously reported suggestions.
|
| - *
|
| - * Parameters
|
| - *
|
| - * id ( CompletionId )
|
| - *
|
| - * The id associated with the completion.
|
| - *
|
| - * replacementOffset ( int )
|
| - *
|
| - * The offset of the start of the text to be replaced. This will be
|
| - * different than the offset used to request the completion suggestions if
|
| - * there was a portion of an identifier before the original offset. In
|
| - * particular, the replacementOffset will be the offset of the beginning of
|
| - * said identifier.
|
| + * Return library dependency information for use in client-side indexing and
|
| + * package URI resolution.
|
| *
|
| - * replacementLength ( int )
|
| + * Clients that are only using the libraries field should consider using the
|
| + * analyzedFiles notification instead.
|
| *
|
| - * The length of the text to be replaced if the remainder of the identifier
|
| - * containing the cursor is to be replaced when the suggestion is applied
|
| - * (that is, the number of characters in the existing identifier).
|
| + * Returns
|
| *
|
| - * results ( List<CompletionSuggestion> )
|
| + * libraries ( List<FilePath> )
|
| *
|
| - * The completion suggestions being reported. The notification contains all
|
| - * possible completions at the requested cursor position, even those that
|
| - * do not match the characters the user has already typed. This allows the
|
| - * client to respond to further keystrokes from the user without having to
|
| - * make additional requests.
|
| + * A list of the paths of library elements referenced by files in existing
|
| + * analysis roots.
|
| *
|
| - * isLast ( bool )
|
| + * packageMap ( Map<String, Map<String, List<FilePath>>> )
|
| *
|
| - * True if this is that last set of results that will be returned for the
|
| - * indicated completion.
|
| - */
|
| - Stream<CompletionResultsParams> onCompletionResults;
|
| -
|
| - /**
|
| - * Stream controller for [onCompletionResults].
|
| + * A mapping from context source roots to package maps which map package
|
| + * names to source directories for use in client-side package URI
|
| + * resolution.
|
| */
|
| - StreamController<CompletionResultsParams> _onCompletionResults;
|
| + Future<
|
| + AnalysisGetLibraryDependenciesResult> sendAnalysisGetLibraryDependencies() {
|
| + return server.send("analysis.getLibraryDependencies", null).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new AnalysisGetLibraryDependenciesResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
|
|
| /**
|
| - * Perform a search for references to the element defined or referenced at
|
| - * the given offset in the given file.
|
| + * Return the navigation information associated with the given region of the
|
| + * given file. If the navigation information for the given file has not yet
|
| + * been computed, or the most recently computed navigation information for
|
| + * the given file is out of date, then the response for this request will be
|
| + * delayed until it has been computed. If the content of the file changes
|
| + * after this request was received but before a response could be sent, then
|
| + * an error of type CONTENT_MODIFIED will be generated.
|
| + *
|
| + * If a navigation region overlaps (but extends either before or after) the
|
| + * given region of the file it will be included in the result. This means
|
| + * that it is theoretically possible to get the same navigation region in
|
| + * response to multiple requests. Clients can avoid this by always choosing a
|
| + * region that starts at the beginning of a line and ends at the end of a
|
| + * (possibly different) line in the file.
|
| *
|
| - * An identifier is returned immediately, and individual results will be
|
| - * returned via the search.results notification as they become available.
|
| + * If a request is made for a file which does not exist, or which is not
|
| + * currently subject to analysis (e.g. because it is not associated with any
|
| + * analysis root specified to analysis.setAnalysisRoots), an error of type
|
| + * GET_NAVIGATION_INVALID_FILE will be generated.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The file containing the declaration of or reference to the element used
|
| - * to define the search.
|
| + * The file in which navigation information is being requested.
|
| *
|
| * offset ( int )
|
| *
|
| - * The offset within the file of the declaration of or reference to the
|
| - * element.
|
| + * The offset of the region for which navigation information is being
|
| + * requested.
|
| *
|
| - * includePotential ( bool )
|
| + * length ( int )
|
| *
|
| - * True if potential matches are to be included in the results.
|
| + * The length of the region for which navigation information is being
|
| + * requested.
|
| *
|
| * Returns
|
| *
|
| - * id ( optional SearchId )
|
| + * files ( List<FilePath> )
|
| *
|
| - * The identifier used to associate results with this search request.
|
| + * A list of the paths of files that are referenced by the navigation
|
| + * targets.
|
| *
|
| - * If no element was found at the given location, this field will be
|
| - * absent, and no results will be reported via the search.results
|
| - * notification.
|
| + * targets ( List<NavigationTarget> )
|
| *
|
| - * element ( optional Element )
|
| + * A list of the navigation targets that are referenced by the navigation
|
| + * regions.
|
| *
|
| - * The element referenced or defined at the given offset and whose
|
| - * references will be returned in the search results.
|
| + * regions ( List<NavigationRegion> )
|
| *
|
| - * If no element was found at the given location, this field will be
|
| - * absent.
|
| + * A list of the navigation regions within the requested region of the
|
| + * file.
|
| */
|
| - Future<SearchFindElementReferencesResult> sendSearchFindElementReferences(String file, int offset, bool includePotential) {
|
| - var params = new SearchFindElementReferencesParams(file, offset, includePotential).toJson();
|
| - return server.send("search.findElementReferences", params)
|
| - .then((result) {
|
| + Future<AnalysisGetNavigationResult> sendAnalysisGetNavigation(
|
| + String file, int offset, int length) {
|
| + var params = new AnalysisGetNavigationParams(file, offset, length).toJson();
|
| + return server.send("analysis.getNavigation", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new SearchFindElementReferencesResult.fromJson(decoder, 'result', result);
|
| + return new AnalysisGetNavigationResult.fromJson(
|
| + decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| - * Perform a search for declarations of members whose name is equal to the
|
| - * given name.
|
| + * Force the re-analysis of everything contained in the specified analysis
|
| + * roots. This will cause all previously computed analysis results to be
|
| + * discarded and recomputed, and will cause all subscribed notifications to
|
| + * be re-sent.
|
| *
|
| - * An identifier is returned immediately, and individual results will be
|
| - * returned via the search.results notification as they become available.
|
| + * If no analysis roots are provided, then all current analysis roots will be
|
| + * re-analyzed. If an empty list of analysis roots is provided, then nothing
|
| + * will be re-analyzed. If the list contains one or more paths that are not
|
| + * currently analysis roots, then an error of type INVALID_ANALYSIS_ROOT will
|
| + * be generated.
|
| *
|
| * Parameters
|
| *
|
| - * name ( String )
|
| - *
|
| - * The name of the declarations to be found.
|
| - *
|
| - * Returns
|
| - *
|
| - * id ( SearchId )
|
| + * roots ( optional List<FilePath> )
|
| *
|
| - * The identifier used to associate results with this search request.
|
| + * A list of the analysis roots that are to be re-analyzed.
|
| */
|
| - Future<SearchFindMemberDeclarationsResult> sendSearchFindMemberDeclarations(String name) {
|
| - var params = new SearchFindMemberDeclarationsParams(name).toJson();
|
| - return server.send("search.findMemberDeclarations", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new SearchFindMemberDeclarationsResult.fromJson(decoder, 'result', result);
|
| + Future sendAnalysisReanalyze({List<String> roots}) {
|
| + var params = new AnalysisReanalyzeParams(roots: roots).toJson();
|
| + return server.send("analysis.reanalyze", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| });
|
| }
|
|
|
| /**
|
| - * Perform a search for references to members whose name is equal to the
|
| - * given name. This search does not check to see that there is a member
|
| - * defined with the given name, so it is able to find references to undefined
|
| - * members as well.
|
| + * Sets the root paths used to determine which files to analyze. The set of
|
| + * files to be analyzed are all of the files in one of the root paths that
|
| + * are not either explicitly or implicitly excluded. A file is explicitly
|
| + * excluded if it is in one of the excluded paths. A file is implicitly
|
| + * excluded if it is in a subdirectory of one of the root paths where the
|
| + * name of the subdirectory starts with a period (that is, a hidden
|
| + * directory).
|
| *
|
| - * An identifier is returned immediately, and individual results will be
|
| - * returned via the search.results notification as they become available.
|
| + * Note that this request determines the set of requested analysis roots. The
|
| + * actual set of analysis roots at any given time is the intersection of this
|
| + * set with the set of files and directories actually present on the
|
| + * filesystem. When the filesystem changes, the actual set of analysis roots
|
| + * is automatically updated, but the set of requested analysis roots is
|
| + * unchanged. This means that if the client sets an analysis root before the
|
| + * root becomes visible to server in the filesystem, there is no error; once
|
| + * the server sees the root in the filesystem it will start analyzing it.
|
| + * Similarly, server will stop analyzing files that are removed from the file
|
| + * system but they will remain in the set of requested roots.
|
| + *
|
| + * If an included path represents a file, then server will look in the
|
| + * directory containing the file for a pubspec.yaml file. If none is found,
|
| + * then the parents of the directory will be searched until such a file is
|
| + * found or the root of the file system is reached. If such a file is found,
|
| + * it will be used to resolve package: URI’s within the file.
|
| *
|
| * Parameters
|
| *
|
| - * name ( String )
|
| + * included ( List<FilePath> )
|
| *
|
| - * The name of the references to be found.
|
| + * A list of the files and directories that should be analyzed.
|
| *
|
| - * Returns
|
| + * excluded ( List<FilePath> )
|
| *
|
| - * id ( SearchId )
|
| + * A list of the files and directories within the included directories that
|
| + * should not be analyzed.
|
| *
|
| - * The identifier used to associate results with this search request.
|
| + * packageRoots ( optional Map<FilePath, FilePath> )
|
| + *
|
| + * A mapping from source directories to target directories that should
|
| + * override the normal package: URI resolution mechanism. The analyzer will
|
| + * behave as though each source directory in the map contains a special
|
| + * pubspec.yaml file which resolves any package: URI to the corresponding
|
| + * path within the target directory. The effect is the same as specifying
|
| + * the target directory as a "--package_root" parameter to the Dart VM when
|
| + * executing any Dart file inside the source directory.
|
| + *
|
| + * Files in any directories that are not overridden by this mapping have
|
| + * their package: URI's resolved using the normal pubspec.yaml mechanism.
|
| + * If this field is absent, or the empty map is specified, that indicates
|
| + * that the normal pubspec.yaml mechanism should always be used.
|
| */
|
| - Future<SearchFindMemberReferencesResult> sendSearchFindMemberReferences(String name) {
|
| - var params = new SearchFindMemberReferencesParams(name).toJson();
|
| - return server.send("search.findMemberReferences", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new SearchFindMemberReferencesResult.fromJson(decoder, 'result', result);
|
| + Future sendAnalysisSetAnalysisRoots(
|
| + List<String> included, List<String> excluded,
|
| + {Map<String, String> packageRoots}) {
|
| + var params = new AnalysisSetAnalysisRootsParams(included, excluded,
|
| + packageRoots: packageRoots).toJson();
|
| + return server.send("analysis.setAnalysisRoots", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| });
|
| }
|
|
|
| /**
|
| - * Perform a search for declarations of top-level elements (classes,
|
| - * typedefs, getters, setters, functions and fields) whose name matches the
|
| - * given pattern.
|
| + * Subscribe for general services (that is, services that are not specific to
|
| + * individual files). All previous subscriptions are replaced by the given
|
| + * set of services.
|
| *
|
| - * An identifier is returned immediately, and individual results will be
|
| - * returned via the search.results notification as they become available.
|
| + * It is an error if any of the elements in the list are not valid services.
|
| + * If there is an error, then the current subscriptions will remain
|
| + * unchanged.
|
| *
|
| * Parameters
|
| *
|
| - * pattern ( String )
|
| + * subscriptions ( List<GeneralAnalysisService> )
|
| *
|
| - * The regular expression used to match the names of the declarations to be
|
| - * found.
|
| + * A list of the services being subscribed to.
|
| + */
|
| + Future sendAnalysisSetGeneralSubscriptions(
|
| + List<GeneralAnalysisService> subscriptions) {
|
| + var params =
|
| + new AnalysisSetGeneralSubscriptionsParams(subscriptions).toJson();
|
| + return server
|
| + .send("analysis.setGeneralSubscriptions", params)
|
| + .then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Set the priority files to the files in the given list. A priority file is
|
| + * a file that is given priority when scheduling which analysis work to do
|
| + * first. The list typically contains those files that are visible to the
|
| + * user and those for which analysis results will have the biggest impact on
|
| + * the user experience. The order of the files within the list is
|
| + * significant: the first file will be given higher priority than the second,
|
| + * the second higher priority than the third, and so on.
|
| *
|
| - * Returns
|
| + * Note that this request determines the set of requested priority files. The
|
| + * actual set of priority files is the intersection of the requested set of
|
| + * priority files with the set of files currently subject to analysis. (See
|
| + * analysis.setSubscriptions for a description of files that are subject to
|
| + * analysis.)
|
| *
|
| - * id ( SearchId )
|
| + * If a requested priority file is a directory it is ignored, but remains in
|
| + * the set of requested priority files so that if it later becomes a file it
|
| + * can be included in the set of actual priority files.
|
| *
|
| - * The identifier used to associate results with this search request.
|
| + * Parameters
|
| + *
|
| + * files ( List<FilePath> )
|
| + *
|
| + * The files that are to be a priority for analysis.
|
| */
|
| - Future<SearchFindTopLevelDeclarationsResult> sendSearchFindTopLevelDeclarations(String pattern) {
|
| - var params = new SearchFindTopLevelDeclarationsParams(pattern).toJson();
|
| - return server.send("search.findTopLevelDeclarations", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new SearchFindTopLevelDeclarationsResult.fromJson(decoder, 'result', result);
|
| + Future sendAnalysisSetPriorityFiles(List<String> files) {
|
| + var params = new AnalysisSetPriorityFilesParams(files).toJson();
|
| + return server.send("analysis.setPriorityFiles", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| });
|
| }
|
|
|
| /**
|
| - * Return the type hierarchy of the class declared or referenced at the given
|
| - * location.
|
| + * Subscribe for services that are specific to individual files. All previous
|
| + * subscriptions are replaced by the current set of subscriptions. If a given
|
| + * service is not included as a key in the map then no files will be
|
| + * subscribed to the service, exactly as if the service had been included in
|
| + * the map with an explicit empty list of files.
|
| *
|
| - * Parameters
|
| + * Note that this request determines the set of requested subscriptions. The
|
| + * actual set of subscriptions at any given time is the intersection of this
|
| + * set with the set of files currently subject to analysis. The files
|
| + * currently subject to analysis are the set of files contained within an
|
| + * actual analysis root but not excluded, plus all of the files transitively
|
| + * reachable from those files via import, export and part directives. (See
|
| + * analysis.setAnalysisRoots for an explanation of how the actual analysis
|
| + * roots are determined.) When the actual analysis roots change, the actual
|
| + * set of subscriptions is automatically updated, but the set of requested
|
| + * subscriptions is unchanged.
|
| *
|
| - * file ( FilePath )
|
| + * If a requested subscription is a directory it is ignored, but remains in
|
| + * the set of requested subscriptions so that if it later becomes a file it
|
| + * can be included in the set of actual subscriptions.
|
| *
|
| - * The file containing the declaration or reference to the type for which a
|
| - * hierarchy is being requested.
|
| + * It is an error if any of the keys in the map are not valid services. If
|
| + * there is an error, then the existing subscriptions will remain unchanged.
|
| *
|
| - * offset ( int )
|
| + * Parameters
|
| *
|
| - * The offset of the name of the type within the file.
|
| + * subscriptions ( Map<AnalysisService, List<FilePath>> )
|
| *
|
| - * superOnly ( optional bool )
|
| + * A table mapping services to a list of the files being subscribed to the
|
| + * service.
|
| + */
|
| + Future sendAnalysisSetSubscriptions(
|
| + Map<AnalysisService, List<String>> subscriptions) {
|
| + var params = new AnalysisSetSubscriptionsParams(subscriptions).toJson();
|
| + return server.send("analysis.setSubscriptions", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Update the content of one or more files. Files that were previously
|
| + * updated but not included in this update remain unchanged. This effectively
|
| + * represents an overlay of the filesystem. The files whose content is
|
| + * overridden are therefore seen by server as being files with the given
|
| + * content, even if the files do not exist on the filesystem or if the file
|
| + * path represents the path to a directory on the filesystem.
|
| *
|
| - * True if the client is only requesting superclasses and interfaces
|
| - * hierarchy.
|
| + * Parameters
|
| *
|
| - * Returns
|
| + * files ( Map<FilePath, AddContentOverlay | ChangeContentOverlay |
|
| + * RemoveContentOverlay> )
|
| *
|
| - * hierarchyItems ( optional List<TypeHierarchyItem> )
|
| + * A table mapping the files whose content has changed to a description of
|
| + * the content change.
|
| *
|
| - * A list of the types in the requested hierarchy. The first element of the
|
| - * list is the item representing the type for which the hierarchy was
|
| - * requested. The index of other elements of the list is unspecified, but
|
| - * correspond to the integers used to reference supertype and subtype items
|
| - * within the items.
|
| + * Returns
|
| + */
|
| + Future<AnalysisUpdateContentResult> sendAnalysisUpdateContent(
|
| + Map<String, dynamic> files) {
|
| + var params = new AnalysisUpdateContentParams(files).toJson();
|
| + return server.send("analysis.updateContent", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new AnalysisUpdateContentResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Update the options controlling analysis based on the given set of options.
|
| + * Any options that are not included in the analysis options will not be
|
| + * changed. If there are options in the analysis options that are not valid,
|
| + * they will be silently ignored.
|
| + *
|
| + * Parameters
|
| *
|
| - * This field will be absent if the code at the given file and offset does
|
| - * not represent a type, or if the file has not been sufficiently analyzed
|
| - * to allow a type hierarchy to be produced.
|
| + * options ( AnalysisOptions )
|
| + *
|
| + * The options that are to be used to control analysis.
|
| */
|
| - Future<SearchGetTypeHierarchyResult> sendSearchGetTypeHierarchy(String file, int offset, {bool superOnly}) {
|
| - var params = new SearchGetTypeHierarchyParams(file, offset, superOnly: superOnly).toJson();
|
| - return server.send("search.getTypeHierarchy", params)
|
| - .then((result) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new SearchGetTypeHierarchyResult.fromJson(decoder, 'result', result);
|
| + Future sendAnalysisUpdateOptions(AnalysisOptions options) {
|
| + var params = new AnalysisUpdateOptionsParams(options).toJson();
|
| + return server.send("analysis.updateOptions", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| });
|
| }
|
|
|
| /**
|
| - * Reports some or all of the results of performing a requested search.
|
| - * Unlike other notifications, this notification contains search results that
|
| - * should be added to any previously received search results associated with
|
| - * the same search id.
|
| + * Request that completion suggestions for the given offset in the given file
|
| + * be returned.
|
| *
|
| * Parameters
|
| *
|
| - * id ( SearchId )
|
| + * file ( FilePath )
|
| *
|
| - * The id associated with the search.
|
| + * The file containing the point at which suggestions are to be made.
|
| *
|
| - * results ( List<SearchResult> )
|
| + * offset ( int )
|
| *
|
| - * The search results being reported.
|
| + * The offset within the file at which suggestions are to be made.
|
| *
|
| - * isLast ( bool )
|
| + * Returns
|
| *
|
| - * True if this is that last set of results that will be returned for the
|
| - * indicated search.
|
| - */
|
| - Stream<SearchResultsParams> onSearchResults;
|
| -
|
| - /**
|
| - * Stream controller for [onSearchResults].
|
| + * id ( CompletionId )
|
| + *
|
| + * The identifier used to associate results with this completion request.
|
| */
|
| - StreamController<SearchResultsParams> _onSearchResults;
|
| + Future<CompletionGetSuggestionsResult> sendCompletionGetSuggestions(
|
| + String file, int offset) {
|
| + var params = new CompletionGetSuggestionsParams(file, offset).toJson();
|
| + return server.send("completion.getSuggestions", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new CompletionGetSuggestionsResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
|
|
| /**
|
| * Format the contents of a single file. The currently selected region of
|
| @@ -1207,10 +1159,12 @@ abstract class IntegrationTestMixin {
|
| *
|
| * The length of the selection after formatting the code.
|
| */
|
| - Future<EditFormatResult> sendEditFormat(String file, int selectionOffset, int selectionLength, {int lineLength}) {
|
| - var params = new EditFormatParams(file, selectionOffset, selectionLength, lineLength: lineLength).toJson();
|
| - return server.send("edit.format", params)
|
| - .then((result) {
|
| + Future<EditFormatResult> sendEditFormat(
|
| + String file, int selectionOffset, int selectionLength,
|
| + {int lineLength}) {
|
| + var params = new EditFormatParams(file, selectionOffset, selectionLength,
|
| + lineLength: lineLength).toJson();
|
| + return server.send("edit.format", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| return new EditFormatResult.fromJson(decoder, 'result', result);
|
| });
|
| @@ -1242,10 +1196,10 @@ abstract class IntegrationTestMixin {
|
| *
|
| * The assists that are available at the given location.
|
| */
|
| - Future<EditGetAssistsResult> sendEditGetAssists(String file, int offset, int length) {
|
| + Future<EditGetAssistsResult> sendEditGetAssists(
|
| + String file, int offset, int length) {
|
| var params = new EditGetAssistsParams(file, offset, length).toJson();
|
| - return server.send("edit.getAssists", params)
|
| - .then((result) {
|
| + return server.send("edit.getAssists", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| return new EditGetAssistsResult.fromJson(decoder, 'result', result);
|
| });
|
| @@ -1275,12 +1229,14 @@ abstract class IntegrationTestMixin {
|
| *
|
| * The kinds of refactorings that are valid for the given selection.
|
| */
|
| - Future<EditGetAvailableRefactoringsResult> sendEditGetAvailableRefactorings(String file, int offset, int length) {
|
| - var params = new EditGetAvailableRefactoringsParams(file, offset, length).toJson();
|
| - return server.send("edit.getAvailableRefactorings", params)
|
| - .then((result) {
|
| + Future<EditGetAvailableRefactoringsResult> sendEditGetAvailableRefactorings(
|
| + String file, int offset, int length) {
|
| + var params =
|
| + new EditGetAvailableRefactoringsParams(file, offset, length).toJson();
|
| + return server.send("edit.getAvailableRefactorings", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new EditGetAvailableRefactoringsResult.fromJson(decoder, 'result', result);
|
| + return new EditGetAvailableRefactoringsResult.fromJson(
|
| + decoder, 'result', result);
|
| });
|
| }
|
|
|
| @@ -1306,8 +1262,7 @@ abstract class IntegrationTestMixin {
|
| */
|
| Future<EditGetFixesResult> sendEditGetFixes(String file, int offset) {
|
| var params = new EditGetFixesParams(file, offset).toJson();
|
| - return server.send("edit.getFixes", params)
|
| - .then((result) {
|
| + return server.send("edit.getFixes", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| return new EditGetFixesResult.fromJson(decoder, 'result', result);
|
| });
|
| @@ -1394,16 +1349,52 @@ abstract class IntegrationTestMixin {
|
| * if the change field is omitted or if there are no potential edits for
|
| * the refactoring.
|
| */
|
| - Future<EditGetRefactoringResult> sendEditGetRefactoring(RefactoringKind kind, String file, int offset, int length, bool validateOnly, {RefactoringOptions options}) {
|
| - var params = new EditGetRefactoringParams(kind, file, offset, length, validateOnly, options: options).toJson();
|
| - return server.send("edit.getRefactoring", params)
|
| - .then((result) {
|
| + Future<EditGetRefactoringResult> sendEditGetRefactoring(RefactoringKind kind,
|
| + String file, int offset, int length, bool validateOnly,
|
| + {RefactoringOptions options}) {
|
| + var params = new EditGetRefactoringParams(
|
| + kind, file, offset, length, validateOnly,
|
| + options: options).toJson();
|
| + return server.send("edit.getRefactoring", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(kind);
|
| return new EditGetRefactoringResult.fromJson(decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| + * Organizes all of the directives - removes unused imports and sorts
|
| + * directives of the given Dart file according to the Dart Style Guide.
|
| + *
|
| + * If a request is made for a file that does not exist, does not belong to an
|
| + * analysis root or is not a Dart file, FILE_NOT_ANALYZED will be generated.
|
| + *
|
| + * If directives of the Dart file cannot be organized, for example because it
|
| + * has scan or parse errors, or by other reasons, ORGANIZE_DIRECTIVES_ERROR
|
| + * will be generated. The message will provide datails about the reason.
|
| + *
|
| + * Parameters
|
| + *
|
| + * file ( FilePath )
|
| + *
|
| + * The Dart file to organize directives in.
|
| + *
|
| + * Returns
|
| + *
|
| + * edit ( SourceFileEdit )
|
| + *
|
| + * The file edit that is to be applied to the given file to effect the
|
| + * organizing.
|
| + */
|
| + Future<EditOrganizeDirectivesResult> sendEditOrganizeDirectives(String file) {
|
| + var params = new EditOrganizeDirectivesParams(file).toJson();
|
| + return server.send("edit.organizeDirectives", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new EditOrganizeDirectivesResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
| +
|
| + /**
|
| * Sort all of the directives, unit and class members of the given Dart file.
|
| *
|
| * If a request is made for a file that does not exist, does not belong to an
|
| @@ -1428,148 +1419,344 @@ abstract class IntegrationTestMixin {
|
| */
|
| Future<EditSortMembersResult> sendEditSortMembers(String file) {
|
| var params = new EditSortMembersParams(file).toJson();
|
| - return server.send("edit.sortMembers", params)
|
| - .then((result) {
|
| + return server.send("edit.sortMembers", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| return new EditSortMembersResult.fromJson(decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| - * Organizes all of the directives - removes unused imports and sorts
|
| - * directives of the given Dart file according to the Dart Style Guide.
|
| + * Create an execution context for the executable file with the given path.
|
| + * The context that is created will persist until execution.deleteContext is
|
| + * used to delete it. Clients, therefore, are responsible for managing the
|
| + * lifetime of execution contexts.
|
| *
|
| - * If a request is made for a file that does not exist, does not belong to an
|
| - * analysis root or is not a Dart file, FILE_NOT_ANALYZED will be generated.
|
| + * Parameters
|
| *
|
| - * If directives of the Dart file cannot be organized, for example because it
|
| - * has scan or parse errors, or by other reasons, ORGANIZE_DIRECTIVES_ERROR
|
| - * will be generated. The message will provide datails about the reason.
|
| + * contextRoot ( FilePath )
|
| + *
|
| + * The path of the Dart or HTML file that will be launched, or the path of
|
| + * the directory containing the file.
|
| + *
|
| + * Returns
|
| + *
|
| + * id ( ExecutionContextId )
|
| + *
|
| + * The identifier used to refer to the execution context that was created.
|
| + */
|
| + Future<ExecutionCreateContextResult> sendExecutionCreateContext(
|
| + String contextRoot) {
|
| + var params = new ExecutionCreateContextParams(contextRoot).toJson();
|
| + return server.send("execution.createContext", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new ExecutionCreateContextResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Delete the execution context with the given identifier. The context id is
|
| + * no longer valid after this command. The server is allowed to re-use ids
|
| + * when they are no longer valid.
|
| + *
|
| + * Parameters
|
| + *
|
| + * id ( ExecutionContextId )
|
| + *
|
| + * The identifier of the execution context that is to be deleted.
|
| + */
|
| + Future sendExecutionDeleteContext(String id) {
|
| + var params = new ExecutionDeleteContextParams(id).toJson();
|
| + return server.send("execution.deleteContext", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Map a URI from the execution context to the file that it corresponds to,
|
| + * or map a file to the URI that it corresponds to in the execution context.
|
| + *
|
| + * Exactly one of the file and uri fields must be provided. If both fields
|
| + * are provided, then an error of type INVALID_PARAMETER will be generated.
|
| + * Similarly, if neither field is provided, then an error of type
|
| + * INVALID_PARAMETER will be generated.
|
| + *
|
| + * If the file field is provided and the value is not the path of a file
|
| + * (either the file does not exist or the path references something other
|
| + * than a file), then an error of type INVALID_PARAMETER will be generated.
|
| + *
|
| + * If the uri field is provided and the value is not a valid URI or if the
|
| + * URI references something that is not a file (either a file that does not
|
| + * exist or something other than a file), then an error of type
|
| + * INVALID_PARAMETER will be generated.
|
| + *
|
| + * If the contextRoot used to create the execution context does not exist,
|
| + * then an error of type INVALID_EXECUTION_CONTEXT will be generated.
|
| + *
|
| + * Parameters
|
| + *
|
| + * id ( ExecutionContextId )
|
| + *
|
| + * The identifier of the execution context in which the URI is to be
|
| + * mapped.
|
| + *
|
| + * file ( optional FilePath )
|
| + *
|
| + * The path of the file to be mapped into a URI.
|
| + *
|
| + * uri ( optional String )
|
| + *
|
| + * The URI to be mapped into a file path.
|
| + *
|
| + * Returns
|
| + *
|
| + * file ( optional FilePath )
|
| + *
|
| + * The file to which the URI was mapped. This field is omitted if the uri
|
| + * field was not given in the request.
|
| + *
|
| + * uri ( optional String )
|
| + *
|
| + * The URI to which the file path was mapped. This field is omitted if the
|
| + * file field was not given in the request.
|
| + */
|
| + Future<ExecutionMapUriResult> sendExecutionMapUri(String id,
|
| + {String file, String uri}) {
|
| + var params = new ExecutionMapUriParams(id, file: file, uri: uri).toJson();
|
| + return server.send("execution.mapUri", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new ExecutionMapUriResult.fromJson(decoder, 'result', result);
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Subscribe for services. All previous subscriptions are replaced by the
|
| + * given set of services.
|
| + *
|
| + * It is an error if any of the elements in the list are not valid services.
|
| + * If there is an error, then the current subscriptions will remain
|
| + * unchanged.
|
| + *
|
| + * Parameters
|
| + *
|
| + * subscriptions ( List<ExecutionService> )
|
| + *
|
| + * A list of the services being subscribed to.
|
| + */
|
| + Future sendExecutionSetSubscriptions(List<ExecutionService> subscriptions) {
|
| + var params = new ExecutionSetSubscriptionsParams(subscriptions).toJson();
|
| + return server.send("execution.setSubscriptions", params).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Perform a search for references to the element defined or referenced at
|
| + * the given offset in the given file.
|
| + *
|
| + * An identifier is returned immediately, and individual results will be
|
| + * returned via the search.results notification as they become available.
|
| *
|
| * Parameters
|
| *
|
| * file ( FilePath )
|
| *
|
| - * The Dart file to organize directives in.
|
| + * The file containing the declaration of or reference to the element used
|
| + * to define the search.
|
| + *
|
| + * offset ( int )
|
| + *
|
| + * The offset within the file of the declaration of or reference to the
|
| + * element.
|
| + *
|
| + * includePotential ( bool )
|
| + *
|
| + * True if potential matches are to be included in the results.
|
| *
|
| * Returns
|
| *
|
| - * edit ( SourceFileEdit )
|
| + * id ( optional SearchId )
|
| + *
|
| + * The identifier used to associate results with this search request.
|
| + *
|
| + * If no element was found at the given location, this field will be
|
| + * absent, and no results will be reported via the search.results
|
| + * notification.
|
| + *
|
| + * element ( optional Element )
|
| + *
|
| + * The element referenced or defined at the given offset and whose
|
| + * references will be returned in the search results.
|
| + *
|
| + * If no element was found at the given location, this field will be
|
| + * absent.
|
| + */
|
| + Future<SearchFindElementReferencesResult> sendSearchFindElementReferences(
|
| + String file, int offset, bool includePotential) {
|
| + var params = new SearchFindElementReferencesParams(
|
| + file, offset, includePotential).toJson();
|
| + return server.send("search.findElementReferences", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new SearchFindElementReferencesResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Perform a search for declarations of members whose name is equal to the
|
| + * given name.
|
| + *
|
| + * An identifier is returned immediately, and individual results will be
|
| + * returned via the search.results notification as they become available.
|
| + *
|
| + * Parameters
|
| + *
|
| + * name ( String )
|
| + *
|
| + * The name of the declarations to be found.
|
| + *
|
| + * Returns
|
| + *
|
| + * id ( SearchId )
|
| *
|
| - * The file edit that is to be applied to the given file to effect the
|
| - * organizing.
|
| + * The identifier used to associate results with this search request.
|
| */
|
| - Future<EditOrganizeDirectivesResult> sendEditOrganizeDirectives(String file) {
|
| - var params = new EditOrganizeDirectivesParams(file).toJson();
|
| - return server.send("edit.organizeDirectives", params)
|
| - .then((result) {
|
| + Future<SearchFindMemberDeclarationsResult> sendSearchFindMemberDeclarations(
|
| + String name) {
|
| + var params = new SearchFindMemberDeclarationsParams(name).toJson();
|
| + return server.send("search.findMemberDeclarations", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new EditOrganizeDirectivesResult.fromJson(decoder, 'result', result);
|
| + return new SearchFindMemberDeclarationsResult.fromJson(
|
| + decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| - * Create an execution context for the executable file with the given path.
|
| - * The context that is created will persist until execution.deleteContext is
|
| - * used to delete it. Clients, therefore, are responsible for managing the
|
| - * lifetime of execution contexts.
|
| + * Perform a search for references to members whose name is equal to the
|
| + * given name. This search does not check to see that there is a member
|
| + * defined with the given name, so it is able to find references to undefined
|
| + * members as well.
|
| + *
|
| + * An identifier is returned immediately, and individual results will be
|
| + * returned via the search.results notification as they become available.
|
| *
|
| * Parameters
|
| *
|
| - * contextRoot ( FilePath )
|
| + * name ( String )
|
| *
|
| - * The path of the Dart or HTML file that will be launched, or the path of
|
| - * the directory containing the file.
|
| + * The name of the references to be found.
|
| *
|
| * Returns
|
| *
|
| - * id ( ExecutionContextId )
|
| + * id ( SearchId )
|
| *
|
| - * The identifier used to refer to the execution context that was created.
|
| + * The identifier used to associate results with this search request.
|
| */
|
| - Future<ExecutionCreateContextResult> sendExecutionCreateContext(String contextRoot) {
|
| - var params = new ExecutionCreateContextParams(contextRoot).toJson();
|
| - return server.send("execution.createContext", params)
|
| - .then((result) {
|
| + Future<SearchFindMemberReferencesResult> sendSearchFindMemberReferences(
|
| + String name) {
|
| + var params = new SearchFindMemberReferencesParams(name).toJson();
|
| + return server.send("search.findMemberReferences", params).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new ExecutionCreateContextResult.fromJson(decoder, 'result', result);
|
| + return new SearchFindMemberReferencesResult.fromJson(
|
| + decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| - * Delete the execution context with the given identifier. The context id is
|
| - * no longer valid after this command. The server is allowed to re-use ids
|
| - * when they are no longer valid.
|
| + * Perform a search for declarations of top-level elements (classes,
|
| + * typedefs, getters, setters, functions and fields) whose name matches the
|
| + * given pattern.
|
| + *
|
| + * An identifier is returned immediately, and individual results will be
|
| + * returned via the search.results notification as they become available.
|
| *
|
| * Parameters
|
| *
|
| - * id ( ExecutionContextId )
|
| + * pattern ( String )
|
| *
|
| - * The identifier of the execution context that is to be deleted.
|
| + * The regular expression used to match the names of the declarations to be
|
| + * found.
|
| + *
|
| + * Returns
|
| + *
|
| + * id ( SearchId )
|
| + *
|
| + * The identifier used to associate results with this search request.
|
| */
|
| - Future sendExecutionDeleteContext(String id) {
|
| - var params = new ExecutionDeleteContextParams(id).toJson();
|
| - return server.send("execution.deleteContext", params)
|
| + Future<
|
| + SearchFindTopLevelDeclarationsResult> sendSearchFindTopLevelDeclarations(
|
| + String pattern) {
|
| + var params = new SearchFindTopLevelDeclarationsParams(pattern).toJson();
|
| + return server
|
| + .send("search.findTopLevelDeclarations", params)
|
| .then((result) {
|
| - expect(result, isNull);
|
| - return null;
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new SearchFindTopLevelDeclarationsResult.fromJson(
|
| + decoder, 'result', result);
|
| });
|
| }
|
|
|
| /**
|
| - * Map a URI from the execution context to the file that it corresponds to,
|
| - * or map a file to the URI that it corresponds to in the execution context.
|
| + * Return the type hierarchy of the class declared or referenced at the given
|
| + * location.
|
| *
|
| - * Exactly one of the file and uri fields must be provided. If both fields
|
| - * are provided, then an error of type INVALID_PARAMETER will be generated.
|
| - * Similarly, if neither field is provided, then an error of type
|
| - * INVALID_PARAMETER will be generated.
|
| + * Parameters
|
| *
|
| - * If the file field is provided and the value is not the path of a file
|
| - * (either the file does not exist or the path references something other
|
| - * than a file), then an error of type INVALID_PARAMETER will be generated.
|
| + * file ( FilePath )
|
| *
|
| - * If the uri field is provided and the value is not a valid URI or if the
|
| - * URI references something that is not a file (either a file that does not
|
| - * exist or something other than a file), then an error of type
|
| - * INVALID_PARAMETER will be generated.
|
| + * The file containing the declaration or reference to the type for which a
|
| + * hierarchy is being requested.
|
| *
|
| - * If the contextRoot used to create the execution context does not exist,
|
| - * then an error of type INVALID_EXECUTION_CONTEXT will be generated.
|
| + * offset ( int )
|
| *
|
| - * Parameters
|
| + * The offset of the name of the type within the file.
|
| *
|
| - * id ( ExecutionContextId )
|
| + * superOnly ( optional bool )
|
| *
|
| - * The identifier of the execution context in which the URI is to be
|
| - * mapped.
|
| + * True if the client is only requesting superclasses and interfaces
|
| + * hierarchy.
|
| *
|
| - * file ( optional FilePath )
|
| + * Returns
|
| *
|
| - * The path of the file to be mapped into a URI.
|
| + * hierarchyItems ( optional List<TypeHierarchyItem> )
|
| *
|
| - * uri ( optional String )
|
| + * A list of the types in the requested hierarchy. The first element of the
|
| + * list is the item representing the type for which the hierarchy was
|
| + * requested. The index of other elements of the list is unspecified, but
|
| + * correspond to the integers used to reference supertype and subtype items
|
| + * within the items.
|
| *
|
| - * The URI to be mapped into a file path.
|
| + * This field will be absent if the code at the given file and offset does
|
| + * not represent a type, or if the file has not been sufficiently analyzed
|
| + * to allow a type hierarchy to be produced.
|
| + */
|
| + Future<SearchGetTypeHierarchyResult> sendSearchGetTypeHierarchy(
|
| + String file, int offset,
|
| + {bool superOnly}) {
|
| + var params = new SearchGetTypeHierarchyParams(file, offset,
|
| + superOnly: superOnly).toJson();
|
| + return server.send("search.getTypeHierarchy", params).then((result) {
|
| + ResponseDecoder decoder = new ResponseDecoder(null);
|
| + return new SearchGetTypeHierarchyResult.fromJson(
|
| + decoder, 'result', result);
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Return the version number of the analysis server.
|
| *
|
| * Returns
|
| *
|
| - * file ( optional FilePath )
|
| - *
|
| - * The file to which the URI was mapped. This field is omitted if the uri
|
| - * field was not given in the request.
|
| - *
|
| - * uri ( optional String )
|
| + * version ( String )
|
| *
|
| - * The URI to which the file path was mapped. This field is omitted if the
|
| - * file field was not given in the request.
|
| + * The version number of the analysis server.
|
| */
|
| - Future<ExecutionMapUriResult> sendExecutionMapUri(String id, {String file, String uri}) {
|
| - var params = new ExecutionMapUriParams(id, file: file, uri: uri).toJson();
|
| - return server.send("execution.mapUri", params)
|
| - .then((result) {
|
| + Future<ServerGetVersionResult> sendServerGetVersion() {
|
| + return server.send("server.getVersion", null).then((result) {
|
| ResponseDecoder decoder = new ResponseDecoder(null);
|
| - return new ExecutionMapUriResult.fromJson(decoder, 'result', result);
|
| + return new ServerGetVersionResult.fromJson(decoder, 'result', result);
|
| });
|
| }
|
|
|
| @@ -1583,169 +1770,29 @@ abstract class IntegrationTestMixin {
|
| *
|
| * Parameters
|
| *
|
| - * subscriptions ( List<ExecutionService> )
|
| + * subscriptions ( List<ServerService> )
|
| *
|
| * A list of the services being subscribed to.
|
| */
|
| - Future sendExecutionSetSubscriptions(List<ExecutionService> subscriptions) {
|
| - var params = new ExecutionSetSubscriptionsParams(subscriptions).toJson();
|
| - return server.send("execution.setSubscriptions", params)
|
| - .then((result) {
|
| + Future sendServerSetSubscriptions(List<ServerService> subscriptions) {
|
| + var params = new ServerSetSubscriptionsParams(subscriptions).toJson();
|
| + return server.send("server.setSubscriptions", params).then((result) {
|
| expect(result, isNull);
|
| return null;
|
| });
|
| }
|
|
|
| /**
|
| - * Reports information needed to allow a single file to be launched.
|
| - *
|
| - * This notification is not subscribed to by default. Clients can subscribe
|
| - * by including the value "LAUNCH_DATA" in the list of services passed in an
|
| - * execution.setSubscriptions request.
|
| - *
|
| - * Parameters
|
| - *
|
| - * file ( FilePath )
|
| - *
|
| - * The file for which launch data is being provided. This will either be a
|
| - * Dart library or an HTML file.
|
| - *
|
| - * kind ( optional ExecutableKind )
|
| - *
|
| - * The kind of the executable file. This field is omitted if the file is
|
| - * not a Dart file.
|
| - *
|
| - * referencedFiles ( optional List<FilePath> )
|
| - *
|
| - * A list of the Dart files that are referenced by the file. This field is
|
| - * omitted if the file is not an HTML file.
|
| - */
|
| - Stream<ExecutionLaunchDataParams> onExecutionLaunchData;
|
| -
|
| - /**
|
| - * Stream controller for [onExecutionLaunchData].
|
| - */
|
| - StreamController<ExecutionLaunchDataParams> _onExecutionLaunchData;
|
| -
|
| - /**
|
| - * Initialize the fields in InttestMixin, and ensure that notifications will
|
| - * be handled.
|
| - */
|
| - void initializeInttestMixin() {
|
| - _onServerConnected = new StreamController<ServerConnectedParams>(sync: true);
|
| - onServerConnected = _onServerConnected.stream.asBroadcastStream();
|
| - _onServerError = new StreamController<ServerErrorParams>(sync: true);
|
| - onServerError = _onServerError.stream.asBroadcastStream();
|
| - _onServerStatus = new StreamController<ServerStatusParams>(sync: true);
|
| - onServerStatus = _onServerStatus.stream.asBroadcastStream();
|
| - _onAnalysisAnalyzedFiles = new StreamController<AnalysisAnalyzedFilesParams>(sync: true);
|
| - onAnalysisAnalyzedFiles = _onAnalysisAnalyzedFiles.stream.asBroadcastStream();
|
| - _onAnalysisErrors = new StreamController<AnalysisErrorsParams>(sync: true);
|
| - onAnalysisErrors = _onAnalysisErrors.stream.asBroadcastStream();
|
| - _onAnalysisFlushResults = new StreamController<AnalysisFlushResultsParams>(sync: true);
|
| - onAnalysisFlushResults = _onAnalysisFlushResults.stream.asBroadcastStream();
|
| - _onAnalysisFolding = new StreamController<AnalysisFoldingParams>(sync: true);
|
| - onAnalysisFolding = _onAnalysisFolding.stream.asBroadcastStream();
|
| - _onAnalysisHighlights = new StreamController<AnalysisHighlightsParams>(sync: true);
|
| - onAnalysisHighlights = _onAnalysisHighlights.stream.asBroadcastStream();
|
| - _onAnalysisImplemented = new StreamController<AnalysisImplementedParams>(sync: true);
|
| - onAnalysisImplemented = _onAnalysisImplemented.stream.asBroadcastStream();
|
| - _onAnalysisInvalidate = new StreamController<AnalysisInvalidateParams>(sync: true);
|
| - onAnalysisInvalidate = _onAnalysisInvalidate.stream.asBroadcastStream();
|
| - _onAnalysisNavigation = new StreamController<AnalysisNavigationParams>(sync: true);
|
| - onAnalysisNavigation = _onAnalysisNavigation.stream.asBroadcastStream();
|
| - _onAnalysisOccurrences = new StreamController<AnalysisOccurrencesParams>(sync: true);
|
| - onAnalysisOccurrences = _onAnalysisOccurrences.stream.asBroadcastStream();
|
| - _onAnalysisOutline = new StreamController<AnalysisOutlineParams>(sync: true);
|
| - onAnalysisOutline = _onAnalysisOutline.stream.asBroadcastStream();
|
| - _onAnalysisOverrides = new StreamController<AnalysisOverridesParams>(sync: true);
|
| - onAnalysisOverrides = _onAnalysisOverrides.stream.asBroadcastStream();
|
| - _onCompletionResults = new StreamController<CompletionResultsParams>(sync: true);
|
| - onCompletionResults = _onCompletionResults.stream.asBroadcastStream();
|
| - _onSearchResults = new StreamController<SearchResultsParams>(sync: true);
|
| - onSearchResults = _onSearchResults.stream.asBroadcastStream();
|
| - _onExecutionLaunchData = new StreamController<ExecutionLaunchDataParams>(sync: true);
|
| - onExecutionLaunchData = _onExecutionLaunchData.stream.asBroadcastStream();
|
| - }
|
| -
|
| - /**
|
| - * Dispatch the notification named [event], and containing parameters
|
| - * [params], to the appropriate stream.
|
| + * Cleanly shutdown the analysis server. Requests that are received after
|
| + * this request will not be processed. Requests that were received before
|
| + * this request, but for which a response has not yet been sent, will not be
|
| + * responded to. No further responses or notifications will be sent after the
|
| + * response to this request has been sent.
|
| */
|
| - void dispatchNotification(String event, params) {
|
| - ResponseDecoder decoder = new ResponseDecoder(null);
|
| - switch (event) {
|
| - case "server.connected":
|
| - expect(params, isServerConnectedParams);
|
| - _onServerConnected.add(new ServerConnectedParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "server.error":
|
| - expect(params, isServerErrorParams);
|
| - _onServerError.add(new ServerErrorParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "server.status":
|
| - expect(params, isServerStatusParams);
|
| - _onServerStatus.add(new ServerStatusParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.analyzedFiles":
|
| - expect(params, isAnalysisAnalyzedFilesParams);
|
| - _onAnalysisAnalyzedFiles.add(new AnalysisAnalyzedFilesParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.errors":
|
| - expect(params, isAnalysisErrorsParams);
|
| - _onAnalysisErrors.add(new AnalysisErrorsParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.flushResults":
|
| - expect(params, isAnalysisFlushResultsParams);
|
| - _onAnalysisFlushResults.add(new AnalysisFlushResultsParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.folding":
|
| - expect(params, isAnalysisFoldingParams);
|
| - _onAnalysisFolding.add(new AnalysisFoldingParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.highlights":
|
| - expect(params, isAnalysisHighlightsParams);
|
| - _onAnalysisHighlights.add(new AnalysisHighlightsParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.implemented":
|
| - expect(params, isAnalysisImplementedParams);
|
| - _onAnalysisImplemented.add(new AnalysisImplementedParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.invalidate":
|
| - expect(params, isAnalysisInvalidateParams);
|
| - _onAnalysisInvalidate.add(new AnalysisInvalidateParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.navigation":
|
| - expect(params, isAnalysisNavigationParams);
|
| - _onAnalysisNavigation.add(new AnalysisNavigationParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.occurrences":
|
| - expect(params, isAnalysisOccurrencesParams);
|
| - _onAnalysisOccurrences.add(new AnalysisOccurrencesParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.outline":
|
| - expect(params, isAnalysisOutlineParams);
|
| - _onAnalysisOutline.add(new AnalysisOutlineParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "analysis.overrides":
|
| - expect(params, isAnalysisOverridesParams);
|
| - _onAnalysisOverrides.add(new AnalysisOverridesParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "completion.results":
|
| - expect(params, isCompletionResultsParams);
|
| - _onCompletionResults.add(new CompletionResultsParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "search.results":
|
| - expect(params, isSearchResultsParams);
|
| - _onSearchResults.add(new SearchResultsParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - case "execution.launchData":
|
| - expect(params, isExecutionLaunchDataParams);
|
| - _onExecutionLaunchData.add(new ExecutionLaunchDataParams.fromJson(decoder, 'params', params));
|
| - break;
|
| - default:
|
| - fail('Unexpected notification: $event');
|
| - break;
|
| - }
|
| + Future sendServerShutdown() {
|
| + return server.send("server.shutdown", null).then((result) {
|
| + expect(result, isNull);
|
| + return null;
|
| + });
|
| }
|
| }
|
|
|