17c1b078ca84336caba7f811709836562bd5550d6George Mount/* 27c1b078ca84336caba7f811709836562bd5550d6George Mount * Copyright (C) 2015 The Android Open Source Project 37c1b078ca84336caba7f811709836562bd5550d6George Mount * 47c1b078ca84336caba7f811709836562bd5550d6George Mount * Licensed under the Apache License, Version 2.0 (the "License"); 57c1b078ca84336caba7f811709836562bd5550d6George Mount * you may not use this file except in compliance with the License. 67c1b078ca84336caba7f811709836562bd5550d6George Mount * You may obtain a copy of the License at 77c1b078ca84336caba7f811709836562bd5550d6George Mount * 87c1b078ca84336caba7f811709836562bd5550d6George Mount * http://www.apache.org/licenses/LICENSE-2.0 97c1b078ca84336caba7f811709836562bd5550d6George Mount * 107c1b078ca84336caba7f811709836562bd5550d6George Mount * Unless required by applicable law or agreed to in writing, software 117c1b078ca84336caba7f811709836562bd5550d6George Mount * distributed under the License is distributed on an "AS IS" BASIS, 127c1b078ca84336caba7f811709836562bd5550d6George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c1b078ca84336caba7f811709836562bd5550d6George Mount * See the License for the specific language governing permissions and 147c1b078ca84336caba7f811709836562bd5550d6George Mount * limitations under the License. 157c1b078ca84336caba7f811709836562bd5550d6George Mount */ 167c1b078ca84336caba7f811709836562bd5550d6George Mount 177c1b078ca84336caba7f811709836562bd5550d6George Mountpackage android.databinding.tool.expr; 187c1b078ca84336caba7f811709836562bd5550d6George Mount 19d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mountimport android.databinding.tool.reflection.ModelAnalyzer; 20d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mountimport android.databinding.tool.reflection.ModelClass; 217c1b078ca84336caba7f811709836562bd5550d6George Mountimport android.databinding.tool.writer.KCode; 227c1b078ca84336caba7f811709836562bd5550d6George Mount 237c1b078ca84336caba7f811709836562bd5550d6George Mountimport java.util.ArrayList; 247c1b078ca84336caba7f811709836562bd5550d6George Mountimport java.util.List; 257c1b078ca84336caba7f811709836562bd5550d6George Mount 267c1b078ca84336caba7f811709836562bd5550d6George Mountpublic class BuiltInVariableExpr extends IdentifierExpr { 277c1b078ca84336caba7f811709836562bd5550d6George Mount private final String mAccessCode; 287c1b078ca84336caba7f811709836562bd5550d6George Mount 297c1b078ca84336caba7f811709836562bd5550d6George Mount BuiltInVariableExpr(String name, String type, String accessCode) { 307c1b078ca84336caba7f811709836562bd5550d6George Mount super(name); 317c1b078ca84336caba7f811709836562bd5550d6George Mount super.setUserDefinedType(type); 327c1b078ca84336caba7f811709836562bd5550d6George Mount this.mAccessCode = accessCode; 337c1b078ca84336caba7f811709836562bd5550d6George Mount } 347c1b078ca84336caba7f811709836562bd5550d6George Mount 357c1b078ca84336caba7f811709836562bd5550d6George Mount @Override 367c1b078ca84336caba7f811709836562bd5550d6George Mount public boolean isDynamic() { 377c1b078ca84336caba7f811709836562bd5550d6George Mount return false; 387c1b078ca84336caba7f811709836562bd5550d6George Mount } 397c1b078ca84336caba7f811709836562bd5550d6George Mount 407c1b078ca84336caba7f811709836562bd5550d6George Mount @Override 41d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) { 42d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount ModelClass modelClass = super.resolveType(modelAnalyzer); 43d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount return modelClass; 44d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount } 45d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount 46d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount @Override 477c1b078ca84336caba7f811709836562bd5550d6George Mount protected List<Dependency> constructDependencies() { 489784c9aaedeb863018f5fcaa0a598e8e2f8ed2f3Yigit Boyar return new ArrayList<Dependency>(); 497c1b078ca84336caba7f811709836562bd5550d6George Mount } 507c1b078ca84336caba7f811709836562bd5550d6George Mount 517c1b078ca84336caba7f811709836562bd5550d6George Mount @Override 52bb4a033fcd5cd20e5be46ef8ead442dc7db2454dGeorge Mount protected KCode generateCode() { 537c1b078ca84336caba7f811709836562bd5550d6George Mount if (mAccessCode == null) { 547c1b078ca84336caba7f811709836562bd5550d6George Mount return new KCode().app(mName); 557c1b078ca84336caba7f811709836562bd5550d6George Mount } else { 567c1b078ca84336caba7f811709836562bd5550d6George Mount return new KCode().app(mAccessCode); 577c1b078ca84336caba7f811709836562bd5550d6George Mount } 587c1b078ca84336caba7f811709836562bd5550d6George Mount } 597c1b078ca84336caba7f811709836562bd5550d6George Mount 607c1b078ca84336caba7f811709836562bd5550d6George Mount public boolean isDeclared() { 617c1b078ca84336caba7f811709836562bd5550d6George Mount return false; 627c1b078ca84336caba7f811709836562bd5550d6George Mount } 63d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount 64d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount @Override 65d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount public String getInvertibleError() { 66d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount return "Built-in variables may not be the target of two-way binding"; 67d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount } 68bb4a033fcd5cd20e5be46ef8ead442dc7db2454dGeorge Mount 69bb4a033fcd5cd20e5be46ef8ead442dc7db2454dGeorge Mount @Override 70bb4a033fcd5cd20e5be46ef8ead442dc7db2454dGeorge Mount public Expr cloneToModel(ExprModel model) { 71bb4a033fcd5cd20e5be46ef8ead442dc7db2454dGeorge Mount return model.builtInVariable(mName, mUserDefinedType, mAccessCode); 72bb4a033fcd5cd20e5be46ef8ead442dc7db2454dGeorge Mount } 737c1b078ca84336caba7f811709836562bd5550d6George Mount} 74