Skip to content

Extract modelType out of ModelElement #2583

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 24 commits into from
Mar 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f8b27a3
clean up element types and add display aliases test
jcollins-g Mar 11, 2021
b5a3cd6
Everything except the actual change I want to make
jcollins-g Mar 12, 2021
238de82
Fix tests and update templates
jcollins-g Mar 12, 2021
599fa22
dartfmt
jcollins-g Mar 12, 2021
5aee46b
remove scaffolding
jcollins-g Mar 12, 2021
705d166
Merge branch 'master' into consistent-element-type
jcollins-g Mar 12, 2021
5de7033
begin extraction
jcollins-g Mar 12, 2021
76d1a01
Exclude InterfaceType. Hacky.
jcollins-g Mar 12, 2021
6126096
Merge branch 'generic-types-are-not-interfaces' into consistent-eleme…
jcollins-g Mar 12, 2021
36550f0
Merge branch 'consistent-element-type' into consistent-element-type+m…
jcollins-g Mar 12, 2021
ecb942a
refactor continuing
jcollins-g Mar 13, 2021
e55fcb4
Merge branch 'master' into generic-types-are-not-interfaces
jcollins-g Mar 13, 2021
af002a1
Merge branch 'generic-types-are-not-interfaces' into consistent-eleme…
jcollins-g Mar 13, 2021
0fcac7d
Merge branch 'master' into generic-types-are-not-interfaces
jcollins-g Mar 15, 2021
cabc4d6
Merge branch 'generic-types-are-not-interfaces' into consistent-eleme…
jcollins-g Mar 15, 2021
ccecc78
Merge branch 'consistent-element-type' into consistent-element-type+m…
jcollins-g Mar 15, 2021
32e34ea
dartfmt, finish modelType extraction
jcollins-g Mar 17, 2021
039f5c5
Merge branch 'master' into consistent-element-type+modelType-refactor
jcollins-g Mar 17, 2021
959f9da
todo:ignore and no dynamic
jcollins-g Mar 17, 2021
625182a
fix it all
jcollins-g Mar 17, 2021
92ee8ae
Merge branch 'master' into modelType-refactor
jcollins-g Mar 17, 2021
90c3425
cleanup
jcollins-g Mar 17, 2021
c26fcd2
Merge branch 'master' into modelType-refactor
jcollins-g Mar 17, 2021
a0fc976
dartfmt and review comments
jcollins-g Mar 18, 2021
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
29 changes: 17 additions & 12 deletions lib/src/model/accessor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/element/member.dart' show Member;
import 'package:analyzer/src/dart/element/member.dart' show ExecutableMember;
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/render/source_code_renderer.dart';
Expand All @@ -16,11 +16,18 @@ class Accessor extends ModelElement implements EnclosedElement {

Accessor(PropertyAccessorElement element, Library library,
PackageGraph packageGraph,
[Member /*?*/ originalMember])
[ExecutableMember /*?*/ originalMember])
: super(element, library, packageGraph, originalMember);

@override
CallableElementTypeMixin get modelType => super.modelType;
PropertyAccessorElement get element => super.element;

@override
ExecutableMember get originalMember => super.originalMember;

CallableElementTypeMixin _modelType;
CallableElementTypeMixin get modelType => _modelType ??=
ElementType.from((originalMember ?? element).type, library, packageGraph);

bool get isSynthetic => element.isSynthetic;

