Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 15 additions & 18 deletions lib/src/generator/generator_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'dart:convert';

import 'package:collection/collection.dart';
import 'package:dartdoc/src/model/directives/categorization.dart';
import 'package:dartdoc/src/model/enclosed_element.dart';
import 'package:dartdoc/src/model/indexable.dart';
import 'package:dartdoc/src/model/model_element.dart';

Expand Down Expand Up @@ -34,30 +33,28 @@ String generateCategoryJson(Iterable<Categorization> categories, bool pretty) {
}

/// Generates the text of the search index file (`index.json`) containing
/// [indexedItems] and [packageOrder].
/// [indexedElements] and [packageOrder].
///
/// Passing `pretty: true` will use a [JsonEncoder] with a single-space indent.
String generateSearchIndexJson(Iterable<Indexable> indexedElements,
{required List<String> packageOrder, required bool pretty}) {
final indexItems = [
for (final indexable
in indexedElements.sorted(_compareElementRepresentations))
for (final item in indexedElements.sorted(_compareElementRepresentations))
{
'name': indexable.name,
'qualifiedName': indexable.fullyQualifiedName,
'href': indexable.href,
'kind': indexable.kind.index,
'name': item.name,
'qualifiedName': item.fullyQualifiedName,
'href': item.href,
'kind': item.kind.index,
// TODO(srawlins): Only include this for [Inheritable] items.
'overriddenDepth': indexable.overriddenDepth,
if (indexable is ModelElement)
'packageRank': _packageRank(packageOrder, indexable),
if (indexable is ModelElement)
'desc': _removeHtmlTags(indexable.oneLineDoc),
if (indexable is EnclosedElement)
'overriddenDepth': item.overriddenDepth,
if (item is ModelElement)
'packageRank': _packageRank(packageOrder, item),
if (item is ModelElement) 'desc': _removeHtmlTags(item.oneLineDoc),
if (item case ModelElement(:var enclosingElement?))
'enclosedBy': {
'name': indexable.enclosingElement.name,
'kind': indexable.enclosingElement.kind.index,
'href': indexable.enclosingElement.href,
'name': enclosingElement.name,
'kind': enclosingElement.kind.index,
'href': enclosingElement.href,
},
}
];
Expand Down Expand Up @@ -114,7 +111,7 @@ final _htmlTagPattern =
RegExp(r'<[^>]*>', multiLine: true, caseSensitive: true);

// Compares two elements, first by fully qualified name, then by kind.
int _compareElementRepresentations<T extends Indexable>(T a, T b) {
int _compareElementRepresentations(Indexable a, Indexable b) {
final value = compareNatural(a.fullyQualifiedName, b.fullyQualifiedName);
if (value == 0) {
return compareNatural(a.kind.toString(), b.kind.toString());
Expand Down
25 changes: 1 addition & 24 deletions lib/src/generator/templates.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2084,8 +2084,8 @@ class _Renderer_Constructor extends RendererBase<Constructor> {
CT_,
() => {
..._Renderer_ModelElement.propertyMap<CT_>(),
..._Renderer_TypeParameters.propertyMap<CT_>(),
..._Renderer_ContainerMember.propertyMap<CT_>(),
..._Renderer_TypeParameters.propertyMap<CT_>(),
'aboveSidebarPath': Property(
getValue: (CT_ c) => c.aboveSidebarPath,
renderVariable:
Expand Down Expand Up @@ -3456,29 +3456,6 @@ class _Renderer_ContainerMember extends RendererBase<ContainerMember> {
parent: r);
},
),
'definingEnclosingContainer': Property(
getValue: (CT_ c) => c.definingEnclosingContainer,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_Container.propertyMap().getValue(name);
return nextProperty.renderVariable(
self.getValue(c) as Container,
nextProperty,
[...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => false,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_Container(
c.definingEnclosingContainer, ast, r.template, sink,
parent: r);
},
),
'enclosingElement': Property(
getValue: (CT_ c) => c.enclosingElement,
renderVariable:
Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/accessor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import 'package:dartdoc/src/utils.dart';
import 'package:dartdoc/src/warnings.dart';

/// Getters and setters.
class Accessor extends ModelElement implements EnclosedElement {
class Accessor extends ModelElement {
@override
final PropertyAccessorElement element;

Expand Down
4 changes: 1 addition & 3 deletions lib/src/model/constructor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/model.dart';

class Constructor extends ModelElement
with TypeParameters, ContainerMember
implements EnclosedElement {
class Constructor extends ModelElement with ContainerMember, TypeParameters {
@override
final ConstructorElement element;

Expand Down
6 changes: 5 additions & 1 deletion lib/src/model/container_member.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

import 'package:dartdoc/src/model/attribute.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:meta/meta.dart';

/// A [ModelElement] that is a [Container] member.
mixin ContainerMember on ModelElement implements EnclosedElement {
mixin ContainerMember on ModelElement {
/// True if this [ContainerMember] is from an applicable [Extension].
/// False otherwise, including if this [ContainerMember]'s [enclosingElement]
/// is the extension it was declared in.
Expand All @@ -20,6 +21,9 @@ mixin ContainerMember on ModelElement implements EnclosedElement {
@override
Container get enclosingElement;

/// The container that contains this member.
@protected
@visibleForTesting
late final Container definingEnclosingContainer =
getModelForElement(element.enclosingElement!) as Container;

Expand Down
12 changes: 0 additions & 12 deletions lib/src/model/enclosed_element.dart

This file was deleted.

2 changes: 1 addition & 1 deletion lib/src/model/extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import 'package:meta/meta.dart';

/// Static extension on a given type, containing methods (including getters,
/// setters, operators).
class Extension extends Container implements EnclosedElement {
class Extension extends Container {
@override
final ExtensionElement element;

Expand Down
3 changes: 1 addition & 2 deletions lib/src/model/field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import 'package:dartdoc/src/model/attribute.dart';
import 'package:dartdoc/src/model/model.dart';

class Field extends ModelElement
with GetterSetterCombo, ContainerMember, Inheritable
implements EnclosedElement {
with GetterSetterCombo, ContainerMember, Inheritable {
@override
final FieldElement element;

Expand Down
3 changes: 1 addition & 2 deletions lib/src/model/inheriting_container.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,7 @@ mixin Constructable implements InheritingContainer {
///
/// * **instance**: As with [Container], but also includes inherited children.
/// * **inherited**: Filtered getters giving only inherited children.
abstract class InheritingContainer extends Container
implements EnclosedElement {
abstract class InheritingContainer extends Container {
InheritingContainer(super.library, super.packageGraph);

DefinedElementType? get supertype {
Expand Down
3 changes: 1 addition & 2 deletions lib/src/model/method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/model.dart';

class Method extends ModelElement
with ContainerMember, Inheritable, TypeParameters
implements EnclosedElement {
with ContainerMember, Inheritable, TypeParameters {
@override
final MethodElement element;

Expand Down
1 change: 0 additions & 1 deletion lib/src/model/model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ export 'documentable.dart';
export 'documentation.dart';
export 'documentation_comment.dart';
export 'dynamic.dart';
export 'enclosed_element.dart';
export 'enum.dart';
export 'extension.dart';
export 'extension_type.dart';
Expand Down
8 changes: 8 additions & 0 deletions lib/src/model/model_element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,14 @@ abstract class ModelElement extends Canonicalization
return Accessor(e, library, packageGraph);
}

/// The model element enclosing this one.
///
/// As some examples:
/// * Instances of some subclasses have no enclosing element, like [Library]
/// and [Dynamic].
/// * A [Container] is enclosed by a [Library].
/// * A [Method] is enclosed by a [Container].
/// * An [Accessor] is either enclosed by a [Container] or a [Library].
ModelElement? get enclosingElement;

// Stub for mustache, which would otherwise search enclosing elements to find
Expand Down
4 changes: 1 addition & 3 deletions lib/src/model/model_function.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ class ModelFunctionTypedef extends ModelFunctionTyped {
String get name => element.enclosingElement!.name!;
}

class ModelFunctionTyped extends ModelElement
with TypeParameters
implements EnclosedElement {
class ModelFunctionTyped extends ModelElement with TypeParameters {
@override
final FunctionTypedElement element;

Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/prefix.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'package:dartdoc/src/model/model.dart';
///
/// Like [Parameter], it doesn't have doc pages, but participates in lookups.
/// Forwards to its referenced library if referred to directly.
class Prefix extends ModelElement with HasNoPage implements EnclosedElement {
class Prefix extends ModelElement with HasNoPage {
@override
final PrefixElement element;

Expand Down
3 changes: 1 addition & 2 deletions lib/src/model/top_level_variable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import 'package:dartdoc/src/model/model.dart';

/// Top-level variables. But also picks up getters and setters?
class TopLevelVariable extends ModelElement
with GetterSetterCombo, Categorization
implements EnclosedElement {
with GetterSetterCombo, Categorization {
@override
final TopLevelVariableElement element;

Expand Down
3 changes: 1 addition & 2 deletions lib/src/model/typedef.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/model.dart';

abstract class Typedef extends ModelElement
with TypeParameters, Categorization
implements EnclosedElement {
with TypeParameters, Categorization {
@override
final TypeAliasElement element;

Expand Down