blob: 139463626e96d387adf666cd9e971ea978e4eac7 [file] [log] [blame]
// Copyright (c) 2019, 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/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/kind.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/model_utils.dart' as model_utils;
import 'package:meta/meta.dart';
class Mixin extends InheritingContainer {
@override
final MixinElement2 element;
late final List<ParameterizedElementType> superclassConstraints = [
...element.superclassConstraints.where((e) => !e.isDartCoreObject).map(
(InterfaceType i) => getTypeFor(i, library) as ParameterizedElementType)
];
@override
String get fileName => '$name-mixin.html';
@override
String get sidebarPath =>
'${canonicalLibraryOrThrow.dirName}/$name-mixin-sidebar.html';
@override
late final List<InheritingContainer> inheritanceChain = [
this,
...superclassConstraints.modelElements.expandInheritanceChain,
for (var container in superChain.modelElements)
...container.inheritanceChain,
// Interfaces need to come last, because classes in the `superChain` might
// implement them even when they aren't mentioned.
...interfaceElements.expandInheritanceChain,
];
Mixin(this.element, super.library, super.packageGraph);
@override
@visibleForOverriding
Map<String, CommentReferable> get extraReferenceChildren => const {};
@override
bool get hasModifiers => super.hasModifiers || hasPublicSuperclassConstraints;
bool get hasPublicSuperclassConstraints =>
publicSuperclassConstraints.isNotEmpty;
@override
bool get isAbstract => false;
@override
bool get isBase => element.isBase;
@override
bool get isFinal => false;
@override
bool get isImplementableInterface => false;
@override
/// Mixins are not mixin classes by definition.
bool get isMixinClass => false;
@override
bool get isSealed => false;
@override
Kind get kind => Kind.mixin;
Iterable<ParameterizedElementType> get publicSuperclassConstraints =>
superclassConstraints.wherePublic;
@override
String get relationshipsClass => 'mixin-relationships';
}