blob: f970b94ad7e1e41d2b21707150c9fcfef2c4b972 [file] [log] [blame]
// Copyright (c) 2024, 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:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/analysis/library_graph.dart';
import 'package:analyzer/src/fine/requirement_failure.dart';
import 'package:analyzer/src/fine/requirements.dart';
import 'package:analyzer/src/summary2/linked_element_factory.dart';
/// An event that happened inside the [AnalysisDriver].
sealed class AnalysisDriverEvent {}
/// The event after [library] analysis.
final class AnalyzedLibrary extends AnalysisDriverEvent {
final LibraryFileKind library;
final RequirementsManifest? requirements;
AnalyzedLibrary({required this.library, required this.requirements});
}
/// The event that we wanted to analyze [file], so analyze [library].
final class AnalyzeFile extends AnalysisDriverEvent {
final FileState file;
final LibraryFileKind library;
AnalyzeFile({required this.file, required this.library});
}
/// The event that we were not able to reuse the existing linked bundle
/// for [cycle], because found the [failure].
///
/// Currently this means that the whole bundle will be linked.
final class CannotReuseLinkedBundle extends AnalysisDriverEvent {
final LinkedElementFactory elementFactory;
final LibraryCycle cycle;
final RequirementFailure failure;
CannotReuseLinkedBundle({
required this.elementFactory,
required this.cycle,
required this.failure,
});
}
/// The event that we were not able to reuse the existing analysis results
/// for [library], because found the [failure].
///
/// Currently this means that the whole library will be analyzed.
final class GetErrorsCannotReuse extends AnalysisDriverEvent {
final LibraryFileKind library;
final RequirementFailure failure;
GetErrorsCannotReuse({required this.library, required this.failure});
}
final class GetErrorsFromBytes extends AnalysisDriverEvent {
final FileState file;
final LibraryFileKind library;
GetErrorsFromBytes({required this.file, required this.library});
}
/// The event that libraries for [cycle] were linked, and accumulated the
/// [requirements] to be checked if we try to reuse the summary bundle later.
final class LinkLibraryCycle extends AnalysisDriverEvent {
final LinkedElementFactory elementFactory;
final LibraryCycle cycle;
final RequirementsManifest? requirements;
LinkLibraryCycle({
required this.elementFactory,
required this.cycle,
required this.requirements,
});
}
/// The event that we were not able to reuse the existing analysis results
/// for [library], because found the [failure].
///
/// Currently this means that the whole library will be analyzed.
final class ProduceErrorsCannotReuse extends AnalysisDriverEvent {
final LibraryFileKind library;
final RequirementFailure failure;
ProduceErrorsCannotReuse({required this.library, required this.failure});
}
/// The event that the existing summary bundle for [cycle] were reused,
/// because its requirements are still satisfied.
final class ReuseLinkLibraryCycleBundle extends AnalysisDriverEvent {
final LibraryCycle cycle;
ReuseLinkLibraryCycleBundle({required this.cycle});
}