Skip to content

Commit

Permalink
Merge af002a1 into 2a97d3c
Browse files Browse the repository at this point in the history
  • Loading branch information
jcollins-g committed Mar 13, 2021
2 parents 2a97d3c + af002a1 commit 94d74f5
Show file tree
Hide file tree
Showing 39 changed files with 192 additions and 158 deletions.
44 changes: 20 additions & 24 deletions lib/src/element_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,6 @@ abstract class ElementType extends Privacy {

bool get canHaveParameters => false;

// TODO(jcollins-g): change clients of ElementType to use subtypes more consistently
// and eliminate createLinkedReturnTypeName (instead, using returnType.linkedName);
String createLinkedReturnTypeName() => linkedName;

bool get isTypedef => false;

String get linkedName;
Expand All @@ -90,7 +86,7 @@ abstract class ElementType extends Privacy {
}

/// An unmodifiable list of this element type's parameters.
List<Parameter> get parameters => const <Parameter>[];
List<Parameter> get parameters;

DartType get instantiatedType;

Expand Down Expand Up @@ -149,22 +145,25 @@ class UndefinedElementType extends ElementType {

@override
String get linkedName => name;

@override
// TODO(jcollins-g): remove the need for an empty list here.
List<Parameter> get parameters => [];
}

/// A FunctionType that does not have an underpinning Element.
class FunctionTypeElementType extends UndefinedElementType {
class FunctionTypeElementType extends UndefinedElementType
with CallableElementTypeMixin {
FunctionTypeElementType(DartType f, Library library,
PackageGraph packageGraph, ElementType returnedFrom)
: super(f, library, packageGraph, returnedFrom);

@override
FunctionType get type => super.type;

@override
List<Parameter> get parameters => type.parameters
.map((p) => ModelElement.from(p, library, packageGraph) as Parameter)
.toList(growable: false);

@override
ElementType get returnType =>
ElementType.from(type.returnType, library, packageGraph, this);

Expand All @@ -174,11 +173,7 @@ class FunctionTypeElementType extends UndefinedElementType {
return _linkedName;
}

@override
String createLinkedReturnTypeName() => returnType.linkedName;

String _nameWithGenerics;

@override
String get nameWithGenerics {
_nameWithGenerics ??= _renderer.renderNameWithGenerics(this);
Expand Down Expand Up @@ -216,7 +211,7 @@ class ParameterizedElementType extends DefinedElementType {
return _nameWithGenerics;
}

ElementTypeRenderer<ParameterizedElementType> get _renderer =>
ElementTypeRenderer<ElementType> get _renderer =>
packageGraph.rendererFactory.parameterizedElementTypeRenderer;
}

Expand Down Expand Up @@ -281,9 +276,6 @@ abstract class DefinedElementType extends ElementType {
return _returnType;
}

@override
String createLinkedReturnTypeName() => returnType.linkedName;

Iterable<ElementType> _typeArguments;

/// An unmodifiable list of this element type's parameters.
Expand Down Expand Up @@ -341,13 +333,14 @@ abstract class DefinedElementType extends ElementType {
}

/// Any callable ElementType will mix-in this class, whether anonymous or not.
abstract class CallableElementTypeMixin implements ParameterizedElementType {
@override
abstract class CallableElementTypeMixin implements ElementType {
Iterable<ElementType> _typeArguments;

ModelElement get returnElement => returnType is DefinedElementType
? (returnType as DefinedElementType).element
: null;

@override
ElementType _returnType;
ElementType get returnType {
_returnType ??=
ElementType.from(type.returnType, library, packageGraph, this);
Expand All @@ -357,7 +350,6 @@ abstract class CallableElementTypeMixin implements ParameterizedElementType {
@override
FunctionType get type => _type;

@override
// TODO(jcollins-g): Rewrite this and improve object model so this doesn't
// require type checking everywhere.
Iterable<ElementType> get typeArguments {
Expand Down Expand Up @@ -414,12 +406,16 @@ class CallableElementType extends ParameterizedElementType

@override
String get linkedName {
_linkedName ??= _renderer.renderLinkedName(this);
if (_linkedName == null) {
if (name != null && name.isNotEmpty) {
_linkedName = super.linkedName;
} else {
_linkedName = _renderer.renderLinkedName(this);
}
}
return _linkedName;
}

String get superLinkedName => super.linkedName;

@override
ElementTypeRenderer<CallableElementType> get _renderer =>
packageGraph.rendererFactory.callableElementTypeRenderer;
Expand Down
7 changes: 3 additions & 4 deletions lib/src/model/accessor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/element/member.dart' show Member;
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/render/source_code_renderer.dart';
import 'package:dartdoc/src/utils.dart';
Expand All @@ -18,10 +19,8 @@ class Accessor extends ModelElement implements EnclosedElement {
[Member /*?*/ originalMember])
: super(element, library, packageGraph, originalMember);

String get linkedReturnType {
assert(isGetter);
return modelType.createLinkedReturnTypeName();
}
@override
CallableElementTypeMixin get modelType => super.modelType;

bool get isSynthetic => element.isSynthetic;

Expand Down
4 changes: 0 additions & 4 deletions lib/src/model/field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/render/source_code_renderer.dart';

Expand Down Expand Up @@ -199,9 +198,6 @@ class Field extends ModelElement
}
}

@override
CallableElementType get modelType => super.modelType;

@override
Inheritable get overriddenElement => null;
}
13 changes: 5 additions & 8 deletions lib/src/model/getter_setter_combo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/utils.dart';
import 'package:dartdoc/src/warnings.dart';
Expand Down Expand Up @@ -179,14 +180,10 @@ mixin GetterSetterCombo on ModelElement {
return buffer.toString();
}

String get linkedReturnType {
if (hasGetter) {
return getter.linkedReturnType;
} else {
// TODO(jcollins-g): this results in the wrong span class for the return
// type.
return setter.linkedParamsNoMetadataOrNames;
}
@override
ElementType get modelType {
if (hasGetter) return getter.modelType.returnType;
return setter.parameters.first.modelType;
}

@override
Expand Down
4 changes: 3 additions & 1 deletion lib/src/model/method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/element/member.dart' show Member;
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';

class Method extends ModelElement
Expand Down Expand Up @@ -92,7 +93,8 @@ class Method extends ModelElement
@override
String get kind => 'method';

String get linkedReturnType => modelType.createLinkedReturnTypeName();
@override
CallableElementTypeMixin get modelType => super.modelType;

@override
Method get overriddenElement {
Expand Down
2 changes: 0 additions & 2 deletions lib/src/model/model_function.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,6 @@ class ModelFunctionTyped extends ModelElement
@override
String get kind => 'function';

String get linkedReturnType => modelType.createLinkedReturnTypeName();

// Food for mustache. TODO(jcollins-g): what about enclosing elements?
bool get isInherited => false;

Expand Down
4 changes: 0 additions & 4 deletions lib/src/model/top_level_variable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.

import 'package:analyzer/dart/element/element.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';

/// Top-level variables. But also picks up getters and setters?
Expand Down Expand Up @@ -86,8 +85,5 @@ class TopLevelVariable extends ModelElement
@override
String get fileName => '${isConst ? '$name-constant' : name}.$fileType';

@override
DefinedElementType get modelType => super.modelType;

TopLevelVariableElement get _variable => (element as TopLevelVariableElement);
}
6 changes: 4 additions & 2 deletions lib/src/model/typedef.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

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/model.dart';
import 'package:dartdoc/src/render/typedef_renderer.dart';

Expand Down Expand Up @@ -49,8 +50,6 @@ class Typedef extends ModelElement
@override
String get kind => 'typedef';

String get linkedReturnType => modelType.createLinkedReturnTypeName();

@override
List<TypeParameter> get typeParameters => element.typeParameters.map((f) {
return ModelElement.from(f, library, packageGraph) as TypeParameter;
Expand Down Expand Up @@ -79,4 +78,7 @@ class FunctionTypedef extends Typedef {
}
return super.genericTypeParameters;
}

@override
CallableElementTypeMixin get modelType => super.modelType;
}
10 changes: 1 addition & 9 deletions lib/src/render/element_type_renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,6 @@ class CallableElementTypeRendererHtml
extends ElementTypeRenderer<CallableElementType> {
@override
String renderLinkedName(CallableElementType elementType) {
if (elementType.name != null && elementType.name.isNotEmpty) {
return elementType.superLinkedName;
}

var buf = StringBuffer();
buf.write(elementType.nameWithGenerics);
buf.write('(');
Expand Down Expand Up @@ -168,15 +164,11 @@ class CallableElementTypeRendererMd
extends ElementTypeRenderer<CallableElementType> {
@override
String renderLinkedName(CallableElementType elementType) {
if (elementType.name != null && elementType.name.isNotEmpty) {
return elementType.superLinkedName;
}

var buf = StringBuffer();
buf.write(elementType.nameWithGenerics);
buf.write('(');
buf.write(ParameterRendererMd()
.renderLinkedParams(elementType.element.parameters, showNames: false)
.renderLinkedParams(elementType.parameters, showNames: false)
.trim());
buf.write(') → ');
buf.write(elementType.returnType.linkedName);
Expand Down
11 changes: 6 additions & 5 deletions lib/src/render/parameter_renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -165,13 +165,12 @@ abstract class ParameterRenderer {
if (param.isCovariant) {
buf.write(covariant('covariant') + ' ');
}
if (paramModelType is CallableElementTypeMixin ||
paramModelType.type is FunctionType) {
if (paramModelType is CallableElementTypeMixin) {
String returnTypeName;
if (paramModelType.isTypedef) {
returnTypeName = paramModelType.linkedName;
} else {
returnTypeName = paramModelType.createLinkedReturnTypeName();
returnTypeName = paramModelType.returnType.linkedName;
}
buf.write(typeName(returnTypeName));
if (showNames) {
Expand All @@ -182,8 +181,10 @@ abstract class ParameterRenderer {
}
if (!paramModelType.isTypedef && paramModelType is DefinedElementType) {
buf.write('(');
buf.write(renderLinkedParams(paramModelType.element.parameters,
showMetadata: showMetadata, showNames: showNames));
buf.write(renderLinkedParams(
(paramModelType as DefinedElementType).element.parameters,
showMetadata: showMetadata,
showNames: showNames));
buf.write(')');
buf.write(paramModelType.nullabilitySuffix);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/html/_accessor_getter.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<section id="getter">

<section class="multi-line-signature">
<span class="returntype">{{{ linkedReturnType }}}</span>
<span class="returntype">{{{ modelType.returnType.linkedName }}}</span>
{{>name_summary}}
{{>features}}
</section>
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/html/_callable.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<dt id="{{htmlId}}" class="callable{{ #isInherited }} inherited{{ /isInherited}}">
<span class="name{{#isDeprecated}} deprecated{{/isDeprecated}}">{{{linkedName}}}</span>{{{linkedGenericParameters}}}<span class="signature">(<wbr>{{{ linkedParamsNoMetadata }}})
<span class="returntype parameter">&#8594; {{{ linkedReturnType }}}</span>
<span class="returntype parameter">&#8594; {{{ modelType.returnType.linkedName }}}</span>
</span>
{{>categorization}}
</dt>
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/html/_callable_multiline.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
</div>
{{/hasAnnotations}}

<span class="returntype">{{{ linkedReturnType }}}</span>
<span class="returntype">{{{ modelType.returnType.linkedName }}}</span>
{{>name_summary}}{{{genericParameters}}}(<wbr>{{#hasParameters}}{{{linkedParamsLines}}}{{/hasParameters}})
2 changes: 1 addition & 1 deletion lib/templates/html/_constant.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<dt id="{{htmlId}}" class="constant">
<span class="name {{#isDeprecated}}deprecated{{/isDeprecated}}">{{{ linkedName }}}</span>
<span class="signature">&#8594; const {{{ linkedReturnType }}}</span>
<span class="signature">&#8594; const {{{ modelType.linkedName }}}</span>
{{>categorization}}
</dt>
<dd>
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/html/_property.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<dt id="{{htmlId}}" class="property{{ #isInherited }} inherited{{ /isInherited}}">
<span class="name">{{{linkedName}}}</span>
<span class="signature">{{{ arrow }}} {{{ linkedReturnType }}}</span> {{>categorization}}
<span class="signature">{{{ arrow }}} {{{ modelType.linkedName }}}</span> {{>categorization}}
</dt>
<dd{{ #isInherited }} class="inherited"{{ /isInherited}}>
{{{ oneLineDoc }}} {{{ extendedDocLink }}}
Expand Down
3 changes: 1 addition & 2 deletions lib/templates/html/_type.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<dt id="{{htmlId}}" class="{{ #isInherited }} inherited{{ /isInherited}}">
<span class="name{{#isDeprecated}} deprecated{{/isDeprecated}}">{{{linkedName}}}</span>{{{linkedGenericParameters}}}
=
<span class="returntype parameter">{{{ linkedReturnType }}}</span>
= {{{ modelType.linkedName }}}
</span>
{{>categorization}}
</dt>
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/html/_type_multiline.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
</ol>
</div>
{{/hasAnnotations}}
{{>name_summary}}{{{genericParameters}}} = <span class="returntype"> {{{linkedReturnType}}}</span>
{{>name_summary}}{{{genericParameters}}} = {{{modelType.linkedName}}}</span>
2 changes: 1 addition & 1 deletion lib/templates/html/property.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ <h5>{{parent.name}} {{parent.kind}}</h5>
{{#self}}
{{#hasNoGetterSetter}}
<section class="multi-line-signature">
<span class="returntype">{{{ linkedReturnType }}}</span>
{{{ modelType.linkedName }}}
{{>name_summary}}
{{>features}}
</section>
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/html/top_level_property.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ <h5>{{parent.name}} {{parent.kind}}</h5>

{{#hasNoGetterSetter}}
<section class="multi-line-signature">
<span class="returntype">{{{ linkedReturnType }}}</span>
{{{ modelType.linkedName }}}
{{>name_summary}}
{{>features}}
</section>
Expand Down
2 changes: 1 addition & 1 deletion lib/templates/md/_accessor_getter.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{#getter}}
{{{ linkedReturnType }}} {{>name_summary}} {{!two spaces intentional}}
{{{ modelType.returnType.linkedName }}} {{>name_summary}} {{!two spaces intentional}}
{{>features}}

{{>documentation}}
Expand Down
Loading

0 comments on commit 94d74f5

Please sign in to comment.