Skip to content

Commit

Permalink
Remove unnecessary EnclosedElement mixin (#3736)
Browse files Browse the repository at this point in the history
  • Loading branch information
srawlins committed Mar 27, 2024
1 parent c5bb906 commit bf6080c
Show file tree
Hide file tree
Showing 16 changed files with 39 additions and 75 deletions.
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

0 comments on commit bf6080c

Please sign in to comment.