Loading src/java/com/android/internal/telephony/RIL.java +16 −1 Original line number Diff line number Diff line Loading @@ -5662,7 +5662,22 @@ public class RIL extends BaseCommands implements CommandsInterface { } s = sb.toString(); } else { // Check if toString() was overridden. Java classes created from HIDL have a built-in // toString() method, but AIDL classes only have it if the parcelable contains a // @JavaDerive annotation. Manually convert to String as a backup for AIDL parcelables // missing the annotation. boolean toStringExists = false; try { toStringExists = ret.getClass().getMethod("toString").getDeclaringClass() != Object.class; } catch (NoSuchMethodException e) { Rlog.e(RILJ_LOG_TAG, e.getMessage()); } if (toStringExists) { s = ret.toString(); } else { s = RILUtils.convertToString(ret) + " [convertToString]"; } } return s; } Loading src/java/com/android/internal/telephony/RILUtils.java +96 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,10 @@ import com.android.telephony.Rlog; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.Inet4Address; import java.net.InetAddress; import java.util.ArrayList; Loading @@ -356,6 +360,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; Loading @@ -379,6 +384,10 @@ public class RILUtils { public static final String RADIO_POWER_FAILURE_NO_RF_CALIBRATION_UUID = "316f3801-fa21-4954-a42f-0041eada3b33"; private static final Set<Class> WRAPPER_CLASSES = new HashSet(Arrays.asList( Boolean.class, Character.class, Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class)); /** * Convert to PersoSubstate defined in radio/1.5/types.hal * @param persoType PersoSubState type Loading Loading @@ -5156,6 +5165,93 @@ public class RILUtils { return caps; } private static boolean isPrimitiveOrWrapper(Class c) { return c.isPrimitive() || WRAPPER_CLASSES.contains(c); } /** * Return a general String representation of a class * @param o The object to convert to String * @return A string containing all public non-static local variables of a class */ public static String convertToString(Object o) { if (isPrimitiveOrWrapper(o.getClass()) || o.getClass() == String.class) return o.toString(); if (o.getClass().isArray()) { // Special handling for arrays StringBuilder sb = new StringBuilder("["); boolean added = false; for (Object element : (Object[]) o) { sb.append(convertToString(element)).append(", "); added = true; } if (added) { // Remove extra , sb.delete(sb.length() - 2, sb.length()); } sb.append("]"); return sb.toString(); } StringBuilder sb = new StringBuilder(o.getClass().getSimpleName()); sb.append("{"); Field[] fields = o.getClass().getDeclaredFields(); int tag = -1; try { tag = (int) o.getClass().getDeclaredMethod("getTag").invoke(o); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { loge(e.getMessage()); } if (tag != -1) { // Special handling for unions String tagName = null; try { Method method = o.getClass().getDeclaredMethod("_tagString", int.class); method.setAccessible(true); tagName = (String) method.invoke(o, tag); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { loge(e.getMessage()); } if (tagName != null) { sb.append(tagName); sb.append("="); // From tag, create method name getTag String getTagMethod = "get" + tagName.substring(0, 1).toUpperCase(Locale.ROOT) + tagName.substring(1); Object val = null; try { val = o.getClass().getDeclaredMethod(getTagMethod).invoke(o); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { loge(e.getMessage()); } if (val != null) { sb.append(convertToString(val)); } } } else { boolean added = false; for (Field field : fields) { // Ignore static variables if (Modifier.isStatic(field.getModifiers())) continue; sb.append(field.getName()).append("="); Object val = null; try { val = field.get(o); } catch (IllegalAccessException e) { loge(e.getMessage()); } if (val == null) continue; sb.append(convertToString(val)).append(", "); added = true; } if (added) { // Remove extra , sb.delete(sb.length() - 2, sb.length()); } } sb.append("}"); return sb.toString(); } private static void logd(String log) { Rlog.d("RILUtils", log); } Loading Loading
src/java/com/android/internal/telephony/RIL.java +16 −1 Original line number Diff line number Diff line Loading @@ -5662,7 +5662,22 @@ public class RIL extends BaseCommands implements CommandsInterface { } s = sb.toString(); } else { // Check if toString() was overridden. Java classes created from HIDL have a built-in // toString() method, but AIDL classes only have it if the parcelable contains a // @JavaDerive annotation. Manually convert to String as a backup for AIDL parcelables // missing the annotation. boolean toStringExists = false; try { toStringExists = ret.getClass().getMethod("toString").getDeclaringClass() != Object.class; } catch (NoSuchMethodException e) { Rlog.e(RILJ_LOG_TAG, e.getMessage()); } if (toStringExists) { s = ret.toString(); } else { s = RILUtils.convertToString(ret) + " [convertToString]"; } } return s; } Loading
src/java/com/android/internal/telephony/RILUtils.java +96 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,10 @@ import com.android.telephony.Rlog; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.Inet4Address; import java.net.InetAddress; import java.util.ArrayList; Loading @@ -356,6 +360,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; Loading @@ -379,6 +384,10 @@ public class RILUtils { public static final String RADIO_POWER_FAILURE_NO_RF_CALIBRATION_UUID = "316f3801-fa21-4954-a42f-0041eada3b33"; private static final Set<Class> WRAPPER_CLASSES = new HashSet(Arrays.asList( Boolean.class, Character.class, Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class)); /** * Convert to PersoSubstate defined in radio/1.5/types.hal * @param persoType PersoSubState type Loading Loading @@ -5156,6 +5165,93 @@ public class RILUtils { return caps; } private static boolean isPrimitiveOrWrapper(Class c) { return c.isPrimitive() || WRAPPER_CLASSES.contains(c); } /** * Return a general String representation of a class * @param o The object to convert to String * @return A string containing all public non-static local variables of a class */ public static String convertToString(Object o) { if (isPrimitiveOrWrapper(o.getClass()) || o.getClass() == String.class) return o.toString(); if (o.getClass().isArray()) { // Special handling for arrays StringBuilder sb = new StringBuilder("["); boolean added = false; for (Object element : (Object[]) o) { sb.append(convertToString(element)).append(", "); added = true; } if (added) { // Remove extra , sb.delete(sb.length() - 2, sb.length()); } sb.append("]"); return sb.toString(); } StringBuilder sb = new StringBuilder(o.getClass().getSimpleName()); sb.append("{"); Field[] fields = o.getClass().getDeclaredFields(); int tag = -1; try { tag = (int) o.getClass().getDeclaredMethod("getTag").invoke(o); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { loge(e.getMessage()); } if (tag != -1) { // Special handling for unions String tagName = null; try { Method method = o.getClass().getDeclaredMethod("_tagString", int.class); method.setAccessible(true); tagName = (String) method.invoke(o, tag); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { loge(e.getMessage()); } if (tagName != null) { sb.append(tagName); sb.append("="); // From tag, create method name getTag String getTagMethod = "get" + tagName.substring(0, 1).toUpperCase(Locale.ROOT) + tagName.substring(1); Object val = null; try { val = o.getClass().getDeclaredMethod(getTagMethod).invoke(o); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { loge(e.getMessage()); } if (val != null) { sb.append(convertToString(val)); } } } else { boolean added = false; for (Field field : fields) { // Ignore static variables if (Modifier.isStatic(field.getModifiers())) continue; sb.append(field.getName()).append("="); Object val = null; try { val = field.get(o); } catch (IllegalAccessException e) { loge(e.getMessage()); } if (val == null) continue; sb.append(convertToString(val)).append(", "); added = true; } if (added) { // Remove extra , sb.delete(sb.length() - 2, sb.length()); } } sb.append("}"); return sb.toString(); } private static void logd(String log) { Rlog.d("RILUtils", log); } Loading