visitFieldElement method
void
visitFieldElement(
- FieldElement element
)
override
Implementation
@override
void visitFieldElement(FieldElement element) {
if (element.isPrivate) {
return;
}
final type = element.type.toString();
final name = element.name;
final isFinal = element.isFinal;
final hasSetter = element.setter != null;
final isSilent = silentAnnotation.hasAnnotationOf(element);
final isCollection = element.type.isDartCoreList ||
element.type.isDartCoreMap ||
element.type.isDartCoreSet;
final needSubscription =
(isCollection && !isSilent) || !(isSilent || isFinal);
// add stream
if (needSubscription) {
classBuilder.methods.add(
Method(
(builder) => builder
..name = '\$${name}Stream'
..returns = Reference('Stream<$type>')
..type = MethodType.getter
..body = Code('return _\$src.${name.streamName};'),
),
);
}
// add getter
classBuilder.methods.add(
Method(
(builder) => builder
..name = name
..annotations.add(CodeExpression(Code('override')))
..returns = Reference(type)
..type = MethodType.getter
..body = Code('''
${!needSubscription ? '' : '_\$observer.subscribe(_\$src.${name.subjectName}, ${name.streamName});'}
return _\$src.$name;
'''),
),
);
if (!hasSetter) {
return;
}
classBuilder.methods.add(
Method(
(builder) => builder
..name = name
..annotations.add(CodeExpression(Code('override')))
..type = MethodType.setter
..requiredParameters.add(
Parameter(
(builder) => builder
..type = Reference(type)
..name = 'val'
..named = false,
),
)
..body = Code('_\$src.$name = val;'),
),
);
}