blob: 06b661a952b245f7de2e1db9f617a79ec7c90611 [file] [log] [blame]
// Copyright (c) 2020, 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:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';
// TODO(jcollins-g): Mix-in ExtensionTarget on Method, ModelFunction, Typedef,
// and other possible documented symbols that could be extended (#2701).
mixin ExtensionTarget on ModelElement {
bool get hasModifiers;
bool get hasPotentiallyApplicableExtensions =>
potentiallyApplicableExtensionsSorted.isNotEmpty;
/// The sorted list of potentially applicable extensions, for display in
/// templates.
///
/// This is defined as those extensions where an instantiation of the type
/// defined by [element] can exist where this extension applies, not including
/// any extension that applies to every type.
late final List<Extension> potentiallyApplicableExtensionsSorted =
packageGraph.documentedExtensions
.where((e) => !e.alwaysApplies)
.where((e) => e.couldApplyTo(this))
.toList(growable: false)
..sort(byName);
ElementType get modelType;
}