summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android/databinding/tool/expr/BracketExpr.java
diff options
context:
space:
mode:
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.java41
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() + ']';
}
}