AnnotationMethod.java revision 79fc7f3727815ab35bb1bb2e060bfb7db3176eed
179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount/* 279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * Copyright (C) 2015 The Android Open Source Project 379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * 479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * you may not use this file except in compliance with the License. 679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * You may obtain a copy of the License at 779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * 879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * 1079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * Unless required by applicable law or agreed to in writing, software 1179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 1279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * See the License for the specific language governing permissions and 1479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount * limitations under the License. 1579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount */ 1679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountpackage com.android.databinding.reflection; 1779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 1879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport java.util.List; 1979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 2079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport javax.lang.model.element.ExecutableElement; 2179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport javax.lang.model.element.Modifier; 2279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport javax.lang.model.element.VariableElement; 2379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport javax.lang.model.type.DeclaredType; 2479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport javax.lang.model.type.ExecutableType; 2579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountimport javax.lang.model.type.TypeMirror; 2679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 2779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mountpublic class AnnotationMethod implements ModelMethod { 2879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount final ExecutableElement mMethod; 2979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount final DeclaredType mDeclaringType; 3079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 3179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public AnnotationMethod(DeclaredType declaringType, ExecutableElement method) { 3279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount mDeclaringType = declaringType; 3379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount mMethod = method; 3479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 3579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 3679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount @Override 3779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public ModelClass getDeclaringClass() { 3879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return new AnnotationClass(mDeclaringType); 3979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 4079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 4179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount @Override 4279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public ModelClass[] getParameterTypes() { 4379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount List<? extends VariableElement> parameters = mMethod.getParameters(); 4479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount ModelClass[] parameterTypes = new ModelClass[parameters.size()]; 4579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount for (int i = 0; i < parameters.size(); i++) { 4679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount parameterTypes[i] = new AnnotationClass(parameters.get(i).asType()); 4779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 4879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return parameterTypes; 4979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 5079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 5179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount @Override 5279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public String getName() { 5379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return mMethod.getSimpleName().toString(); 5479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 5579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 5679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount @Override 5779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public ModelClass getReturnType(List<ModelClass> args) { 5879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount ExecutableType executableType = (ExecutableType) AnnotationAnalyzer.instance.getTypeUtils().asMemberOf(mDeclaringType, mMethod); 5979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount TypeMirror returnType = executableType.getReturnType(); 6079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount // TODO: support argument-supplied types 6179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount // for example: public T[] toArray(T[] arr) 6279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return new AnnotationClass(returnType); 6379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 6479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 6579fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount @Override 6679fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public boolean isPublic() { 6779fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return mMethod.getModifiers().contains(Modifier.PUBLIC); 6879fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 6979fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount 7079fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount @Override 7179fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount public boolean isStatic() { 7279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount return mMethod.getModifiers().contains(Modifier.STATIC); 7379fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount } 7479fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount} 75