1c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount/*
2c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * Copyright (C) 2015 The Android Open Source Project
3c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount *
4c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * you may not use this file except in compliance with the License.
6c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * You may obtain a copy of the License at
7c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount *
8c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount *
10c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * Unless required by applicable law or agreed to in writing, software
11c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * See the License for the specific language governing permissions and
14c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount * limitations under the License.
15c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount */
16c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
17c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountpackage android.databinding.tool.expr;
18c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
19c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountimport android.databinding.tool.reflection.ModelAnalyzer;
20c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountimport android.databinding.tool.reflection.ModelClass;
21e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mountimport android.databinding.tool.writer.KCode;
22c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
23c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountimport java.util.List;
24c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
25c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountpublic class BitShiftExpr extends Expr {
26c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    final String mOp;
27c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    BitShiftExpr(Expr left, String op, Expr right) {
28c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        super(left, right);
29c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        mOp = op;
30c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
31c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
32c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    @Override
33c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    protected String computeUniqueKey() {
342611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyar        return join(getLeft().getUniqueKey(), mOp, getRight().getUniqueKey());
35c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
36c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
37c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    @Override
38c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) {
39c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return getLeft().getResolvedType();
40c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
41c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
42c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    @Override
43c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    protected List<Dependency> constructDependencies() {
44c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return constructDynamicChildrenDependencies();
45c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
46c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
47c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    public String getOp() {
48c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return mOp;
49c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
50c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
51c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    public Expr getLeft() {
52c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return getChildren().get(0);
53c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
54c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
55c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    public Expr getRight() {
56c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return getChildren().get(1);
57c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
58e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount
59e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount    @Override
60d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    protected KCode generateCode(boolean expand) {
61e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount        return new KCode()
62d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount                .app("", getLeft().toCode(expand))
63e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount                .app(getOp())
64d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount                .app("", getRight().toCode(expand));
65d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    }
66d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount
67d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    @Override
68d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    public String getInvertibleError() {
69d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount        return "Bit shift operators cannot be inverted in two-way binding";
70e52882df6130221462bf07f5f2b52de5c4b0f8deGeorge Mount    }
71c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount}
72