private void emitBind(TypeSpec.Builder builder) {
MethodSpec.Builder bindBuilder =
MethodSpec.methodBuilder("bind")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(get(Dart.Finder.class), "finder")
.addParameter(bestGuess(target.getFQN()), "target");
bindBuilder.addStatement(
"target.$L = new $T()",
target.navigationModelFieldName,
get(target.navigationModelPackage, target.navigationModelClass));
bindBuilder.addStatement(
"$T.bind(finder, target.$L, target)",
get(target.navigationModelPackage, target.navigationModelClass + Dart.EXTRA_BINDER_SUFFIX),
target.navigationModelFieldName);
if (target.parentPackage != null) {
bindBuilder.addStatement(
"$T.assign(target, target.$L)",
bestGuess(target.getParentFQN() + NAVIGATION_MODEL_BINDER_SUFFIX),
target.navigationModelFieldName);
}
builder.addMethod(bindBuilder.build());
}