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