blob: 4ad6049570fc2b79a69483ea805d542713dd5475 [file] [log] [blame]
// 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++));
}