| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:analysis_server/protocol/protocol_generated.dart' as server; |
| import 'package:analyzer_plugin/protocol/protocol_common.dart'; |
| import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin; |
| |
| class ProtocolTestUtilities { |
| static const List<String> strings = <String>[ |
| 'aa', |
| 'ab', |
| 'ac', |
| 'ad', |
| 'ae', |
| 'af', |
| 'ag', |
| 'ah', |
| 'ai', |
| 'aj', |
| 'ak', |
| 'al', |
| 'am', |
| 'an', |
| 'ao', |
| 'ap', |
| 'aq', |
| 'ar', |
| 'as', |
| 'at', |
| 'au', |
| 'av', |
| 'aw', |
| 'ax', |
| 'ay', |
| 'az', |
| 'ba', |
| 'bb', |
| 'bc', |
| 'bd', |
| 'be', |
| 'bf', |
| 'bg', |
| 'bh', |
| 'bi', |
| 'bj', |
| 'bk', |
| 'bl', |
| 'bm', |
| 'bn', |
| 'bo', |
| 'bp', |
| 'bq', |
| 'br', |
| 'bs', |
| 'bt', |
| 'bu', |
| 'bv', |
| 'bw', |
| 'bx', |
| 'by', |
| 'bz', |
| ]; |
| |
| /// On return, increment [stringIndex] by 3 (or 4 if no [file] name is |
| /// provided) and [intIndex] by 4. |
| AnalysisError analysisError(int stringIndex, int intIndex, {String? file}) { |
| return AnalysisError( |
| AnalysisErrorSeverity.ERROR, |
| AnalysisErrorType.COMPILE_TIME_ERROR, |
| location(stringIndex, intIndex, file: file), |
| strings[stringIndex++], |
| strings[stringIndex++], |
| correction: strings[stringIndex++], |
| hasFix: true); |
| } |
| |
| /// On return, increment [stringIndex] by 5 and [intIndex] by 5. |
| Element element(int stringIndex, int intIndex, {ElementKind? kind}) => |
| Element(kind ?? ElementKind.CLASS, strings[stringIndex++], intIndex++, |
| location: Location(fileName(stringIndex++), intIndex++, intIndex++, |
| intIndex++, intIndex++, |
| endLine: intIndex++, endColumn: intIndex++), |
| parameters: strings[stringIndex++], |
| returnType: strings[stringIndex++], |
| typeParameters: strings[stringIndex++]); |
| |
| String fileName(int stringIndex) => '${strings[stringIndex]}.dart'; |
| |
| FoldingRegion foldingRegion(int offset, int length) => |
| FoldingRegion(FoldingKind.FILE_HEADER, offset, length); |
| |
| HighlightRegion highlightRegion(int offset, int length) => |
| HighlightRegion(HighlightRegionType.FIELD, offset, length); |
| |
| /// On return, increment [stringIndex] by 1 and [intIndex] by 4. |
| Location location(int stringIndex, int intIndex, {String? file}) => Location( |
| file ?? fileName(stringIndex), |
| intIndex++, |
| intIndex++, |
| intIndex++, |
| intIndex++, |
| endLine: intIndex++, |
| endColumn: intIndex++); |
| |
| /// On return, increment [stringIndex] by 5 and [intIndex] by 7. |
| Occurrences occurrences(int stringIndex, int intIndex) { |
| var referencedElement = element(stringIndex, intIndex); |
| return Occurrences(referencedElement, <int>[intIndex + 5, intIndex + 6], |
| referencedElement.name.length); |
| } |
| |
| /// On return, increment [stringIndex] by 10 and [intIndex] by 14. |
| Outline outline(int stringIndex, int intIndex) => Outline( |
| element(stringIndex, intIndex), |
| intIndex + 5, |
| intIndex + 6, |
| intIndex + 5, |
| intIndex + 6, |
| children: <Outline>[ |
| Outline( |
| element(stringIndex + 5, intIndex + 7, |
| kind: ElementKind.METHOD), |
| intIndex + 12, |
| intIndex + 13, |
| intIndex + 12, |
| intIndex + 13) |
| ]); |
| |
| /// On return, increment [stringIndex] by 2 (or 3 if no [file] name is |
| /// provided) and [intIndex] by 4. |
| plugin.AnalysisNavigationParams pluginNavigationParams( |
| int stringIndex, int intIndex, {String? file}) => |
| plugin.AnalysisNavigationParams( |
| file ?? fileName(stringIndex++), <NavigationRegion>[ |
| NavigationRegion(intIndex++, 2, <int>[0]) |
| ], <NavigationTarget>[ |
| NavigationTarget( |
| ElementKind.FIELD, 0, intIndex++, 2, intIndex++, intIndex++) |
| ], <String>[ |
| strings[stringIndex++], |
| strings[stringIndex++] |
| ]); |
| |
| /// On return, increment [stringIndex] by 2 and [intIndex] by 4. |
| RefactoringProblem refactoringProblem(int stringIndex, int intIndex) { |
| return RefactoringProblem( |
| RefactoringProblemSeverity.FATAL, strings[stringIndex++], |
| location: location(stringIndex, intIndex)); |
| } |
| |
| /// On return, increment [stringIndex] by 2 (or 3 if no [file] name is |
| /// provided) and [intIndex] by 4. |
| server.AnalysisNavigationParams serverNavigationParams( |
| int stringIndex, int intIndex, {String? file}) => |
| server.AnalysisNavigationParams( |
| file ?? fileName(stringIndex++), <NavigationRegion>[ |
| NavigationRegion(intIndex++, 2, <int>[0]) |
| ], <NavigationTarget>[ |
| NavigationTarget( |
| ElementKind.FIELD, 0, intIndex++, 2, intIndex++, intIndex++) |
| ], <String>[ |
| strings[stringIndex++], |
| strings[stringIndex++] |
| ]); |
| |
| /// On return, increment [stringIndex] by 6 and [intIndex] by 6. |
| SourceChange sourceChange(int stringIndex, int intIndex) => |
| SourceChange(strings[stringIndex++], |
| edits: <SourceFileEdit>[ |
| SourceFileEdit(fileName(stringIndex), intIndex++, |
| edits: <SourceEdit>[ |
| SourceEdit(intIndex++, intIndex++, strings[stringIndex++]) |
| ]) |
| ], |
| linkedEditGroups: <LinkedEditGroup>[ |
| LinkedEditGroup( |
| <Position>[Position(fileName(stringIndex), intIndex++)], |
| intIndex++, |
| <LinkedEditSuggestion>[ |
| LinkedEditSuggestion( |
| strings[stringIndex++], LinkedEditSuggestionKind.METHOD) |
| ]) |
| ], |
| selection: Position(fileName(stringIndex), intIndex++)); |
| } |