| // 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++), | |
| ); | |
| } |