| Index: pkg/analysis_server/bin/fuzz/protocol.dart
|
| diff --git a/pkg/analysis_server/lib/src/protocol.dart b/pkg/analysis_server/bin/fuzz/protocol.dart
|
| similarity index 64%
|
| copy from pkg/analysis_server/lib/src/protocol.dart
|
| copy to pkg/analysis_server/bin/fuzz/protocol.dart
|
| index 65c4d0e27a82bc5fd2fc6066104fce4040f86ef3..b41b28eba62d26fac81a5077ebf871dfdf384131 100644
|
| --- a/pkg/analysis_server/lib/src/protocol.dart
|
| +++ b/pkg/analysis_server/bin/fuzz/protocol.dart
|
| @@ -7,19 +7,7 @@ library protocol;
|
| import 'dart:collection';
|
| import 'dart:convert';
|
|
|
| -import 'package:analysis_server/src/computer/element.dart' show
|
| - elementFromEngine;
|
| -import 'package:analysis_server/src/search/search_result.dart' show
|
| - searchResultFromMatch;
|
| -import 'package:analysis_server/src/services/correction/fix.dart' show Fix;
|
| -import 'package:analysis_server/src/services/json.dart';
|
| -import 'package:analysis_server/src/services/search/search_engine.dart' as
|
| - engine;
|
| -import 'package:analyzer/src/generated/ast.dart' as engine;
|
| -import 'package:analyzer/src/generated/element.dart' as engine;
|
| -import 'package:analyzer/src/generated/engine.dart' as engine;
|
| -import 'package:analyzer/src/generated/error.dart' as engine;
|
| -import 'package:analyzer/src/generated/source.dart' as engine;
|
| +import 'json.dart';
|
|
|
| part 'generated_protocol.dart';
|
|
|
| @@ -69,7 +57,7 @@ void _addEditForSource(SourceFileEdit sourceFileEdit, SourceEdit sourceEdit) {
|
| * Adds [edit] to the [FileEdit] for the given [file].
|
| */
|
| void _addEditToSourceChange(SourceChange change, String file, int fileStamp,
|
| - SourceEdit edit) {
|
| + SourceEdit edit) {
|
| SourceFileEdit fileEdit = change.getFileEdit(file);
|
| if (fileEdit == null) {
|
| fileEdit = new SourceFileEdit(file, fileStamp);
|
| @@ -78,70 +66,6 @@ void _addEditToSourceChange(SourceChange change, String file, int fileStamp,
|
| fileEdit.add(edit);
|
| }
|
|
|
| -
|
| -void _addElementEditToSourceChange(SourceChange change, engine.Element element,
|
| - SourceEdit edit) {
|
| - engine.AnalysisContext context = element.context;
|
| - engine.Source source = element.source;
|
| - _addSourceEditToSourceChange(change, context, source, edit);
|
| -}
|
| -
|
| -
|
| -void _addSourceEditToSourceChange(SourceChange change,
|
| - engine.AnalysisContext context, engine.Source source, SourceEdit edit) {
|
| - String file = source.fullName;
|
| - int fileStamp = context.getModificationStamp(source);
|
| - change.addEdit(file, fileStamp, edit);
|
| -}
|
| -
|
| -/**
|
| - * Create an AnalysisError based on error information from the analyzer
|
| - * engine. Access via AnalysisError.fromEngine().
|
| - */
|
| -AnalysisError _analysisErrorFromEngine(engine.LineInfo lineInfo,
|
| - engine.AnalysisError error) {
|
| - engine.ErrorCode errorCode = error.errorCode;
|
| - // prepare location
|
| - Location location;
|
| - {
|
| - String file = error.source.fullName;
|
| - int offset = error.offset;
|
| - int length = error.length;
|
| - int startLine = -1;
|
| - int startColumn = -1;
|
| - if (lineInfo != null) {
|
| - engine.LineInfo_Location lineLocation = lineInfo.getLocation(offset);
|
| - if (lineLocation != null) {
|
| - startLine = lineLocation.lineNumber;
|
| - startColumn = lineLocation.columnNumber;
|
| - }
|
| - }
|
| - location = new Location(file, offset, length, startLine, startColumn);
|
| - }
|
| - // done
|
| - var severity = new AnalysisErrorSeverity(errorCode.errorSeverity.name);
|
| - var type = new AnalysisErrorType(errorCode.type.name);
|
| - String message = error.message;
|
| - String correction = error.correction;
|
| - return new AnalysisError(
|
| - severity,
|
| - type,
|
| - location,
|
| - message,
|
| - correction: correction);
|
| -}
|
| -
|
| -/**
|
| - * Returns a list of AnalysisErrors correponding to the given list of Engine
|
| - * errors. Access via AnalysisError.listFromEngine().
|
| - */
|
| -List<AnalysisError> _analysisErrorListFromEngine(engine.LineInfo lineInfo,
|
| - List<engine.AnalysisError> errors) {
|
| - return errors.map((engine.AnalysisError error) {
|
| - return new AnalysisError.fromEngine(lineInfo, error);
|
| - }).toList();
|
| -}
|
| -
|
| /**
|
| * Get the result of applying the edit to the given [code]. Access via
|
| * SourceEdit.apply().
|
| @@ -168,105 +92,6 @@ String _applySequence(String code, Iterable<SourceEdit> edits) {
|
| }
|
|
|
| /**
|
| - * Map an element kind from the analyzer engine to a [CompletionSuggestionKind].
|
| - */
|
| -CompletionSuggestionKind _completionSuggestionKindFromElementKind(engine.ElementKind kind) {
|
| - // ElementKind.ANGULAR_FORMATTER,
|
| - // ElementKind.ANGULAR_COMPONENT,
|
| - // ElementKind.ANGULAR_CONTROLLER,
|
| - // ElementKind.ANGULAR_DIRECTIVE,
|
| - // ElementKind.ANGULAR_PROPERTY,
|
| - // ElementKind.ANGULAR_SCOPE_PROPERTY,
|
| - // ElementKind.ANGULAR_SELECTOR,
|
| - // ElementKind.ANGULAR_VIEW,
|
| - if (kind == engine.ElementKind.CLASS) return CompletionSuggestionKind.CLASS;
|
| - // ElementKind.COMPILATION_UNIT,
|
| - if (kind == engine.ElementKind.CONSTRUCTOR) return CompletionSuggestionKind.CONSTRUCTOR;
|
| - // ElementKind.DYNAMIC,
|
| - // ElementKind.EMBEDDED_HTML_SCRIPT,
|
| - // ElementKind.ERROR,
|
| - // ElementKind.EXPORT,
|
| - // ElementKind.EXTERNAL_HTML_SCRIPT,
|
| - if (kind == engine.ElementKind.FIELD) return CompletionSuggestionKind.FIELD;
|
| - if (kind == engine.ElementKind.FUNCTION) return CompletionSuggestionKind.FUNCTION;
|
| - if (kind == engine.ElementKind.FUNCTION_TYPE_ALIAS) return CompletionSuggestionKind.FUNCTION_TYPE_ALIAS;
|
| - if (kind == engine.ElementKind.GETTER) return CompletionSuggestionKind.GETTER;
|
| - // ElementKind.HTML,
|
| - if (kind == engine.ElementKind.IMPORT) return CompletionSuggestionKind.IMPORT;
|
| - // ElementKind.LABEL,
|
| - // ElementKind.LIBRARY,
|
| - if (kind == engine.ElementKind.LOCAL_VARIABLE) return CompletionSuggestionKind.LOCAL_VARIABLE;
|
| - if (kind == engine.ElementKind.METHOD) return CompletionSuggestionKind.METHOD;
|
| - // ElementKind.NAME,
|
| - if (kind == engine.ElementKind.PARAMETER) return CompletionSuggestionKind.PARAMETER;
|
| - // ElementKind.POLYMER_ATTRIBUTE,
|
| - // ElementKind.POLYMER_TAG_DART,
|
| - // ElementKind.POLYMER_TAG_HTML,
|
| - // ElementKind.PREFIX,
|
| - if (kind == engine.ElementKind.SETTER) return CompletionSuggestionKind.SETTER;
|
| - if (kind == engine.ElementKind.TOP_LEVEL_VARIABLE) return CompletionSuggestionKind.TOP_LEVEL_VARIABLE;
|
| - // ElementKind.TYPE_PARAMETER,
|
| - // ElementKind.UNIVERSE
|
| - throw new ArgumentError('Unknown CompletionSuggestionKind for: $kind');
|
| -}
|
| -
|
| -/**
|
| - * Create an ElementKind based on a value from the analyzer engine. Access
|
| - * this function via new ElementKind.fromEngine().
|
| - */
|
| -ElementKind _elementKindFromEngine(engine.ElementKind kind) {
|
| - if (kind == engine.ElementKind.CLASS) {
|
| - return ElementKind.CLASS;
|
| - }
|
| - if (kind == engine.ElementKind.COMPILATION_UNIT) {
|
| - return ElementKind.COMPILATION_UNIT;
|
| - }
|
| - if (kind == engine.ElementKind.CONSTRUCTOR) {
|
| - return ElementKind.CONSTRUCTOR;
|
| - }
|
| - if (kind == engine.ElementKind.FIELD) {
|
| - return ElementKind.FIELD;
|
| - }
|
| - if (kind == engine.ElementKind.FUNCTION) {
|
| - return ElementKind.FUNCTION;
|
| - }
|
| - if (kind == engine.ElementKind.FUNCTION_TYPE_ALIAS) {
|
| - return ElementKind.FUNCTION_TYPE_ALIAS;
|
| - }
|
| - if (kind == engine.ElementKind.GETTER) {
|
| - return ElementKind.GETTER;
|
| - }
|
| - if (kind == engine.ElementKind.LABEL) {
|
| - return ElementKind.LABEL;
|
| - }
|
| - if (kind == engine.ElementKind.LIBRARY) {
|
| - return ElementKind.LIBRARY;
|
| - }
|
| - if (kind == engine.ElementKind.LOCAL_VARIABLE) {
|
| - return ElementKind.LOCAL_VARIABLE;
|
| - }
|
| - if (kind == engine.ElementKind.METHOD) {
|
| - return ElementKind.METHOD;
|
| - }
|
| - if (kind == engine.ElementKind.PARAMETER) {
|
| - return ElementKind.PARAMETER;
|
| - }
|
| - if (kind == engine.ElementKind.PREFIX) {
|
| - return ElementKind.PREFIX;
|
| - }
|
| - if (kind == engine.ElementKind.SETTER) {
|
| - return ElementKind.SETTER;
|
| - }
|
| - if (kind == engine.ElementKind.TOP_LEVEL_VARIABLE) {
|
| - return ElementKind.TOP_LEVEL_VARIABLE;
|
| - }
|
| - if (kind == engine.ElementKind.TYPE_PARAMETER) {
|
| - return ElementKind.TYPE_PARAMETER;
|
| - }
|
| - return ElementKind.UNKNOWN;
|
| -}
|
| -
|
| -/**
|
| * Returns the [FileEdit] for the given [file], maybe `null`.
|
| */
|
| SourceFileEdit _getChangeFileEdit(SourceChange change, String file) {
|
| @@ -295,85 +120,6 @@ bool _listEqual(List listA, List listB, bool itemEqual(a, b)) {
|
| }
|
|
|
| /**
|
| - * Creates a new [Location].
|
| - */
|
| -Location _locationForArgs(engine.AnalysisContext context, engine.Source source,
|
| - engine.SourceRange range) {
|
| - int startLine = 0;
|
| - int startColumn = 0;
|
| - {
|
| - engine.LineInfo lineInfo = context.getLineInfo(source);
|
| - if (lineInfo != null) {
|
| - engine.LineInfo_Location offsetLocation =
|
| - lineInfo.getLocation(range.offset);
|
| - startLine = offsetLocation.lineNumber;
|
| - startColumn = offsetLocation.columnNumber;
|
| - }
|
| - }
|
| - return new Location(
|
| - source.fullName,
|
| - range.offset,
|
| - range.length,
|
| - startLine,
|
| - startColumn);
|
| -}
|
| -
|
| -/**
|
| - * Creates a new [Location] for the given [engine.Element].
|
| - */
|
| -Location _locationFromElement(engine.Element element) {
|
| - engine.AnalysisContext context = element.context;
|
| - engine.Source source = element.source;
|
| - if (context == null || source == null) {
|
| - return null;
|
| - }
|
| - String name = element.displayName;
|
| - int offset = element.nameOffset;
|
| - int length = name != null ? name.length : 0;
|
| - if (element is engine.CompilationUnitElement) {
|
| - offset = 0;
|
| - length = 0;
|
| - }
|
| - engine.SourceRange range = new engine.SourceRange(offset, length);
|
| - return _locationForArgs(context, source, range);
|
| -}
|
| -
|
| -/**
|
| - * Creates a new [Location] for the given [engine.SearchMatch].
|
| - */
|
| -Location _locationFromMatch(engine.SearchMatch match) {
|
| - engine.Element enclosingElement = match.element;
|
| - return _locationForArgs(
|
| - enclosingElement.context,
|
| - enclosingElement.source,
|
| - match.sourceRange);
|
| -}
|
| -
|
| -/**
|
| - * Creates a new [Location] for the given [engine.AstNode].
|
| - */
|
| -Location _locationFromNode(engine.AstNode node) {
|
| - engine.CompilationUnit unit =
|
| - node.getAncestor((node) => node is engine.CompilationUnit);
|
| - engine.CompilationUnitElement unitElement = unit.element;
|
| - engine.AnalysisContext context = unitElement.context;
|
| - engine.Source source = unitElement.source;
|
| - engine.SourceRange range = new engine.SourceRange(node.offset, node.length);
|
| - return _locationForArgs(context, source, range);
|
| -}
|
| -
|
| -/**
|
| - * Creates a new [Location] for the given [engine.CompilationUnit].
|
| - */
|
| -Location _locationFromUnit(engine.CompilationUnit unit,
|
| - engine.SourceRange range) {
|
| - engine.CompilationUnitElement unitElement = unit.element;
|
| - engine.AnalysisContext context = unitElement.context;
|
| - engine.Source source = unitElement.source;
|
| - return _locationForArgs(context, source, range);
|
| -}
|
| -
|
| -/**
|
| * Compare the maps [mapA] and [mapB], using [valueEqual] to compare map
|
| * values.
|
| */
|
| @@ -416,16 +162,6 @@ RefactoringProblemSeverity
|
| }
|
|
|
| /**
|
| - * Create an OverriddenMember based on an element from the analyzer engine.
|
| - */
|
| -OverriddenMember _overriddenMemberFromEngine(engine.Element member) {
|
| - Element element = elementFromEngine(member);
|
| - String className = member.enclosingElement.displayName;
|
| - return new OverriddenMember(element, className);
|
| -}
|
| -
|
| -
|
| -/**
|
| * Create a [RefactoringFeedback] corresponding the given [kind].
|
| */
|
| RefactoringFeedback _refactoringFeedbackFromJson(JsonDecoder jsonDecoder,
|
| @@ -436,13 +172,19 @@ RefactoringFeedback _refactoringFeedbackFromJson(JsonDecoder jsonDecoder,
|
| }
|
| RefactoringKind kind = REQUEST_ID_REFACTORING_KINDS.remove(requestId);
|
| if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
|
| - return new ExtractLocalVariableFeedback.fromJson(jsonDecoder, jsonPath, json);
|
| + return new ExtractLocalVariableFeedback.fromJson(
|
| + jsonDecoder,
|
| + jsonPath,
|
| + json);
|
| }
|
| if (kind == RefactoringKind.EXTRACT_METHOD) {
|
| return new ExtractMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
|
| }
|
| if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
|
| - return new InlineLocalVariableFeedback.fromJson(jsonDecoder, jsonPath, json);
|
| + return new InlineLocalVariableFeedback.fromJson(
|
| + jsonDecoder,
|
| + jsonPath,
|
| + json);
|
| }
|
| if (kind == RefactoringKind.INLINE_METHOD) {
|
| return new InlineMethodFeedback.fromJson(jsonDecoder, jsonPath, json);
|
| @@ -460,7 +202,10 @@ RefactoringFeedback _refactoringFeedbackFromJson(JsonDecoder jsonDecoder,
|
| RefactoringOptions _refactoringOptionsFromJson(JsonDecoder jsonDecoder,
|
| String jsonPath, Object json, RefactoringKind kind) {
|
| if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
|
| - return new ExtractLocalVariableOptions.fromJson(jsonDecoder, jsonPath, json);
|
| + return new ExtractLocalVariableOptions.fromJson(
|
| + jsonDecoder,
|
| + jsonPath,
|
| + json);
|
| }
|
| if (kind == RefactoringKind.EXTRACT_METHOD) {
|
| return new ExtractMethodOptions.fromJson(jsonDecoder, jsonPath, json);
|
| @@ -468,42 +213,12 @@ RefactoringOptions _refactoringOptionsFromJson(JsonDecoder jsonDecoder,
|
| if (kind == RefactoringKind.INLINE_METHOD) {
|
| return new InlineMethodOptions.fromJson(jsonDecoder, jsonPath, json);
|
| }
|
| - if (kind == RefactoringKind.MOVE_FILE) {
|
| - return new MoveFileOptions.fromJson(jsonDecoder, jsonPath, json);
|
| - }
|
| if (kind == RefactoringKind.RENAME) {
|
| return new RenameOptions.fromJson(jsonDecoder, jsonPath, json);
|
| }
|
| return null;
|
| }
|
|
|
| -
|
| -/**
|
| - * Create a SearchResultKind based on a value from the search engine.
|
| - */
|
| -SearchResultKind _searchResultKindFromEngine(engine.MatchKind kind) {
|
| - if (kind == engine.MatchKind.DECLARATION) {
|
| - return SearchResultKind.DECLARATION;
|
| - }
|
| - if (kind == engine.MatchKind.READ) {
|
| - return SearchResultKind.READ;
|
| - }
|
| - if (kind == engine.MatchKind.READ_WRITE) {
|
| - return SearchResultKind.READ_WRITE;
|
| - }
|
| - if (kind == engine.MatchKind.WRITE) {
|
| - return SearchResultKind.WRITE;
|
| - }
|
| - if (kind == engine.MatchKind.INVOCATION) {
|
| - return SearchResultKind.INVOCATION;
|
| - }
|
| - if (kind == engine.MatchKind.REFERENCE) {
|
| - return SearchResultKind.REFERENCE;
|
| - }
|
| - return SearchResultKind.UNKNOWN;
|
| -}
|
| -
|
| -
|
| /**
|
| * Type of callbacks used to decode parts of JSON objects. [jsonPath] is a
|
| * string describing the part of the JSON object being decoded, and [value] is
|
| @@ -679,7 +394,8 @@ class Notification {
|
| * Initialize a newly created instance based upon the given JSON data
|
| */
|
| factory Notification.fromJson(Map<String, Object> json) {
|
| - return new Notification(json[Notification.EVENT],
|
| + return new Notification(
|
| + json[Notification.EVENT],
|
| json[Notification.PARAMS]);
|
| }
|
|
|
| @@ -918,16 +634,15 @@ class Response {
|
| Object error = json[Response.ERROR];
|
| RequestError decodedError;
|
| if (error is Map) {
|
| - decodedError = new RequestError.fromJson(new ResponseDecoder(null),
|
| - '.error', error);
|
| + decodedError =
|
| + new RequestError.fromJson(new ResponseDecoder(null), '.error', error);
|
| }
|
| Object result = json[Response.RESULT];
|
| Map<String, Object> decodedResult;
|
| if (result is Map) {
|
| decodedResult = result;
|
| }
|
| - return new Response(id, error: decodedError,
|
| - result: decodedResult);
|
| + return new Response(id, error: decodedError, result: decodedResult);
|
| } catch (exception) {
|
| return null;
|
| }
|
| @@ -938,10 +653,11 @@ class Response {
|
| * GET_ERRORS_INVALID_FILE error condition.
|
| */
|
| Response.getErrorsInvalidFile(Request request)
|
| - : this(
|
| - request.id,
|
| - error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_FILE,
|
| - 'Error during `analysis.getErrors`: invalid file.'));
|
| + : this(
|
| + request.id,
|
| + error: new RequestError(
|
| + RequestErrorCode.GET_ERRORS_INVALID_FILE,
|
| + 'Error during `analysis.getErrors`: invalid file.'));
|
|
|
| /**
|
| * Initialize a newly created instance to represent an error condition caused
|
| @@ -951,15 +667,20 @@ class Response {
|
| * [expectation] is a description of the type of data that was expected.
|
| */
|
| Response.invalidParameter(Request request, String path, String expectation)
|
| - : this(request.id, error: new RequestError(RequestErrorCode.INVALID_PARAMETER,
|
| - "Expected parameter $path to $expectation"));
|
| + : this(
|
| + request.id,
|
| + error: new RequestError(
|
| + RequestErrorCode.INVALID_PARAMETER,
|
| + "Expected parameter $path to $expectation"));
|
|
|
| /**
|
| * Initialize a newly created instance to represent an error condition caused
|
| * by a malformed request.
|
| */
|
| Response.invalidRequestFormat()
|
| - : this('', error: new RequestError(RequestErrorCode.INVALID_REQUEST, 'Invalid request'));
|
| + : this(
|
| + '',
|
| + error: new RequestError(RequestErrorCode.INVALID_REQUEST, 'Invalid request'));
|
|
|
| /**
|
| * Initialize a newly created instance to represent an error condition caused
|
| @@ -967,17 +688,25 @@ class Response {
|
| * that are not being analyzed.
|
| */
|
| Response.unanalyzedPriorityFiles(Request request, String fileNames)
|
| - : this(request.id, error: new RequestError(RequestErrorCode.UNANALYZED_PRIORITY_FILES, "Unanalyzed files cannot be a priority: '$fileNames'"));
|
| + : this(
|
| + request.id,
|
| + error: new RequestError(
|
| + RequestErrorCode.UNANALYZED_PRIORITY_FILES,
|
| + "Unanalyzed files cannot be a priority: '$fileNames'"));
|
|
|
| /**
|
| * Initialize a newly created instance to represent an error condition caused
|
| * by a [request] that cannot be handled by any known handlers.
|
| */
|
| Response.unknownRequest(Request request)
|
| - : this(request.id, error: new RequestError(RequestErrorCode.UNKNOWN_REQUEST, 'Unknown request'));
|
| + : this(
|
| + request.id,
|
| + error: new RequestError(RequestErrorCode.UNKNOWN_REQUEST, 'Unknown request'));
|
|
|
| Response.unsupportedFeature(String requestId, String message)
|
| - : this(requestId, error: new RequestError(RequestErrorCode.UNSUPPORTED_FEATURE, message));
|
| + : this(
|
| + requestId,
|
| + error: new RequestError(RequestErrorCode.UNSUPPORTED_FEATURE, message));
|
|
|
| /**
|
| * Return a table representing the structure of the Json object that will be
|
|
|