197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar/*
297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * Copyright (C) 2015 The Android Open Source Project
397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * you may not use this file except in compliance with the License.
597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * You may obtain a copy of the License at
697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * Unless required by applicable law or agreed to in writing, software
897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * See the License for the specific language governing permissions and
1197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar * limitations under the License.
1297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar */
1397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
14fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool.reflection.java;
1597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
1697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.Bindable;
18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelClass;
19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelMethod;
20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.SdkUtil;
21fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.TypeUtil;
22fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount
2397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarimport java.lang.reflect.Method;
2497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarimport java.lang.reflect.Modifier;
2597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarimport java.util.List;
2697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
27fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mountpublic class JavaMethod extends ModelMethod {
2897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public final Method mMethod;
2997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
3097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public JavaMethod(Method method) {
3197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        mMethod = method;
3297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
3397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
3497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
3597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
3697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public ModelClass getDeclaringClass() {
3797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return new JavaClass(mMethod.getDeclaringClass());
3897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
3997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
4097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
4197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public ModelClass[] getParameterTypes() {
4297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        Class[] parameterTypes = mMethod.getParameterTypes();
4397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        ModelClass[] parameterClasses = new ModelClass[parameterTypes.length];
4497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        for (int i = 0; i < parameterTypes.length; i++) {
4597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar            parameterClasses[i] = new JavaClass(parameterTypes[i]);
4697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        }
4797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return parameterClasses;
4897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
4997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
5097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
5197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public String getName() {
5297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return mMethod.getName();
5397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
5497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
5597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
5697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public ModelClass getReturnType(List<ModelClass> args) {
5797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return new JavaClass(mMethod.getReturnType());
5897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
5997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
6097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
61fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    public boolean isVoid() {
62fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount        return void.class.equals(mMethod.getReturnType());
63fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    }
64fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount
65fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    @Override
6697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public boolean isPublic() {
6797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return Modifier.isPublic(mMethod.getModifiers());
6897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
6997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
7097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
7197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public boolean isStatic() {
7297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return Modifier.isStatic(mMethod.getModifiers());
7397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
7497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
7597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
76716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public boolean isAbstract() {
77716ba89e7f459f49ea85070d4710c1d79d715298George Mount        return Modifier.isAbstract(mMethod.getModifiers());
78716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
79716ba89e7f459f49ea85070d4710c1d79d715298George Mount
80716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @Override
81fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    public boolean isBindable() {
82fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount        return mMethod.getAnnotation(Bindable.class) != null;
83fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    }
84fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount
85fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    @Override
8697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public int getMinApi() {
8797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return SdkUtil.getMinApi(this);
8897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
8997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar
9097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    @Override
9197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    public String getJniDescription() {
9297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar        return TypeUtil.getInstance().getDescription(this);
9397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar    }
94fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount
95fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    @Override
96fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    public boolean isVarArgs() {
97fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount        return false;
98fa9fe12980ef1103fabe33bf5ff0e2f53042a204George Mount    }
9997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar}
100