in lib/sharing/editor_ui.dart [121:176]
Future<bool> performAnalysis() async {
final input = SourceRequest()..source = fullDartSource;
final lines = Lines(input.source);
final request = dartServices.analyze(input).timeout(serviceCallTimeout);
analysisRequest = request;
try {
final result = await request;
// Discard if we requested another analysis.
if (analysisRequest != request) return false;
// Discard if the document has been mutated since we requested analysis.
if (input.source != fullDartSource) return false;
busyLight.reset();
displayIssues(result.issues);
currentDocument.setAnnotations(result.issues.map((AnalysisIssue issue) {
final startLine = lines.getLineForOffset(issue.charStart);
final endLine =
lines.getLineForOffset(issue.charStart + issue.charLength);
final offsetForStartLine = lines.offsetForLine(startLine);
final start = Position(startLine, issue.charStart - offsetForStartLine);
final end = Position(
endLine, issue.charStart + issue.charLength - offsetForStartLine);
return Annotation(issue.kind, issue.message, issue.line,
start: start, end: end);
}).toList());
final hasErrors = result.issues.any((issue) => issue.kind == 'error');
final hasWarnings = result.issues.any((issue) => issue.kind == 'warning');
return !hasErrors && !hasWarnings;
} catch (e) {
if (e is! TimeoutException) {
final message = e is ApiRequestError ? e.message : '$e';
displayIssues([
AnalysisIssue()
..kind = 'error'
..line = 1
..message = message
]);
} else {
logger.severe(e);
}
currentDocument.setAnnotations([]);
busyLight.reset();
return false;
}
}