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
186047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.jetbrains.annotations.Nullable;
19e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
206047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarpublic class Callable {
2188ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    public enum Type {
22e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        METHOD,
23e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        FIELD
24e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
25e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
26019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public static final int DYNAMIC = 1;
27019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public static final int CAN_BE_INVALIDATED = 1 << 1;
28019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public static final int STATIC = 1 << 2;
29019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
30e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public final Type type;
31e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
32e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public final String name;
33e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
34d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    public final String setterName;
35d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount
3679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount    public final ModelClass resolvedType;
37e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
386047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar    @Nullable
396047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar    public final ModelMethod method;
406047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar
41019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    private final int mFlags;
42e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
4388ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    private final int mParameterCount;
4488ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar
45d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount    public Callable(Type type, String name, String setterName, ModelClass resolvedType,
466047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar            int parameterCount, int flags, ModelMethod method) {
47e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        this.type = type;
48e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        this.name = name;
49e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        this.resolvedType = resolvedType;
5088ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar        mParameterCount = parameterCount;
51d3f2b9229472c9dae9bf4ae8b3e2d653b5653b01George Mount        this.setterName = setterName;
52019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        mFlags = flags;
536047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar        this.method = method;
54e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
55e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
56e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public String getTypeCodeName() {
57e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        return resolvedType.toJavaCode();
58e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
59e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount
6088ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    public int getParameterCount() {
6188ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar        return mParameterCount;
6288ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar    }
6388ce44ccc65e74a8553244ca246cc9f4c48483e0Yigit Boyar
64019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public boolean isDynamic() {
65019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        return (mFlags & DYNAMIC) != 0;
66019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    }
67019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
68019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public boolean isStatic() {
69019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        return (mFlags & STATIC) != 0;
70019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    }
71019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
72019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    public boolean canBeInvalidated() {
73019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar        return (mFlags & CAN_BE_INVALIDATED) != 0;
74019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar    }
75019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar
76716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public int getMinApi() {
77716ba89e7f459f49ea85070d4710c1d79d715298George Mount        return 1;
78716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
79716ba89e7f459f49ea85070d4710c1d79d715298George Mount
80e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    @Override
81e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    public String toString() {
82e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount        return "Callable{" +
83e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                "type=" + type +
84e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                ", name='" + name + '\'' +
85e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                ", resolvedType=" + resolvedType +
86019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar                ", isDynamic=" + isDynamic() +
87019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar                ", canBeInvalidated=" + canBeInvalidated() +
88019c36b97c7c172ac03997f6bf170e65b2ed7fe4Yigit Boyar                ", static=" + isStatic() +
896047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar                ", method=" + method +
90e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount                '}';
91e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount    }
92e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount}
93