Expand All @@ -31,7 +38,7 @@ class Accessor extends ModelElement implements EnclosedElement {
// The [enclosingCombo] where this element was defined.
GetterSetterCombo get definingCombo {
if (_definingCombo == null) {
var variable = (element as PropertyAccessorElement).variable;
var variable = element.variable;
_definingCombo = ModelElement.fromElement(variable, packageGraph);
assert(_definingCombo != null, 'Unable to find defining combo');
}
Expand Down Expand Up @@ -85,12 +92,12 @@ class Accessor extends ModelElement implements EnclosedElement {

@override
ModelElement get enclosingElement {
if (_accessor.enclosingElement is CompilationUnitElement) {
if (element.enclosingElement is CompilationUnitElement) {
return packageGraph.findButDoNotCreateLibraryFor(
_accessor.enclosingElement.enclosingElement);
element.enclosingElement.enclosingElement);
}

return ModelElement.from(_accessor.enclosingElement, library, packageGraph);
return ModelElement.from(element.enclosingElement, library, packageGraph);
}

@override
Expand All @@ -104,9 +111,9 @@ class Accessor extends ModelElement implements EnclosedElement {
return enclosingCombo.href;
}

bool get isGetter => _accessor.isGetter;
bool get isGetter => element.isGetter;

bool get isSetter => _accessor.isSetter;
bool get isSetter => element.isSetter;

@override
String get kind => 'accessor';
Expand All @@ -118,8 +125,6 @@ class Accessor extends ModelElement implements EnclosedElement {
_namePart ??= super.namePart.split('=').first;
return _namePart;
}

PropertyAccessorElement get _accessor => (element as PropertyAccessorElement);
}

/// A getter or setter that is a member of a [Container].
Expand Down Expand Up @@ -153,7 +158,7 @@ class ContainerAccessor extends Accessor with ContainerMember, Inheritable {

ContainerAccessor.inherited(PropertyAccessorElement element, Library library,
PackageGraph packageGraph, this._enclosingElement,
{Member originalMember})
{ExecutableMember originalMember})
: super(element, library, packageGraph, originalMember) {
_isInherited = true;
}
Expand Down
5 changes: 4 additions & 1 deletion lib/src/model/class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,11 @@ class Class extends Container
Iterable<DefinedElementType> get publicMixedInTypes =>
model_utils.filterNonPublic(mixedInTypes);

DefinedElementType _modelType;

@override
DefinedElementType get modelType => super.modelType;
DefinedElementType get modelType =>
_modelType ??= ElementType.from(element.thisType, library, packageGraph);

/// Not the same as superChain as it may include mixins.
/// It's really not even the same as ordinary Dart inheritance, either,
Expand Down
18 changes: 10 additions & 8 deletions lib/src/model/constructor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,17 @@ class Constructor extends ModelElement
return super.characterLocation;
}

@override
ConstructorElement get element => super.element;

@override
// TODO(jcollins-g): Revisit this when dart-lang/sdk#31517 is implemented.
List<TypeParameter> get typeParameters =>
(enclosingElement as Class).typeParameters;

@override
ModelElement get enclosingElement =>
ModelElement.from(_constructor.enclosingElement, library, packageGraph);
ModelElement.from(element.enclosingElement, library, packageGraph);

@override
String get filePath =>
Expand Down Expand Up @@ -61,7 +64,7 @@ class Constructor extends ModelElement
}

@override
bool get isConst => _constructor.isConst;
bool get isConst => element.isConst;

bool get isUnnamedConstructor => name == enclosingElement.name;

Expand All @@ -70,13 +73,14 @@ class Constructor extends ModelElement
'be removed as early as Dartdoc 1.0.0')
bool get isDefaultConstructor => isUnnamedConstructor;

bool get isFactory => _constructor.isFactory;
bool get isFactory => element.isFactory;

@override
String get kind => 'constructor';

@override
DefinedElementType get modelType => super.modelType;
DefinedElementType _modelType;
DefinedElementType get modelType =>
_modelType ??= ElementType.from(element.type, library, packageGraph);

String _name;

Expand Down Expand Up @@ -111,11 +115,9 @@ class Constructor extends ModelElement

String get shortName {
if (name.contains('.')) {
return name.substring(_constructor.enclosingElement.name.length + 1);
return name.substring(element.enclosingElement.name.length + 1);
} else {
return name;
}
}

ConstructorElement get _constructor => (element as ConstructorElement);
}
4 changes: 4 additions & 0 deletions lib/src/model/dynamic.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
// BSD-style license that can be found in the LICENSE file.

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

class Dynamic extends ModelElement {
Dynamic(Element element, PackageGraph packageGraph)
: super(element, null, packageGraph);

UndefinedElementType get modelType =>
throw UnimplementedError('(${element.runtimeType}) $element');

/// [dynamic] is not a real object, and so we can't document it, so there
/// can be nothing canonical for it.
@override
Expand Down
3 changes: 0 additions & 3 deletions lib/src/model/extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,6 @@ class Extension extends Container
return _typeParameters;
}

@override
ParameterizedElementType get modelType => super.modelType;

List<ModelElement> _allModelElements;
@override
List<ModelElement> get allModelElements {
Expand Down
3 changes: 3 additions & 0 deletions lib/src/model/extension_target.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// 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:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';

// TODO(jcollins-g): Mix-in ExtensionTarget on Method, ModelFunction, Typedef,
Expand All @@ -27,6 +28,8 @@ mixin ExtensionTarget on ModelElement {
return _potentiallyApplicableExtensions;
}

ElementType get modelType;

List<Extension> get potentiallyApplicableExtensionsSorted =>
potentiallyApplicableExtensions.toList()..sort(byName);
}
7 changes: 0 additions & 7 deletions lib/src/model/field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ class Field extends ModelElement
assert(getter != null || setter != null);
if (getter != null) getter.enclosingCombo = this;
if (setter != null) setter.enclosingCombo = this;
_setModelType();
}

factory Field.inherited(
Expand Down Expand Up @@ -192,12 +191,6 @@ class Field extends ModelElement
return _sourceCode;
}

void _setModelType() {
if (hasGetter) {
setModelType(getter.modelType);
}
}

@override
Inheritable get overriddenElement => null;
}
1 change: 0 additions & 1 deletion lib/src/model/getter_setter_combo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ mixin GetterSetterCombo on ModelElement {
return buffer.toString();
}

