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 16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelClass; 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelMethod; 18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.TypeUtil; 19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.util.L; 2097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 2197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarimport java.lang.reflect.Array; 2297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarimport java.lang.reflect.Method; 2397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 2497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyarpublic class JavaTypeUtil extends TypeUtil { 2597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 2697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar @Override 2797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar public String getDescription(ModelClass modelClass) { 2897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return modelClass.getCanonicalName().replace('.', '/'); 2997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 3097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 3197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar @Override 3297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar public String getDescription(ModelMethod modelMethod) { 3397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar Method method = ((JavaMethod) modelMethod).mMethod; 3497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar StringBuilder sb = new StringBuilder(); 3597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar sb.append(method.getName()); 3697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar sb.append("("); 3797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar for (Class param : method.getParameterTypes()) { 3897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar sb.append(getDescription(param)); 3997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 4097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar sb.append(")"); 4197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar sb.append(getDescription(method.getReturnType())); 4297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return sb.toString(); 4397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 4497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 4597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar private String getDescription(Class klass) { 4697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (klass == null) { 4797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar throw new UnsupportedOperationException(); 4897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 4997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (boolean.class.equals(klass)) { 5097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return BOOLEAN; 5197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 5297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (byte.class.equals(klass)) { 5397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return BYTE; 5497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 5597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (short.class.equals(klass)) { 5697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return SHORT; 5797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 5897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (int.class.equals(klass)) { 5997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return INT; 6097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 6197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (long.class.equals(klass)) { 6297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return LONG; 6397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 6497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (char.class.equals(klass)) { 6597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return CHAR; 6697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 6797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (float.class.equals(klass)) { 6897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return FLOAT; 6997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 7097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (double.class.equals(klass)) { 7197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return DOUBLE; 7297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 7397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (void.class.equals(klass)) { 7497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return VOID; 7597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 7697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (Object.class.isAssignableFrom(klass)) { 7797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return CLASS_PREFIX + klass.getCanonicalName().replace('.', '/') + CLASS_SUFFIX; 7897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 7997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar if (Array.class.isAssignableFrom(klass)) { 8097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar return ARRAY + getDescription(klass.getComponentType()); 8197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 8297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar 8397d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar UnsupportedOperationException ex 8497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar = new UnsupportedOperationException("cannot understand type " 8597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar + klass.toString() + ", kind:"); 8697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar L.e(ex, "cannot create JNI type for %s", klass.getCanonicalName()); 8797d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar throw ex; 8897d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar } 8997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar} 90