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());
}
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);
}
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);
}
}
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) + ")");
}
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;
}
Aggregations