String
linkedParams({bool showMetadata: true, bool showNames: true, String separator: ', ' })
Source
String linkedParams(
{bool showMetadata: true, bool showNames: true, String separator: ', '}) {
String renderParam(Parameter param, String suffix) {
StringBuffer buf = new StringBuffer();
buf.write('<span class="parameter" id="${param.htmlId}">');
if (showMetadata && param.hasAnnotations) {
param.annotations.forEach((String annotation) {
buf.write('<span>$annotation</span> ');
});
}
if (param.modelType.isFunctionType) {
var returnTypeName;
bool isTypedef = param.modelType.element is Typedef;
if (isTypedef) {
returnTypeName = param.modelType.linkedName;
} else {
returnTypeName = param.modelType.createLinkedReturnTypeName();
}
buf.write('<span class="type-annotation">${returnTypeName}</span>');
if (showNames) {
buf.write(' <span class="parameter-name">${param.name}</span>');
}
if (!isTypedef) {
buf.write('(');
buf.write(param.modelType.element
.linkedParams(showNames: showNames, showMetadata: showMetadata));
buf.write(')');
}
} else if (param.modelType != null && param.modelType.element != null) {
var mt = param.modelType;
String typeName = "";
if (mt != null && !mt.isDynamic) {
typeName = mt.linkedName;
}
if (typeName.isNotEmpty) {
buf.write('<span class="type-annotation">$typeName</span>');
}
if (typeName.isNotEmpty && showNames && param.name.isNotEmpty)
buf.write(' ');
if (showNames && param.name.isNotEmpty) {
buf.write('<span class="parameter-name">${param.name}</span>');
}
}
if (param.hasDefaultValue) {
if (param.isOptionalNamed) {
buf.write(': ');
} else {
buf.write(' = ');
}
buf.write('<span class="default-value">${param.defaultValue}</span>');
}
buf.write('${suffix}</span>');
return buf.toString();
}
List<Parameter> requiredParams =
parameters.where((Parameter p) => !p.isOptional).toList();
List<Parameter> positionalParams =
parameters.where((Parameter p) => p.isOptionalPositional).toList();
List<Parameter> namedParams =
parameters.where((Parameter p) => p.isOptionalNamed).toList();
StringBuffer builder = new StringBuffer();
// prefix
if (requiredParams.isEmpty && positionalParams.isNotEmpty) {
builder.write('[');
} else if (requiredParams.isEmpty && namedParams.isNotEmpty) {
builder.write('{');
}
// index over params
for (Parameter param in requiredParams) {
bool isLast = param == requiredParams.last;
String ext;
if (isLast && positionalParams.isNotEmpty) {
ext = ', [';
} else if (isLast && namedParams.isNotEmpty) {
ext = ', {';
} else {
ext = isLast ? '' : ', ';
}
builder.write(renderParam(param, ext));
builder.write(' ');
}
for (Parameter param in positionalParams) {
bool isLast = param == positionalParams.last;
builder.write(renderParam(param, isLast ? '' : ', '));
builder.write(' ');
}
for (Parameter param in namedParams) {
bool isLast = param == namedParams.last;
builder.write(renderParam(param, isLast ? '' : ', '));
builder.write(' ');
}
// suffix
if (namedParams.isNotEmpty) {
builder.write('}');
} else if (positionalParams.isNotEmpty) {
builder.write(']');
}
return builder.toString().trim();
}