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;
21c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
22c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountimport java.util.List;
23c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
24c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mountpublic class UnaryExpr extends Expr {
25c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    final String mOp;
26c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    UnaryExpr(String op, Expr expr) {
27c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        super(expr);
28c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        mOp = op;
29c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
30c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
31c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    @Override
32c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    protected String computeUniqueKey() {
332611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyar        return join(getOpStr(), getExpr().getUniqueKey());
34c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
35c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
36c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    @Override
37c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) {
38731b74f7f44e67312a1fc4161c4e0aae221b2417Yigit Boyar        return getExpr().getResolvedType();
39c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
40c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
41c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    @Override
42c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    protected List<Dependency> constructDependencies() {
43c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return constructDynamicChildrenDependencies();
44c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
45c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
46c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    private String getOpStr() {
47c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        switch (mOp.charAt(0)) {
48c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount            case '~' : return "bitNot";
49c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount            case '!' : return "logicalNot";
50c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount            case '-' : return "unaryMinus";
51c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount            case '+' : return "unaryPlus";
52c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        }
53c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return mOp;
54c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
55c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
56c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    public String getOp() {
57c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return mOp;
58c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
59c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount
60c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    public Expr getExpr() {
61c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount        return getChildren().get(0);
62c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount    }
63c6bcb7bf9cab139b3141c4644e5b3267deed5213George Mount}
64