Search in sources :

Example 56 with Member

use of java.lang.reflect.Member in project immutables by immutables.

the class KeyExtractorTest method immutables.

@Test
void immutables() {
    KeyExtractor extractor = KeyExtractor.defaultFactory().create(Person.class);
    check(extractor.metadata().isKeyDefined());
    check(extractor.metadata().isExpression());
    check(extractor.metadata().keys()).hasSize(1);
    Member member = (Member) Visitors.toPath(extractor.metadata().keys().get(0)).element();
    check(member.getName()).is("id");
    ImmutablePerson person = new PersonGenerator().next();
    check(extractor.extract(person)).is(person.id());
}
Also used : PersonGenerator(org.immutables.criteria.personmodel.PersonGenerator) ImmutablePerson(org.immutables.criteria.personmodel.ImmutablePerson) Member(java.lang.reflect.Member) Test(org.junit.jupiter.api.Test)

Example 57 with Member

use of java.lang.reflect.Member in project immutables by immutables.

the class MemberLookupCache method find.

Optional<Member> find(Class<?> type, String path) {
    ClassAndPath classAndPath = ImmutableClassAndPath.of(type, path);
    Member member = this.member.computeIfAbsent(classAndPath, key -> {
        ClassScanner scanner = this.scanner.computeIfAbsent(key.type(), MemberLookupCache::createScannerForType);
        return scanner.stream().filter(m -> m.getName().equals(path)).findFirst().orElse(null);
    });
    return Optional.ofNullable(member);
}
Also used : ClassScanner(org.immutables.criteria.reflect.ClassScanner) Member(java.lang.reflect.Member)

Example 58 with Member

use of java.lang.reflect.Member in project crate by crate.

the class Errors method formatSource.

public static void formatSource(Formatter formatter, Object source) {
    if (source instanceof Dependency) {
        Dependency<?> dependency = (Dependency<?>) source;
        InjectionPoint injectionPoint = dependency.getInjectionPoint();
        if (injectionPoint != null) {
            formatInjectionPoint(formatter, dependency, injectionPoint);
        } else {
            formatSource(formatter, dependency.getKey());
        }
    } else if (source instanceof InjectionPoint) {
        formatInjectionPoint(formatter, null, (InjectionPoint) source);
    } else if (source instanceof Class) {
        formatter.format("  at %s%n", StackTraceElements.forType((Class<?>) source));
    } else if (source instanceof Member) {
        formatter.format("  at %s%n", StackTraceElements.forMember((Member) source));
    } else if (source instanceof TypeLiteral) {
        formatter.format("  while locating %s%n", source);
    } else if (source instanceof Key) {
        Key<?> key = (Key<?>) source;
        formatter.format("  while locating %s%n", convert(key));
    } else {
        formatter.format("  at %s%n", source);
    }
}
Also used : TypeLiteral(org.elasticsearch.common.inject.TypeLiteral) InjectionPoint(org.elasticsearch.common.inject.spi.InjectionPoint) Dependency(org.elasticsearch.common.inject.spi.Dependency) Member(java.lang.reflect.Member) Key(org.elasticsearch.common.inject.Key)

Example 59 with Member

use of java.lang.reflect.Member in project quasar by puniverse.

the class Fiber method checkInstrumentation.

@SuppressWarnings("null")
private static boolean checkInstrumentation(ExtendedStackTrace st, boolean fromUncaughtExc) {
    if (fromUncaughtExc && st.get().length > 0 && st.get()[0] != null) {
        final ExtendedStackTraceElement first = st.get()[0];
        if (!first.getDeclaringClass().equals(ClassCastException.class) && !(first.getDeclaringClass().equals(NullPointerException.class) && first.getDeclaringClass().getName().startsWith("co.paralleluniverse.fibers")))
            return true;
    }
    boolean ok = true;
    StringBuilder stackTrace = null;
    final ExtendedStackTraceElement[] stes = st.get();
    for (int i = 0; i < stes.length; i++) {
        final ExtendedStackTraceElement ste = stes[i];
        if (ste.getClassName().equals(Thread.class.getName()) && ste.getMethodName().equals("getStackTrace"))
            continue;
        if (ste.getClassName().equals(ExtendedStackTrace.class.getName()))
            continue;
        if (!ok)
            printTraceLine(stackTrace, ste);
        if (ste.getClassName().contains("$$Lambda$"))
            continue;
        if (!ste.getClassName().equals(Fiber.class.getName()) && !ste.getClassName().startsWith(Fiber.class.getName() + '$') && !ste.getClassName().equals(Stack.class.getName()) && !SuspendableHelper.isWaiver(ste.getClassName(), ste.getMethodName())) {
            final Class<?> clazz = ste.getDeclaringClass();
            final boolean classInstrumented = SuspendableHelper.isInstrumented(clazz);
            final Member /*Executable*/
            m = SuspendableHelper.lookupMethod(ste);
            if (m != null) {
                final boolean methodInstrumented = SuspendableHelper.isInstrumented(m);
                final Pair<Boolean, Instrumented> callSiteInstrumented = SuspendableHelper.isCallSiteInstrumented(m, ste.getLineNumber(), ste.getBytecodeIndex(), stes, i);
                if (!classInstrumented || !methodInstrumented || !callSiteInstrumented.getFirst()) {
                    if (ok)
                        stackTrace = initTrace(i, stes);
                    if (!classInstrumented || !methodInstrumented)
                        stackTrace.append(" **");
                    else if (!callSiteInstrumented.getFirst())
                        stackTrace.append(" !! (instrumented suspendable calls at: ").append(callSitesString(callSiteInstrumented.getSecond())).append(")");
                    ok = false;
                }
            } else {
                if (ok)
                    stackTrace = initTrace(i, stes);
                // Methods can only be found via source lines in @Instrumented annotations
                stackTrace.append(" **");
                ok = false;
            }
        } else if (ste.getClassName().equals(Fiber.class.getName()) && ste.getMethodName().equals("run1")) {
            if (!ok) {
                final String str = "Uninstrumented whole methods ('**') or single calls ('!!') detected: " + stackTrace;
                if (Debug.isUnitTest())
                    throw new VerifyInstrumentationException(str);
                System.err.println("WARNING: " + str);
            }
            return ok;
        }
    }
    throw new IllegalStateException("Not run through Fiber.exec(). (trace: " + Arrays.toString(stes) + ")");
}
Also used : ExtendedStackTrace(co.paralleluniverse.common.util.ExtendedStackTrace) Member(java.lang.reflect.Member) ExtendedStackTraceElement(co.paralleluniverse.common.util.ExtendedStackTraceElement)

