blob: 34c68451487c4cf92e91c772529f2be853232317 [file] [edit]
// Copyright (c) 2026, 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/dart/analysis/analysis_context.dart';
import 'package:analyzer/dart/element/element.dart';
/// Clients of the API summary tool may extend this class to customize its
/// behavior.
///
/// Clients should not *implement* this class, however, because additional
/// methods may be added in the future.
base class ApiSummaryCustomizer {
/// The top level elements exported by the libraries in [publicApiLibraries].
///
/// This value is set by the tool before [initialScanComplete] is called.
late final Set<Element> topLevelPublicElements;
/// The analysis context for the package being summarized.
///
/// This value is set by the tool before [setupComplete] is called.
set analysisContext(AnalysisContext analysisContext) {}
/// The name of the package whose API is being summarized.
///
/// This value is set by the tool before [setupComplete] is called.
set packageName(String value) {}
/// The libraries that comprise the package's public API.
///
/// This value is set by the tool before [initialScanComplete] is called.
set publicApiLibraries(Iterable<LibraryElement> value) {}
/// Called after [publicApiLibraries] and [topLevelPublicElements] have been
/// set, but before any analysis has been performed.
///
/// Further analysis won't be performed until the returned Future completes.
Future<void> initialScanComplete() async {}
/// Called after [packageName] and [analysisContext] have been set, but before
/// any analysis has been performed.
///
/// The initial scan won't be performed until the returned Future completes.
Future<void> setupComplete() async {}
/// Called after [initialScanComplete] to determine if details about an
/// element should be shown in the API summary.
///
/// The default behavior is to show details about elements in
/// [topLevelPublicElements].
bool shouldShowDetails(Element element) =>
topLevelPublicElements.contains(element);
}