diff options
Diffstat (limited to 'compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java')
-rw-r--r-- | compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java b/compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java index 0829ad04..a9a61556 100644 --- a/compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java +++ b/compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java @@ -21,6 +21,8 @@ import android.databinding.tool.reflection.ModelClass; import android.databinding.tool.solver.ExecutionPath; import android.databinding.tool.writer.KCode; +import com.google.common.collect.Lists; + import java.util.ArrayList; import java.util.List; @@ -90,7 +92,7 @@ public class BracketExpr extends Expr { protected String computeUniqueKey() { final String targetKey = getTarget().computeUniqueKey(); - return addTwoWay(join(targetKey, "$", getArg().computeUniqueKey(), "$")); + return join(targetKey, "$", getArg().computeUniqueKey(), "$"); } @Override @@ -115,7 +117,7 @@ public class BracketExpr extends Expr { } @Override - protected KCode generateCode(boolean expand) { + protected KCode generateCode() { String cast = argCastsInteger() ? "(Integer) " : ""; switch (getAccessor()) { case ARRAY: { @@ -152,12 +154,33 @@ public class BracketExpr extends Expr { } @Override - public KCode toInverseCode(KCode value) { - String cast = argCastsInteger() ? "(Integer) " : ""; - return new KCode(). - app("setTo(", getTarget().toCode(true)). - app(", "). - app(cast, getArg().toCode(true)). - app(", ", value).app(");"); + public Expr generateInverse(ExprModel model, Expr value, String bindingClassName) { + Expr arg = getArg().cloneToModel(model); + arg = argCastsInteger() + ? model.castExpr("int", model.castExpr("Integer", arg)) + : arg; + StaticIdentifierExpr viewDataBinding = + model.staticIdentifier(ModelAnalyzer.VIEW_DATA_BINDING); + viewDataBinding.setUserDefinedType(ModelAnalyzer.VIEW_DATA_BINDING); + ModelClass targetType = getTarget().getResolvedType(); + if ((targetType.isList() || targetType.isMap()) && + value.getResolvedType().isPrimitive()) { + ModelClass boxed = value.getResolvedType().box(); + value = model.castExpr(boxed.toJavaCode(), value); + } + List<Expr> args = Lists.newArrayList(getTarget().cloneToModel(model), arg, value); + MethodCallExpr setter = model.methodCall(viewDataBinding, "setTo", args); + setter.setAllowProtected(); + return setter; + } + + @Override + public Expr cloneToModel(ExprModel model) { + return model.bracketExpr(getTarget().cloneToModel(model), getArg().cloneToModel(model)); + } + + @Override + public String toString() { + return getTarget().toString() + '[' + getArg() + ']'; } } |