Search in sources :

Example 41 with Member

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);
    }
}
Also used : XC_MethodHook(de.robv.android.xposed.XC_MethodHook) Constructor(java.lang.reflect.Constructor) ArrayList(java.util.ArrayList) Method(java.lang.reflect.Method) XposedHelpers.findClass(de.robv.android.xposed.XposedHelpers.findClass) Member(java.lang.reflect.Member)

Example 42 with Member

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());
    }
}
Also used : Member(java.lang.reflect.Member)

Example 43 with Member

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);
    }
}
Also used : TypeLiteral(com.google.inject.TypeLiteral) InjectionPoint(com.google.inject.spi.InjectionPoint) Dependency(com.google.inject.spi.Dependency) Member(java.lang.reflect.Member) Key(com.google.inject.Key)

Example 44 with Member

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)");
}
Also used : Member(java.lang.reflect.Member)

Example 45 with Member

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;
}
Also used : Member(java.lang.reflect.Member)

Aggregations

Member (java.lang.reflect.Member)59 Method (java.lang.reflect.Method)13 Annotation (java.lang.annotation.Annotation)8 AccessibleObject (java.lang.reflect.AccessibleObject)7 MetaInfo (org.qi4j.api.common.MetaInfo)7 Field (java.lang.reflect.Field)6 Optional (org.qi4j.api.common.Optional)6 ValueConstraintsInstance (org.qi4j.runtime.composite.ValueConstraintsInstance)6 ValueConstraintsModel (org.qi4j.runtime.composite.ValueConstraintsModel)6 TypeVariable (java.lang.reflect.TypeVariable)5 NodeId (com.google.inject.grapher.NodeId)4 Constructor (java.lang.reflect.Constructor)4 Type (java.lang.reflect.Type)4 ArrayList (java.util.ArrayList)4 ManyAssociation (org.qi4j.api.association.ManyAssociation)4 NamedAssociation (org.qi4j.api.association.NamedAssociation)4 QualifiedName (org.qi4j.api.common.QualifiedName)4 ManyAssociationModel (org.qi4j.runtime.association.ManyAssociationModel)4 NamedAssociationModel (org.qi4j.runtime.association.NamedAssociationModel)4 HashSet (java.util.HashSet)3