@@ -13,7 +13,9 @@ class Renderer {
13
13
14
14
final Context context;
15
15
16
- const Renderer(this.name, this.context);
16
+ final Set<Type> visibleTypes;
17
+
18
+ const Renderer(this.name, this.context, {this.visibleTypes = const {}});
17
19
}
18
20
19
21
class Context<T> {
@@ -23,7 +25,7 @@ class Context<T> {
23
25
};
24
26
25
27
const _libraryFrontMatter = '''
26
- @Renderer(#renderFoo, Context<Foo>())
28
+ @Renderer(#renderFoo, Context<Foo>(), visibleTypes: {Bar} )
27
29
library foo;
28
30
import 'package:mustachio/annotations.dart';
29
31
''' ;
@@ -137,14 +139,11 @@ class Bar {}
137
139
getValue: (CT_ c) => c.b1,
138
140
renderVariable:
139
141
(CT_ c, Property<CT_> self, List<String> remainingNames) {
140
- if (remainingNames.isEmpty) return self.getValue(c).toString();
141
- var name = remainingNames.first;
142
- if (_Renderer_bool.propertyMap().containsKey(name)) {
143
- var nextProperty = _Renderer_bool.propertyMap()[name];
144
- return nextProperty.renderVariable(
145
- self.getValue(c), nextProperty, [...remainingNames.skip(1)]);
142
+ if (remainingNames.isEmpty) {
143
+ return self.getValue(c).toString();
146
144
} else {
147
- throw MustachioResolutionError();
145
+ throw MustachioResolutionError(
146
+ \' Failed to resolve simple renderer use @visibleToMustache\' );
148
147
}
149
148
},
150
149
getBool: (CT_ c) => c.b1 == true,
@@ -158,22 +157,19 @@ class Bar {}
158
157
getValue: (CT_ c) => c.l1,
159
158
renderVariable:
160
159
(CT_ c, Property<CT_> self, List<String> remainingNames) {
161
- if (remainingNames.isEmpty) return self.getValue(c).toString();
162
- var name = remainingNames.first;
163
- if (_Renderer_List.propertyMap().containsKey(name)) {
164
- var nextProperty = _Renderer_List.propertyMap()[name];
165
- return nextProperty.renderVariable(
166
- self.getValue(c), nextProperty, [...remainingNames.skip(1)]);
160
+ if (remainingNames.isEmpty) {
161
+ return self.getValue(c).toString();
167
162
} else {
168
- throw MustachioResolutionError();
163
+ throw MustachioResolutionError(
164
+ 'Failed to resolve simple renderer use @visibleToMustache');
169
165
}
170
166
},
171
167
isEmptyIterable: (CT_ c) => c.l1?.isEmpty ?? true,
172
168
renderIterable:
173
169
(CT_ c, RendererBase<CT_> r, List<MustachioNode> ast) {
174
170
var buffer = StringBuffer();
175
171
for (var e in c.l1) {
176
- buffer.write(_render_int (e, ast, parent: r));
172
+ buffer.write(renderSimple (e, ast, parent: r));
177
173
}
178
174
return buffer.toString();
179
175
},
@@ -187,19 +183,16 @@ class Bar {}
187
183
getValue: (CT_ c) => c.s1,
188
184
renderVariable:
189
185
(CT_ c, Property<CT_> self, List<String> remainingNames) {
190
- if (remainingNames.isEmpty) return self.getValue(c).toString();
191
- var name = remainingNames.first;
192
- if (_Renderer_String.propertyMap().containsKey(name)) {
193
- var nextProperty = _Renderer_String.propertyMap()[name];
194
- return nextProperty.renderVariable(
195
- self.getValue(c), nextProperty, [...remainingNames.skip(1)]);
186
+ if (remainingNames.isEmpty) {
187
+ return self.getValue(c).toString();
196
188
} else {
197
- throw MustachioResolutionError();
189
+ throw MustachioResolutionError(
190
+ 'Failed to resolve simple renderer use @visibleToMustache');
198
191
}
199
192
},
200
193
isNullValue: (CT_ c) => c.s1 == null,
201
194
renderValue: (CT_ c, RendererBase<CT_> r, List<MustachioNode> ast) {
202
- return _render_String (c.s1, ast, parent: r);
195
+ return renderSimple (c.s1, ast, parent: r);
203
196
},
204
197
),
205
198
''' ));
@@ -276,6 +269,7 @@ import 'package:mustachio/annotations.dart';
276
269
test ('builds a renderer for a generic, bounded type' , () async {
277
270
await testMustachioBuilder ('''
278
271
class Foo<T extends num> {}
272
+ class Bar {}
279
273
''' );
280
274
var renderersLibrary = await resolveGeneratedLibrary (writer);
281
275
@@ -288,9 +282,6 @@ class Foo<T extends num> {}
288
282
expect (fooRendererClass.typeParameters, hasLength (1 ));
289
283
var cBound = fooRenderFunction.typeParameters.single.bound;
290
284
expect (cBound.getDisplayString (withNullability: false ), equals ('num' ));
291
-
292
- expect (renderersLibrary.getTopLevelFunction ('_render_num' ), isNotNull);
293
- expect (renderersLibrary.getType ('_Renderer_num' ), isNotNull);
294
285
});
295
286
296
287
group ('does not generate a renderer' , () {
@@ -305,6 +296,7 @@ class Foo {
305
296
void set setter1(Setter s);
306
297
Method method1(Method m);
307
298
}
299
+ class Bar {}
308
300
class Static {}
309
301
class Private {}
310
302
class Setter {}
@@ -332,6 +324,11 @@ class Method {}
332
324
expect (renderersLibrary.getTopLevelFunction ('_render_Method' ), isNull);
333
325
expect (renderersLibrary.getType ('_Renderer_Method' ), isNull);
334
326
});
327
+
328
+ test ('for types not @visibleToMustache' , () {
329
+ expect (renderersLibrary.getTopLevelFunction ('_render_String' ), isNull);
330
+ expect (renderersLibrary.getType ('_Renderer_String' ), isNull);
331
+ });
335
332
});
336
333
}
337
334
0 commit comments