Example 60 with Member

use of java.lang.reflect.Member in project quasar by puniverse.

the class ExtendedStackTrace method getMethod.

protected /*Executable*/
Member getMethod(final ExtendedStackTraceElement este) {
    if (este.getDeclaringClass() == null)
        return null;
    Member[] ms = getMethods(este.getDeclaringClass());
    Member method = null;
    for (Member m : ms) {
        if (este.getMethodName().equals(m.getName())) {
            if (method == null)
                method = m;
            else {
                // more than one match
                method = null;
                break;
            }
        }
    }
    if (method == null && este.getLineNumber() >= 0) {
        try {
            final AtomicReference<String> descriptor = new AtomicReference<>();
            ASMUtil.accept(este.getDeclaringClass(), ClassReader.SKIP_FRAMES, new ClassVisitor(Opcodes.ASM5) {

                @Override
                public MethodVisitor visitMethod(int access, String name, final String desc, String signature, String[] exceptions) {
                    MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
                    if (descriptor.get() == null && este.getMethodName().equals(name)) {
                        mv = new MethodVisitor(api, mv) {

                            int minLine = Integer.MAX_VALUE, maxLine = Integer.MIN_VALUE;

                            @Override
                            public void visitLineNumber(int line, Label start) {
                                if (line < minLine)
                                    minLine = line;
                                if (line > maxLine)
                                    maxLine = line;
                            }

                            @Override
                            public void visitEnd() {
                                if (minLine <= este.getLineNumber() && maxLine >= este.getLineNumber())
                                    descriptor.set(desc);
                                super.visitEnd();
                            }
                        };
                    }
                    return mv;
                }
            });
            if (descriptor.get() != null) {
                final String desc = descriptor.get();
                for (Member m : ms) {
                    if (este.getMethodName().equals(getName(m)) && desc.equals(getDescriptor(m))) {
                        method = m;
                        break;
                    }
                }
            }
        } catch (Exception e) {
            if (!(e instanceof UnsupportedOperationException))
                e.printStackTrace();
        }
    }
    return method;
}
Also used : Label(org.objectweb.asm.Label) AtomicReference(java.util.concurrent.atomic.AtomicReference) ClassVisitor(org.objectweb.asm.ClassVisitor) MethodVisitor(org.objectweb.asm.MethodVisitor) Member(java.lang.reflect.Member)

Aggregations

Member (java.lang.reflect.Member)135 Method (java.lang.reflect.Method)41 Field (java.lang.reflect.Field)30 ArrayList (java.util.ArrayList)13 AccessibleObject (java.lang.reflect.AccessibleObject)12 Type (java.lang.reflect.Type)12 Annotation (java.lang.annotation.Annotation)11 Constructor (java.lang.reflect.Constructor)10 TypeVariable (java.lang.reflect.TypeVariable)9 InvocationTargetException (java.lang.reflect.InvocationTargetException)8 ParameterizedType (java.lang.reflect.ParameterizedType)7 Map (java.util.Map)7 MetaInfo (org.qi4j.api.common.MetaInfo)7 InjectionPoint (com.google.inject.spi.InjectionPoint)6 AnnotatedElement (java.lang.reflect.AnnotatedElement)6 LinkedHashSet (java.util.LinkedHashSet)6 Optional (org.qi4j.api.common.Optional)6 ValueConstraintsInstance (org.qi4j.runtime.composite.ValueConstraintsInstance)6 ValueConstraintsModel (org.qi4j.runtime.composite.ValueConstraintsModel)6 HashSet (java.util.HashSet)5