@override
ElementType get modelType {
if (hasGetter) return getter.modelType.returnType;
return setter.parameters.first.modelType;
Expand Down
21 changes: 13 additions & 8 deletions lib/src/model/method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,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:analyzer/src/dart/element/member.dart' show ExecutableMember;
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/model.dart';

Expand All @@ -23,14 +23,14 @@ class Method extends ModelElement

Method.inherited(MethodElement element, this._enclosingContainer,
Library library, PackageGraph packageGraph,
{Member originalMember})
{ExecutableMember originalMember})
: super(element, library, packageGraph, originalMember) {
_isInherited = true;
_calcTypeParameters();
}

void _calcTypeParameters() {
typeParameters = _method.typeParameters.map((f) {
typeParameters = element.typeParameters.map((f) {
return ModelElement.from(f, library, packageGraph) as TypeParameter;
}).toList();
}
Expand All @@ -51,7 +51,7 @@ class Method extends ModelElement
@override
ModelElement get enclosingElement {
_enclosingContainer ??=
ModelElement.from(_method.enclosingElement, library, packageGraph);
ModelElement.from(element.enclosingElement, library, packageGraph);
return _enclosingContainer;
}

Expand All @@ -60,7 +60,7 @@ class Method extends ModelElement
'${enclosingElement.library.dirName}/${enclosingElement.name}/$fileName';

String get fullkind {
if (_method.isAbstract) return 'abstract $kind';
if (element.isAbstract) return 'abstract $kind';
return kind;
}

Expand Down Expand Up @@ -88,13 +88,17 @@ class Method extends ModelElement
}

@override
bool get isStatic => _method.isStatic;
bool get isStatic => element.isStatic;

@override
String get kind => 'method';

@override
CallableElementTypeMixin get modelType => super.modelType;
ExecutableMember get originalMember => super.originalMember;

CallableElementTypeMixin _modelType;
CallableElementTypeMixin get modelType => _modelType ??=
ElementType.from((originalMember ?? element).type, library, packageGraph);

@override
Method get overriddenElement {
Expand All @@ -112,7 +116,8 @@ class Method extends ModelElement
return null;
}

MethodElement get _method => (element as MethodElement);
@override
MethodElement get element => super.element;

/// Methods can not be covariant; always returns false.
@override
Expand Down
43 changes: 1 addition & 42 deletions lib/src/model/model_element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ import 'package:analyzer/dart/element/type.dart' show FunctionType;
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/member.dart'
show ExecutableMember, Member, ParameterMember;
show ExecutableMember, Member;
import 'package:collection/collection.dart';
import 'package:dartdoc/src/dartdoc_options.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/documentation_comment.dart';
import 'package:dartdoc/src/model/feature_set.dart';
import 'package:dartdoc/src/model/model.dart';
Expand Down Expand Up @@ -143,7 +142,6 @@ abstract class ModelElement extends Canonicalization
final Member /*?*/ _originalMember;
final Library /*?*/ _library;

ElementType _modelType;
String _rawDocs;
Documentation __documentation;
UnmodifiableListView<Parameter> _parameters;
Expand Down Expand Up @@ -984,45 +982,6 @@ abstract class ModelElement extends Canonicalization
String get linkedParamsNoMetadataOrNames => _parameterRenderer
.renderLinkedParams(parameters, showMetadata: false, showNames: false);

ElementType get modelType {
var element = this.element;
if (_modelType == null) {
// TODO(jcollins-g): Need an interface for a "member with a type" (or changed object model).
if (_originalMember != null &&
(_originalMember is ExecutableMember ||
_originalMember is ParameterMember)) {
if (_originalMember is ExecutableMember) {
_modelType = ElementType.from(
(_originalMember as ExecutableMember).type,
library,
packageGraph);
} else {
// ParameterMember
_modelType = ElementType.from(
(_originalMember as ParameterMember).type, library, packageGraph);
}
} else if (element is ClassElement) {
_modelType = ElementType.from(element.thisType, library, packageGraph);
} else if (element is TypeAliasElement) {
_modelType =
ElementType.from(element.aliasedType, library, packageGraph);
} else if (element is FunctionTypedElement) {
_modelType = ElementType.from(element.type, library, packageGraph);
} else if (element is ParameterElement) {
_modelType = ElementType.from(element.type, library, packageGraph);
} else if (element is PropertyInducingElement) {
_modelType = ElementType.from(element.type, library, packageGraph);
} else {
throw UnimplementedError('(${element.runtimeType}) $element');
}
}
return _modelType;
}

void setModelType(ElementType type) {
_modelType = type;
}

String _name;

@override
Expand Down
6 changes: 5 additions & 1 deletion lib/src/model/model_function.dart
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,9 @@ class ModelFunctionTyped extends ModelElement
bool get isInherited => false;

@override
DefinedElementType get modelType => super.modelType;
FunctionTypedElement get element => super.element;

DefinedElementType _modelType;
DefinedElementType get modelType =>
_modelType ??= ElementType.from(element.type, library, packageGraph);
}
Loading