blob: 347cd107d00c35a914ac36a425593ceeb9a4b641 [file] [log] [blame]
// 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:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/accessor.dart';
import 'package:dartdoc/src/model/container.dart';
import 'package:dartdoc/src/model/library.dart';
import 'package:dartdoc/src/model/model_element.dart';
import 'package:dartdoc/src/model/package_graph.dart';
import 'package:meta/meta.dart';
abstract class ModelObjectBuilder
implements ModelElementBuilder, ElementTypeBuilder {}
abstract class ModelElementBuilder {
ModelElement from(Element e, Library library, {Container enclosingContainer});
ModelElement fromElement(Element e);
ModelElement fromPropertyInducingElement(Element e, Library l,
{Container enclosingContainer,
@required Accessor getter,
@required Accessor setter});
}
abstract class ElementTypeBuilder {
ElementType typeFrom(DartType f, Library library, {ElementType returnedFrom});
}
abstract class ModelBuilderInterface {
/// Override implementations in unit tests to avoid requiring literal
/// [ModelElement]s.
ModelObjectBuilder get modelBuilder;
}
class ModelObjectBuilderImpl extends ModelObjectBuilder
with ModelElementBuilderImpl, ElementTypeBuilderImpl {
@override
final PackageGraph packageGraph;
ModelObjectBuilderImpl(this.packageGraph);
}
/// Default implementation of the ModelBuilderInterface, requiring a
/// [PackageGraph].
mixin ModelBuilder implements ModelBuilderInterface {
PackageGraph get packageGraph;
ModelObjectBuilder _modelBuilder;
@override
ModelObjectBuilder get modelBuilder =>
_modelBuilder ??= ModelObjectBuilderImpl(packageGraph);
}