Skip to content

Commit dedab6e

Browse files
authored
Fix parameter and type issues with head analyzer (#2687)
* Reduce scope of parameter nullability test to just the nullability fields * Updates * rebuild / don't update deprecated * Fix problems with mustachio missing a mixin inheritance * rebuild * Reduce parallelization to try to stop random crashes * Maybe reintroduce expectLater * parallelization on
1 parent 451c82d commit dedab6e

File tree

6 files changed

+77
-300
lines changed

6 files changed

+77
-300
lines changed

lib/src/element_type.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,10 @@ mixin Callable implements ElementType {
373373
return _returnType;
374374
}
375375

376+
@override
377+
// TODO(jcollins-g): mustachio should not require this
378+
String get linkedName;
379+
376380
@override
377381
FunctionType get type => _type;
378382
}

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 22 additions & 226 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,26 @@ class _Renderer_Callable extends RendererBase<Callable> {
516516
_propertyMapCache.putIfAbsent(
517517
CT_,
518518
() => {
519+
'linkedName': Property(
520+
getValue: (CT_ c) => c.linkedName,
521+
renderVariable:
522+
(CT_ c, Property<CT_> self, List<String> remainingNames) {
523+
if (remainingNames.isEmpty) {
524+
return self.getValue(c).toString();
525+
}
526+
var name = remainingNames.first;
527+
var nextProperty =
528+
_Renderer_String.propertyMap().getValue(name);
529+
return nextProperty.renderVariable(self.getValue(c),
530+
nextProperty, [...remainingNames.skip(1)]);
531+
},
532+
isNullValue: (CT_ c) => c.linkedName == null,
533+
renderValue: (CT_ c, RendererBase<CT_> r,
534+
List<MustachioNode> ast, StringSink sink) {
535+
_render_String(c.linkedName, ast, r.template, sink,
536+
parent: r);
537+
},
538+
),
519539
'parameters': Property(
520540
getValue: (CT_ c) => c.parameters,
521541
renderVariable: (CT_ c, Property<CT_> self,
@@ -6094,73 +6114,6 @@ class _Renderer_FunctionTemplateData
60946114
}
60956115
}
60966116

6097-
void _render_FunctionTypeElementType(FunctionTypeElementType context,
6098-
List<MustachioNode> ast, Template template, StringSink sink,
6099-
{RendererBase<Object> parent}) {
6100-
var renderer =
6101-
_Renderer_FunctionTypeElementType(context, parent, template, sink);
6102-
renderer.renderBlock(ast);
6103-
}
6104-
6105-
class _Renderer_FunctionTypeElementType
6106-
extends RendererBase<FunctionTypeElementType> {
6107-
static final Map<Type, Object> _propertyMapCache = {};
6108-
static Map<String, Property<CT_>> propertyMap<
6109-
CT_ extends FunctionTypeElementType>() =>
6110-
_propertyMapCache.putIfAbsent(
6111-
CT_,
6112-
() => {
6113-
..._Renderer_UndefinedElementType.propertyMap<CT_>(),
6114-
..._Renderer_Rendered.propertyMap<CT_>(),
6115-
..._Renderer_Callable.propertyMap<CT_>(),
6116-
'name': Property(
6117-
getValue: (CT_ c) => c.name,
6118-
renderVariable:
6119-
(CT_ c, Property<CT_> self, List<String> remainingNames) {
6120-
if (remainingNames.isEmpty) {
6121-
return self.getValue(c).toString();
6122-
}
6123-
var name = remainingNames.first;
6124-
var nextProperty =
6125-
_Renderer_String.propertyMap().getValue(name);
6126-
return nextProperty.renderVariable(self.getValue(c),
6127-
nextProperty, [...remainingNames.skip(1)]);
6128-
},
6129-
isNullValue: (CT_ c) => c.name == null,
6130-
renderValue: (CT_ c, RendererBase<CT_> r,
6131-
List<MustachioNode> ast, StringSink sink) {
6132-
_render_String(c.name, ast, r.template, sink, parent: r);
6133-
},
6134-
),
6135-
'typeFormals': Property(
6136-
getValue: (CT_ c) => c.typeFormals,
6137-
renderVariable: (CT_ c, Property<CT_> self,
6138-
List<String> remainingNames) =>
6139-
self.renderSimpleVariable(
6140-
c, remainingNames, 'List<TypeParameter>'),
6141-
renderIterable: (CT_ c, RendererBase<CT_> r,
6142-
List<MustachioNode> ast, StringSink sink) {
6143-
return c.typeFormals.map((e) => _render_TypeParameter(
6144-
e, ast, r.template, sink,
6145-
parent: r));
6146-
},
6147-
),
6148-
});
6149-
6150-
_Renderer_FunctionTypeElementType(FunctionTypeElementType context,
6151-
RendererBase<Object> parent, Template template, StringSink sink)
6152-
: super(context, parent, template, sink);
6153-
6154-
@override
6155-
Property<FunctionTypeElementType> getProperty(String key) {
6156-
if (propertyMap<FunctionTypeElementType>().containsKey(key)) {
6157-
return propertyMap<FunctionTypeElementType>()[key];
6158-
} else {
6159-
return null;
6160-
}
6161-
}
6162-
}
6163-
61646117
void _render_FunctionTypedef(FunctionTypedef context, List<MustachioNode> ast,
61656118
Template template, StringSink sink,
61666119
{RendererBase<Object> parent}) {
@@ -6185,16 +6138,14 @@ class _Renderer_FunctionTypedef extends RendererBase<FunctionTypedef> {
61856138
}
61866139
var name = remainingNames.first;
61876140
var nextProperty =
6188-
_Renderer_FunctionTypeElementType.propertyMap()
6189-
.getValue(name);
6141+
_Renderer_Callable.propertyMap().getValue(name);
61906142
return nextProperty.renderVariable(self.getValue(c),
61916143
nextProperty, [...remainingNames.skip(1)]);
61926144
},
61936145
isNullValue: (CT_ c) => c.modelType == null,
61946146
renderValue: (CT_ c, RendererBase<CT_> r,
61956147
List<MustachioNode> ast, StringSink sink) {
6196-
_render_FunctionTypeElementType(
6197-
c.modelType, ast, r.template, sink,
6148+
_render_Callable(c.modelType, ast, r.template, sink,
61986149
parent: r);
61996150
},
62006151
),
@@ -14501,161 +14452,6 @@ class _Renderer_TypedefTemplateData extends RendererBase<TypedefTemplateData> {
1450114452
}
1450214453
}
1450314454

14504-
class _Renderer_UndefinedElementType
14505-
extends RendererBase<UndefinedElementType> {
14506-
static final Map<Type, Object> _propertyMapCache = {};
14507-
static Map<String, Property<CT_>> propertyMap<
14508-
CT_ extends UndefinedElementType>() =>
14509-
_propertyMapCache.putIfAbsent(
14510-
CT_,
14511-
() => {
14512-
..._Renderer_ElementType.propertyMap<CT_>(),
14513-
'element': Property(
14514-
getValue: (CT_ c) => c.element,
14515-
renderVariable: (CT_ c, Property<CT_> self,
14516-
List<String> remainingNames) =>
14517-
self.renderSimpleVariable(c, remainingNames, 'Element'),
14518-
isNullValue: (CT_ c) => c.element == null,
14519-
renderValue: (CT_ c, RendererBase<CT_> r,
14520-
List<MustachioNode> ast, StringSink sink) {
14521-
renderSimple(c.element, ast, r.template, sink,
14522-
parent: r, getters: _invisibleGetters['Element']);
14523-
},
14524-
),
14525-
'instantiatedType': Property(
14526-
getValue: (CT_ c) => c.instantiatedType,
14527-
renderVariable: (CT_ c, Property<CT_> self,
14528-
List<String> remainingNames) =>
14529-
self.renderSimpleVariable(c, remainingNames, 'DartType'),
14530-
isNullValue: (CT_ c) => c.instantiatedType == null,
14531-
renderValue: (CT_ c, RendererBase<CT_> r,
14532-
List<MustachioNode> ast, StringSink sink) {
14533-
renderSimple(c.instantiatedType, ast, r.template, sink,
14534-
parent: r, getters: _invisibleGetters['DartType']);
14535-
},
14536-
),
14537-
'isPublic': Property(
14538-
getValue: (CT_ c) => c.isPublic,
14539-
renderVariable: (CT_ c, Property<CT_> self,
14540-
List<String> remainingNames) =>
14541-
self.renderSimpleVariable(c, remainingNames, 'bool'),
14542-
getBool: (CT_ c) => c.isPublic == true,
14543-
),
14544-
'linkedName': Property(
14545-
getValue: (CT_ c) => c.linkedName,
14546-
renderVariable:
14547-
(CT_ c, Property<CT_> self, List<String> remainingNames) {
14548-
if (remainingNames.isEmpty) {
14549-
return self.getValue(c).toString();
14550-
}
14551-
var name = remainingNames.first;
14552-
var nextProperty =
14553-
_Renderer_String.propertyMap().getValue(name);
14554-
return nextProperty.renderVariable(self.getValue(c),
14555-
nextProperty, [...remainingNames.skip(1)]);
14556-
},
14557-
isNullValue: (CT_ c) => c.linkedName == null,
14558-
renderValue: (CT_ c, RendererBase<CT_> r,
14559-
List<MustachioNode> ast, StringSink sink) {
14560-
_render_String(c.linkedName, ast, r.template, sink,
14561-
parent: r);
14562-
},
14563-
),
14564-
'name': Property(
14565-
getValue: (CT_ c) => c.name,
14566-
renderVariable:
14567-
(CT_ c, Property<CT_> self, List<String> remainingNames) {
14568-
if (remainingNames.isEmpty) {
14569-
return self.getValue(c).toString();
14570-
}
14571-
var name = remainingNames.first;
14572-
var nextProperty =
14573-
_Renderer_String.propertyMap().getValue(name);
14574-
return nextProperty.renderVariable(self.getValue(c),
14575-
nextProperty, [...remainingNames.skip(1)]);
14576-
},
14577-
isNullValue: (CT_ c) => c.name == null,
14578-
renderValue: (CT_ c, RendererBase<CT_> r,
14579-
List<MustachioNode> ast, StringSink sink) {
14580-
_render_String(c.name, ast, r.template, sink, parent: r);
14581-
},
14582-
),
14583-
'nameWithGenerics': Property(
14584-
getValue: (CT_ c) => c.nameWithGenerics,
14585-
renderVariable:
14586-
(CT_ c, Property<CT_> self, List<String> remainingNames) {
14587-
if (remainingNames.isEmpty) {
14588-
return self.getValue(c).toString();
14589-
}
14590-
var name = remainingNames.first;
14591-
var nextProperty =
14592-
_Renderer_String.propertyMap().getValue(name);
14593-
return nextProperty.renderVariable(self.getValue(c),
14594-
nextProperty, [...remainingNames.skip(1)]);
14595-
},
14596-
isNullValue: (CT_ c) => c.nameWithGenerics == null,
14597-
renderValue: (CT_ c, RendererBase<CT_> r,
14598-
List<MustachioNode> ast, StringSink sink) {
14599-
_render_String(c.nameWithGenerics, ast, r.template, sink,
14600-
parent: r);
14601-
},
14602-
),
14603-
'referenceChildren': Property(
14604-
getValue: (CT_ c) => c.referenceChildren,
14605-
renderVariable: (CT_ c, Property<CT_> self,
14606-
List<String> remainingNames) =>
14607-
self.renderSimpleVariable(
14608-
c, remainingNames, 'Map<String, CommentReferable>'),
14609-
isNullValue: (CT_ c) => c.referenceChildren == null,
14610-
renderValue: (CT_ c, RendererBase<CT_> r,
14611-
List<MustachioNode> ast, StringSink sink) {
14612-
renderSimple(c.referenceChildren, ast, r.template, sink,
14613-
parent: r, getters: _invisibleGetters['Map']);
14614-
},
14615-
),
14616-
'referenceParents': Property(
14617-
getValue: (CT_ c) => c.referenceParents,
14618-
renderVariable: (CT_ c, Property<CT_> self,
14619-
List<String> remainingNames) =>
14620-
self.renderSimpleVariable(
14621-
c, remainingNames, 'Iterable<CommentReferable>'),
14622-
renderIterable: (CT_ c, RendererBase<CT_> r,
14623-
List<MustachioNode> ast, StringSink sink) {
14624-
return c.referenceParents.map((e) => renderSimple(
14625-
e, ast, r.template, sink,
14626-
parent: r,
14627-
getters: _invisibleGetters['CommentReferable']));
14628-
},
14629-
),
14630-
'typeArguments': Property(
14631-
getValue: (CT_ c) => c.typeArguments,
14632-
renderVariable: (CT_ c, Property<CT_> self,
14633-
List<String> remainingNames) =>
14634-
self.renderSimpleVariable(
14635-
c, remainingNames, 'Iterable<ElementType>'),
14636-
renderIterable: (CT_ c, RendererBase<CT_> r,
14637-
List<MustachioNode> ast, StringSink sink) {
14638-
return c.typeArguments.map((e) => _render_ElementType(
14639-
e, ast, r.template, sink,
14640-
parent: r));
14641-
},
14642-
),
14643-
});
14644-
14645-
_Renderer_UndefinedElementType(UndefinedElementType context,
14646-
RendererBase<Object> parent, Template template, StringSink sink)
14647-
: super(context, parent, template, sink);
14648-
14649-
@override
14650-
Property<UndefinedElementType> getProperty(String key) {
14651-
if (propertyMap<UndefinedElementType>().containsKey(key)) {
14652-
return propertyMap<UndefinedElementType>()[key];
14653-
} else {
14654-
return null;
14655-
}
14656-
}
14657-
}
14658-
1465914455
class _Renderer_Warnable extends RendererBase<Warnable> {
1466014456
static final Map<Type, Object> _propertyMapCache = {};
1466114457
static Map<String, Property<CT_>> propertyMap<CT_ extends Warnable>() =>

lib/src/model/typedef.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,5 +89,5 @@ class FunctionTypedef extends Typedef {
8989
: super(element, library, packageGraph);
9090

9191
@override
92-
FunctionTypeElementType get modelType => super.modelType;
92+
Callable get modelType => super.modelType;
9393
}

0 commit comments

Comments
 (0)