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 => ${_accessJsPath(path)};");
} else if (declaration.isSetter) {
sb.write("set $name(v) {\n"
" ${_JS_LIBRARY_PREFIX}.safeForTypedInterop(v);\n"
" return ${_accessJsPathSetter(path)};\n"
"}\n");
} else {
sb.write("$name(");
bool hasOptional = false;
int i = 0;
var args = <String>[];
for (var p in declaration.parameters) {
assert(!p.isNamed); // TODO(jacobr): 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(") {\n");
for (var arg in args) {
sb.write(" ${_JS_LIBRARY_PREFIX}.safeForTypedInterop($arg);\n");
}
sb.write(" return ");
if (declaration.isConstructor) {
sb.write("${_JS_LIBRARY_PREFIX}.JsNative.callConstructor(");
sb..write(_accessJsPath(path))..write(",");
} else {
sb.write(_accessJsPathCallMethodHelper(path));
}
sb.write("[${args.join(",")}]");
if (hasOptional) {
sb.write(".takeWhile((i) => i != ${_UNDEFINED_VAR}).toList()");
}
sb.write(");");
sb.write("}\n");
}
sb.write("\n");
}