// Copyright (c) 2021, 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:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:meta/meta.dart'; import '../base.dart'; import '../mixins/annotations.dart'; import '../mixins/dartdoc.dart'; import '../mixins/generics.dart'; import '../visitors.dart'; import 'expression.dart'; import 'field.dart'; import 'method.dart'; import 'reference.dart'; part 'mixin.g.dart'; @immutable abstract class Mixin extends Object with HasAnnotations, HasDartDocs, HasGenerics implements Built, Spec { factory Mixin([void Function(MixinBuilder b) updates]) = _$Mixin; Mixin._(); /// Whether the mixin is a `base mixin`. bool get base; @override BuiltList get annotations; @override BuiltList get docs; Reference? get on; BuiltList get implements; @override BuiltList get types; BuiltList get methods; BuiltList get fields; /// Name of the mixin. String get name; @override R accept(SpecVisitor visitor, [R? context]) => visitor.visitMixin(this, context); } abstract class MixinBuilder extends Object with HasAnnotationsBuilder, HasDartDocsBuilder, HasGenericsBuilder implements Builder { factory MixinBuilder() = _$MixinBuilder; MixinBuilder._(); /// Whether the mixin is a `base mixin`. bool base = false; @override ListBuilder annotations = ListBuilder(); @override ListBuilder docs = ListBuilder(); Reference? on; ListBuilder implements = ListBuilder(); @override ListBuilder types = ListBuilder(); ListBuilder methods = ListBuilder(); ListBuilder fields = ListBuilder(); /// Name of the mixin. String? name; }