1e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar/* 2e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Copyright (C) 2015 The Android Open Source Project 3e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * 4e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * you may not use this file except in compliance with the License. 6e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * You may obtain a copy of the License at 7e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * 8e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * 10e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Unless required by applicable law or agreed to in writing, software 11e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * See the License for the specific language governing permissions and 14e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * limitations under the License. 15e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar */ 16e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 17e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarpackage android.databinding.tool.expr; 18e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 19e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.tool.reflection.ModelAnalyzer; 20e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.tool.reflection.ModelClass; 21e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mountimport android.databinding.tool.writer.KCode; 22e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 23e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport java.util.List; 24e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 25e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar/** 26e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * This is a special expression that is created when we have an adapter that has multiple 27e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * parameters. 28e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * <p> 29e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * When it is detected, we create a new binding with this argument list expression and merge N 30e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * bindings into a new one so that rest of the code generation logic works as expected. 31e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar */ 32e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarpublic class ArgListExpr extends Expr { 33e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar private int mId; 34e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar public ArgListExpr(int id, Iterable<Expr> children) { 35e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar super(children); 36e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mId = id; 37e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 38e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 39e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar @Override 40e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar protected String computeUniqueKey() { 41e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar return "ArgList[" + mId + "]" + super.computeUniqueKey(); 42e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 43e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 44e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar @Override 45d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount protected KCode generateCode(boolean expand) { 46e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount throw new IllegalStateException("should never try to convert an argument expressions" 47e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount + " into code"); 48e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount } 49e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount 50e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount @Override 51e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) { 52e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar return modelAnalyzer.findClass(Void.class); 53e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 54e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 55e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar @Override 56e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar protected List<Dependency> constructDependencies() { 57e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar return super.constructDynamicChildrenDependencies(); 58e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 59e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 60e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar @Override 61e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar public boolean canBeEvaluatedToAVariable() { 62e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar return false; 63e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 64d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount 65d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount @Override 66d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount public String getInvertibleError() { 67d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount return "Merged bindings are not invertible."; 68d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount } 69e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar} 70