1e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount/*
2e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * Copyright (C) 2015 The Android Open Source Project
3e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount *
4e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * you may not use this file except in compliance with the License.
6e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * You may obtain a copy of the License at
7e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount *
8e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount *
10e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * Unless required by applicable law or agreed to in writing, software
11e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * See the License for the specific language governing permissions and
14e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount * limitations under the License.
15e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount */
16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool.reflection;
17e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
18e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mountpublic class Callable {
19e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
2088ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    public enum Type {
21e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        METHOD,
22e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        FIELD
23e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
24e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
25019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public static final int DYNAMIC = 1;
26019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public static final int CAN_BE_INVALIDATED = 1 << 1;
27019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public static final int STATIC = 1 << 2;
28019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
29e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public final Type type;
30e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
31e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public final String name;
32e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
33d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    public final String setterName;
34d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount
3579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount    public final ModelClass resolvedType;
36e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
37019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    private final int mFlags;
38e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
3988ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    private final int mParameterCount;
4088ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar
41d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    public Callable(Type type, String name, String setterName, ModelClass resolvedType,
42d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount                    int parameterCount, int flags) {
43e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        this.type = type;
44e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        this.name = name;
45e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        this.resolvedType = resolvedType;
4688ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar        mParameterCount = parameterCount;
47d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount        this.setterName = setterName;
48019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        mFlags = flags;
49e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
50e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
51e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public String getTypeCodeName() {
52e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        return resolvedType.toJavaCode();
53e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
54e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
5588ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    public int getParameterCount() {
5688ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar        return mParameterCount;
5788ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    }
5888ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar
59019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public boolean isDynamic() {
60019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        return (mFlags & DYNAMIC) != 0;
61019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    }
62019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
63019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public boolean isStatic() {
64019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        return (mFlags & STATIC) != 0;
65019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    }
66019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
67019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public boolean canBeInvalidated() {
68019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        return (mFlags & CAN_BE_INVALIDATED) != 0;
69019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    }
70019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
71716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public int getMinApi() {
72716ba89e7f459f49ea85070d4710c1d79d715298George Mount        return 1;
73716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
74716ba89e7f459f49ea85070d4710c1d79d715298George Mount
75e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    @Override
76e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public String toString() {
77e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        return "Callable{" +
78e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                "type=" + type +
79e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                ", name='" + name + '\'' +
80e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                ", resolvedType=" + resolvedType +
81019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar                ", isDynamic=" + isDynamic() +
82019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar                ", canBeInvalidated=" + canBeInvalidated() +
83019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar                ", static=" + isStatic() +
84e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                '}';
85e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
86e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount}
87