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