package org.jf.util; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class AnalysisUtil { private AnalysisUtil() {} public static void writeAllFieldsToBuffer(final Object obj, final StringBuilder out) { final Class<?> thisClass = obj.getClass(); for (final java.lang.reflect.Field f : thisClass.getFields()) { try { out.append(f.getName() + " = "); final Class<?> fType = f.getType(); if (fType.isPrimitive()) { final String n = fType.getName(); if (n.equals("boolean")) { out.append(f.getBoolean(obj) + "\n"); } else if (n.equals("byte")) { out.append(f.getByte(obj) + "\n"); } else if (n.equals("char")) { out.append(f.getChar(obj) + "\n"); } else if (n.equals("double")) { out.append(f.getDouble(obj) + "\n"); } else if (n.equals("float")) { out.append(f.getFloat(obj) + "\n"); } else if (n.equals("int")) { out.append(f.getInt(obj) + "\n"); } else if (n.equals("long")) { out.append(f.getLong(obj) + "\n"); } else if (n.equals("short")) { out.append(f.getShort(obj) + "\n"); } else { throw new IllegalStateException("unknown primitive type: " + fType.getName()); } } else { final Object val = f.get(obj); out.append((val == null ? "null" : val.toString()) + "\n"); } } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } } } public static String getAllFieldsAsString(final Object obj) { final StringBuilder sb = new StringBuilder(); writeAllFieldsToBuffer(obj, sb); return sb.toString(); } private static final Pattern extJarPattern = Pattern.compile("(?:^|\\\\|/)ext.(?:jar|odex)$"); public static boolean isExtJar(String dexFilePath) { Matcher m = extJarPattern.matcher(dexFilePath); return m.find(); } }