1d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/* 2d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 4d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * you may not use this file except in compliance with the License. 6d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * You may obtain a copy of the License at 7d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 8d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 10d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * See the License for the specific language governing permissions and 14d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * limitations under the License. 15d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 16d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool.expr; 18d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelAnalyzer; 20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelClass; 21e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mountimport android.databinding.tool.writer.KCode; 22d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 232611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyarimport java.util.ArrayList; 24d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.List; 25d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 26d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class SymbolExpr extends Expr { 27d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar String mText; 28d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar Class mType; 29d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 30d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar SymbolExpr(String text, Class type) { 31d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar super(); 32d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mText = text; 33d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mType = type; 34d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 35d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 36d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String getText() { 37d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return mText; 38d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 39d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 40d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 4179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) { 4279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return modelAnalyzer.findClass(mType); 43d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 44d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 45d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 46d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar protected String computeUniqueKey() { 4796e1c821dd446d1ed78f8ae61131550588f60a24George Mount return mType.getSimpleName() + mText; 48d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 49d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 50d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Override 51d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount public String getInvertibleError() { 52d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount return "Symbol '" + mText + "' cannot be the target of a two-way binding expression"; 53d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount } 54d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount 55d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount @Override 56d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount protected KCode generateCode(boolean expand) { 57e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount return new KCode(getText()); 58e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount } 59e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount 60e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount @Override 61d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar protected List<Dependency> constructDependencies() { 629784c9aaedeb863018f5fcaa0a598e8e2f8ed2f3Yigit Boyar return new ArrayList<Dependency>(); 63d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 64d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar} 65