use of java.lang.reflect.Member in project XPrivacy by M66B.
the class XPrivacy method hook.
private static void hook(final XHook hook, ClassLoader classLoader, String secret) {
// Get meta data
Hook md = PrivacyManager.getHook(hook.getRestrictionName(), hook.getSpecifier());
if (md == null) {
String message = "Not found hook=" + hook;
mListHookError.add(message);
Util.log(hook, Log.ERROR, message);
} else if (!md.isAvailable())
return;
// Provide secret
if (secret == null)
Util.log(hook, Log.ERROR, "Secret missing hook=" + hook);
hook.setSecret(secret);
try {
// Find class
Class<?> hookClass = null;
try {
hookClass = findClass(hook.getClassName(), classLoader);
} catch (Throwable ex) {
String message = "Class not found hook=" + hook;
int level = (md != null && md.isOptional() ? Log.WARN : Log.ERROR);
if ("isXposedEnabled".equals(hook.getMethodName()))
level = Log.WARN;
if (level == Log.ERROR)
mListHookError.add(message);
Util.log(hook, level, message);
return;
}
// Get members
List<Member> listMember = new ArrayList<Member>();
List<Class<?>[]> listParameters = new ArrayList<Class<?>[]>();
Class<?> clazz = hookClass;
while (clazz != null && !"android.content.ContentProvider".equals(clazz.getName())) try {
if (hook.getMethodName() == null) {
for (Constructor<?> constructor : clazz.getDeclaredConstructors()) if (!Modifier.isAbstract(constructor.getModifiers()) && Modifier.isPublic(constructor.getModifiers()) ? hook.isVisible() : !hook.isVisible())
listMember.add(constructor);
break;
} else {
for (Method method : clazz.getDeclaredMethods()) if (method.getName().equals(hook.getMethodName()) && !Modifier.isAbstract(method.getModifiers()) && (Modifier.isPublic(method.getModifiers()) ? hook.isVisible() : !hook.isVisible())) {
// Check for same function in sub class
boolean different = true;
for (Class<?>[] parameters : listParameters) {
boolean same = (parameters.length == method.getParameterTypes().length);
for (int p = 0; same && p < parameters.length; p++) if (!parameters[p].equals(method.getParameterTypes()[p])) {
same = false;
break;
}
if (same) {
different = false;
break;
}
}
if (different) {
listMember.add(method);
listParameters.add(method.getParameterTypes());
}
}
}
clazz = clazz.getSuperclass();
} catch (Throwable ex) {
if (ex.getClass().equals(ClassNotFoundException.class) || ex.getClass().equals(NoClassDefFoundError.class))
break;
else
throw ex;
}
// Hook members
for (Member member : listMember) try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
if ((member.getModifiers() & Modifier.NATIVE) != 0)
Util.log(hook, Log.WARN, "Native method=" + member);
XposedBridge.hookMethod(member, new XMethodHook(hook));
} catch (NoSuchFieldError ex) {
Util.log(hook, Log.WARN, ex.toString());
} catch (Throwable ex) {
mListHookError.add(ex.toString());
Util.bug(hook, ex);
}
// Check if members found
if (listMember.isEmpty() && !hook.getClassName().startsWith("com.google.android.gms")) {
String message = "Method not found hook=" + hook;
int level = (md != null && md.isOptional() ? Log.WARN : Log.ERROR);
if ("isXposedEnabled".equals(hook.getMethodName()))
level = Log.WARN;
if (level == Log.ERROR)
mListHookError.add(message);
Util.log(hook, level, message);
}
} catch (Throwable ex) {
mListHookError.add(ex.toString());
Util.bug(hook, ex);
}
}
use of java.lang.reflect.Member in project roboguice by roboguice.
the class Errors method formatInjectionPoint.
public static void formatInjectionPoint(Formatter formatter, Dependency<?> dependency, InjectionPoint injectionPoint, ElementSource elementSource) {
Member member = injectionPoint.getMember();
Class<? extends Member> memberType = Classes.memberType(member);
if (memberType == Field.class) {
dependency = injectionPoint.getDependencies().get(0);
formatter.format(" while locating %s%n", convert(dependency.getKey(), elementSource));
formatter.format(" for field at %s%n", StackTraceElements.forMember(member));
} else if (dependency != null) {
formatter.format(" while locating %s%n", convert(dependency.getKey(), elementSource));
formatter.format(" for parameter %s at %s%n", dependency.getParameterIndex(), StackTraceElements.forMember(member));
} else {
formatSource(formatter, injectionPoint.getMember());
}
}
use of java.lang.reflect.Member in project roboguice by roboguice.
the class Errors method formatSource.
public static void formatSource(Formatter formatter, Object source, ElementSource elementSource) {
String modules = moduleSourceString(elementSource);
if (source instanceof Dependency) {
Dependency<?> dependency = (Dependency<?>) source;
InjectionPoint injectionPoint = dependency.getInjectionPoint();
if (injectionPoint != null) {
formatInjectionPoint(formatter, dependency, injectionPoint, elementSource);
} else {
formatSource(formatter, dependency.getKey(), elementSource);
}
} else if (source instanceof InjectionPoint) {
formatInjectionPoint(formatter, null, (InjectionPoint) source, elementSource);
} else if (source instanceof Class) {
formatter.format(" at %s%s%n", StackTraceElements.forType((Class<?>) source), modules);
} else if (source instanceof Member) {
formatter.format(" at %s%s%n", StackTraceElements.forMember((Member) source), modules);
} else if (source instanceof TypeLiteral) {
formatter.format(" while locating %s%s%n", source, modules);
} else if (source instanceof Key) {
Key<?> key = (Key<?>) source;
formatter.format(" while locating %s%n", convert(key, elementSource));
} else {
formatter.format(" at %s%s%n", source, modules);
}
}
use of java.lang.reflect.Member in project quasar by puniverse.
the class Fiber method printTraceLine.
private static void printTraceLine(StringBuilder stackTrace, ExtendedStackTraceElement ste) {
final Member m = SuspendableHelper.lookupMethod(ste);
stackTrace.append("\n\tat ").append(ste.getMethod() == null ? ste.toString(m) : ste.toString());
if (SuspendableHelper.isOptimized(m))
stackTrace.append(" (optimized)");
}
use of java.lang.reflect.Member in project quasar by puniverse.
the class ExtendedStackTraceHotSpot method getMethod.
@Override
protected Member getMethod(ExtendedStackTraceElement este) {
final HotSpotExtendedStackTraceElement heste = (HotSpotExtendedStackTraceElement) este;
Member[] ms = getMethods(heste.getDeclaringClass());
for (Member m : ms) {
if (heste.methodSlot == getSlot(m))
return m;
}
return null;
}
Aggregations