Source
@Deprecated("Internal Use Only")
void addMemberHelper(
mirrors.MethodMirror declaration, String path, StringBuffer sb,
{bool isStatic: false, String memberName}) {
if (!declaration.isConstructor) {
var jsName = _getJsMemberName(declaration);
path = (path != null && path.isNotEmpty) ? "${path}.${jsName}" : jsName;
}
var name = memberName != null ? memberName : _getDeclarationName(declaration);
if (declaration.isConstructor) {
sb.write("factory");
} else if (isStatic) {
sb.write("static");
} else {
sb.write("patch");
}
sb.write(" ");
if (declaration.isGetter) {
sb.write("get $name => ${_JS_LIBRARY_PREFIX}.maybeWrapTypedInterop(${_accessJsPath(path)});");
} else if (declaration.isSetter) {
sb.write("set $name(v) => ${_JS_LIBRARY_PREFIX}.maybeWrapTypedInterop(${_accessJsPathSetter(path)});");
} else {
sb.write("$name(");
bool hasOptional = false;
int i = 0;
var args = <String>[];
for (var p in declaration.parameters) {
assert(!p.isNamed); // XXX throw
assert(!p.hasDefaultValue);
if (i > 0) {
sb.write(", ");
}
if (p.isOptional && !hasOptional) {
sb.write("[");
hasOptional = true;
}
var arg = "p$i";
args.add(arg);
sb.write(arg);
if (p.isOptional) {
sb.write("=${_UNDEFINED_VAR}");
}
i++;
}
if (hasOptional) {
sb.write("]");
}
// TODO(jacobr):
sb.write(") => ");
sb.write('${_JS_LIBRARY_PREFIX}.maybeWrapTypedInterop(');
if (declaration.isConstructor) {
sb.write("new ${_JS_LIBRARY_PREFIX}.JsObject(");
}
sb
..write(_accessJsPath(path))
..write(declaration.isConstructor ? "," : ".apply(")
..write("[${args.join(",")}]");
if (hasOptional) {
sb.write(".takeWhile((i) => i != ${_UNDEFINED_VAR}).toList()");
}
sb.write("));");
}
sb.write("\n");
}