Skip to content

Fix parameter and type issues with head analyzer #2687

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 8 commits into from
Jun 18, 2021
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
4 changes: 4 additions & 0 deletions lib/src/element_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,10 @@ mixin Callable implements ElementType {
return _returnType;
}

@override
// TODO(jcollins-g): mustachio should not require this
String get linkedName;

@override
FunctionType get type => _type;
}
Expand Down
248 changes: 22 additions & 226 deletions lib/src/generator/templates.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,26 @@ class _Renderer_Callable extends RendererBase<Callable> {
_propertyMapCache.putIfAbsent(
CT_,
() => {
'linkedName': Property(
getValue: (CT_ c) => c.linkedName,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_String.propertyMap().getValue(name);
return nextProperty.renderVariable(self.getValue(c),
nextProperty, [...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => c.linkedName == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_String(c.linkedName, ast, r.template, sink,
parent: r);
},
),
'parameters': Property(
getValue: (CT_ c) => c.parameters,
renderVariable: (CT_ c, Property<CT_> self,
Expand Down Expand Up @@ -6094,73 +6114,6 @@ class _Renderer_FunctionTemplateData
}
}

void _render_FunctionTypeElementType(FunctionTypeElementType context,
List<MustachioNode> ast, Template template, StringSink sink,
{RendererBase<Object> parent}) {
var renderer =
_Renderer_FunctionTypeElementType(context, parent, template, sink);
renderer.renderBlock(ast);
}

class _Renderer_FunctionTypeElementType
extends RendererBase<FunctionTypeElementType> {
static final Map<Type, Object> _propertyMapCache = {};
static Map<String, Property<CT_>> propertyMap<
CT_ extends FunctionTypeElementType>() =>
_propertyMapCache.putIfAbsent(
CT_,
() => {
..._Renderer_UndefinedElementType.propertyMap<CT_>(),
..._Renderer_Rendered.propertyMap<CT_>(),
..._Renderer_Callable.propertyMap<CT_>(),
'name': Property(
getValue: (CT_ c) => c.name,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_String.propertyMap().getValue(name);
return nextProperty.renderVariable(self.getValue(c),
nextProperty, [...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => c.name == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_String(c.name, ast, r.template, sink, parent: r);
},
),
'typeFormals': Property(
getValue: (CT_ c) => c.typeFormals,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(
c, remainingNames, 'List<TypeParameter>'),
renderIterable: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
return c.typeFormals.map((e) => _render_TypeParameter(
e, ast, r.template, sink,
parent: r));
},
),
});

_Renderer_FunctionTypeElementType(FunctionTypeElementType context,
RendererBase<Object> parent, Template template, StringSink sink)
: super(context, parent, template, sink);

@override
Property<FunctionTypeElementType> getProperty(String key) {
if (propertyMap<FunctionTypeElementType>().containsKey(key)) {
return propertyMap<FunctionTypeElementType>()[key];
} else {
return null;
}
}
}

void _render_FunctionTypedef(FunctionTypedef context, List<MustachioNode> ast,
Template template, StringSink sink,
{RendererBase<Object> parent}) {
Expand All @@ -6185,16 +6138,14 @@ class _Renderer_FunctionTypedef extends RendererBase<FunctionTypedef> {
}
var name = remainingNames.first;
var nextProperty =
_Renderer_FunctionTypeElementType.propertyMap()
.getValue(name);
_Renderer_Callable.propertyMap().getValue(name);
return nextProperty.renderVariable(self.getValue(c),
nextProperty, [...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => c.modelType == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_FunctionTypeElementType(
c.modelType, ast, r.template, sink,
_render_Callable(c.modelType, ast, r.template, sink,
parent: r);
},
),
Expand Down Expand Up @@ -14501,161 +14452,6 @@ class _Renderer_TypedefTemplateData extends RendererBase<TypedefTemplateData> {
}
}

class _Renderer_UndefinedElementType
extends RendererBase<UndefinedElementType> {
static final Map<Type, Object> _propertyMapCache = {};
static Map<String, Property<CT_>> propertyMap<
CT_ extends UndefinedElementType>() =>
_propertyMapCache.putIfAbsent(
CT_,
() => {
..._Renderer_ElementType.propertyMap<CT_>(),
'element': Property(
getValue: (CT_ c) => c.element,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'Element'),
isNullValue: (CT_ c) => c.element == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
renderSimple(c.element, ast, r.template, sink,
parent: r, getters: _invisibleGetters['Element']);
},
),
'instantiatedType': Property(
getValue: (CT_ c) => c.instantiatedType,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'DartType'),
isNullValue: (CT_ c) => c.instantiatedType == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
renderSimple(c.instantiatedType, ast, r.template, sink,
parent: r, getters: _invisibleGetters['DartType']);
},
),
'isPublic': Property(
getValue: (CT_ c) => c.isPublic,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'bool'),
getBool: (CT_ c) => c.isPublic == true,
),
'linkedName': Property(
getValue: (CT_ c) => c.linkedName,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_String.propertyMap().getValue(name);
return nextProperty.renderVariable(self.getValue(c),
nextProperty, [...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => c.linkedName == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_String(c.linkedName, ast, r.template, sink,
parent: r);
},
),
'name': Property(
getValue: (CT_ c) => c.name,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_String.propertyMap().getValue(name);
return nextProperty.renderVariable(self.getValue(c),
nextProperty, [...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => c.name == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_String(c.name, ast, r.template, sink, parent: r);
},
),
'nameWithGenerics': Property(
getValue: (CT_ c) => c.nameWithGenerics,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_String.propertyMap().getValue(name);
return nextProperty.renderVariable(self.getValue(c),
nextProperty, [...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => c.nameWithGenerics == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_String(c.nameWithGenerics, ast, r.template, sink,
parent: r);
},
),
'referenceChildren': Property(
getValue: (CT_ c) => c.referenceChildren,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(
c, remainingNames, 'Map<String, CommentReferable>'),
isNullValue: (CT_ c) => c.referenceChildren == null,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
renderSimple(c.referenceChildren, ast, r.template, sink,
parent: r, getters: _invisibleGetters['Map']);
},
),
'referenceParents': Property(
getValue: (CT_ c) => c.referenceParents,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(
c, remainingNames, 'Iterable<CommentReferable>'),
renderIterable: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
return c.referenceParents.map((e) => renderSimple(
e, ast, r.template, sink,
parent: r,
getters: _invisibleGetters['CommentReferable']));
},
),
'typeArguments': Property(
getValue: (CT_ c) => c.typeArguments,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(
c, remainingNames, 'Iterable<ElementType>'),
renderIterable: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
return c.typeArguments.map((e) => _render_ElementType(
e, ast, r.template, sink,
parent: r));
},
),
});

_Renderer_UndefinedElementType(UndefinedElementType context,
RendererBase<Object> parent, Template template, StringSink sink)
: super(context, parent, template, sink);

@override
Property<UndefinedElementType> getProperty(String key) {
if (propertyMap<UndefinedElementType>().containsKey(key)) {
return propertyMap<UndefinedElementType>()[key];
} else {
return null;
}
}
}

class _Renderer_Warnable extends RendererBase<Warnable> {
static final Map<Type, Object> _propertyMapCache = {};
static Map<String, Property<CT_>> propertyMap<CT_ extends Warnable>() =>
Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/typedef.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,5 @@ class FunctionTypedef extends Typedef {
: super(element, library, packageGraph);

@override
FunctionTypeElementType get modelType => super.modelType;
Callable get modelType => super.modelType;
}
Loading