public static boolean isWaiver(String className, String methodName) { return waivers.contains(new Pair<String, String>(className, methodName)); } }
curr != null ? curr.getSecond() : states.get(); final Map<? extends ReceivePort<? extends M>, State> newStates = states.get(); if (currStates == newStates && curr != null && curr.getFirst() != null) { curr.getFirst().reset(); } else { actions.addAll(enabledActions); selector.set(new Pair(new Selector<>(true, actions), newStates));
@SuppressWarnings("WeakerAccess") public static void addWaiver(String className, String methodName) { waivers.add(new Pair<>(className, methodName)); }
public static void addWaiver(String className, String methodName) { waivers.add(new Pair<String, String>(className, methodName)); }
@Override public void run() throws SuspendExecution, InterruptedException { // Get first job Pair<S, Channel<Channel<T>>> job = jobs.receive(); while(job != null) { // Build result channel final Channel<T> res = resultChannelBuilder.run(); // Process transformer.call(job.getFirst(), res); final Channel<Channel<T>> resWrapper = job.getSecond(); // Send result asynchronously strandFactory.newStrand(SuspendableUtils.runnableToCallable(new SuspendableRunnable() { @Override public void run() throws SuspendExecution, InterruptedException { resWrapper.send(res); } })).start(); // Get next job job = jobs.receive(); } // No more jobs, close results channel and quit worker results.close(); } })).start();
private static void addPattern(List<Pair<String, String>> ret, String p, String type) { if (p != null) { @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") final Pair<String, String> entry = new Pair<>(p, type); if (p.endsWith("*") || p.startsWith("*.") || p.equals("/")) // Wildcard -> end ret.add(entry); else // Exact -> beginning ret.add(0, entry); } }
public static boolean isWaiver(String className, String methodName) { return className.startsWith("java.lang.reflect") || className.startsWith("sun.reflect") || className.startsWith("com.sun.proxy") || className.contains("$ByteBuddy$") || (className.equals("co.paralleluniverse.strands.SuspendableUtils$VoidSuspendableCallable") && methodName.equals("run")) || (className.equals("co.paralleluniverse.strands.dataflow.Var") && methodName.equals("set")) || waivers.contains(new Pair<>(className, methodName)); }
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); else if (!callSiteInstrumented.getFirst()) stackTrace.append(" !! (instrumented suspendable calls at: ") .append(callSitesString(callSiteInstrumented.getSecond())) .append(")"); ok = false;
public static Pair<Boolean, Instrumented> isCallSiteInstrumented(/*Executable*/ Member m, int sourceLine, int bci, ExtendedStackTraceElement[] stes, int currentSteIdx) { if (m == null) return new Pair<>(false, null); return new Pair<>(true, null); return new Pair<>(true, null); } else { final Instrumented i = getAnnotation(m, Instrumented.class); if (i == null) return new Pair<>(false, i); for (String callsite : i.suspendableCallSiteNames()) { if (callsite.contains(methodName)) { return new Pair(true, i); final Class<?> owner = callee.getDeclaringClass(); if (declareInCommonAncestor(nameAndDescSuffix, owner, callsiteOwner)) { return new Pair(true, i); for (int j : scs) { if (j == bci) return new Pair<>(true, i); for (int j : scs) { if (j == sourceLine) return new Pair<>(true, i); return new Pair<>(false, i);
private static Class<? extends Server> getProxyClass(Class<?>[] interfaces, boolean callOnVoidMethods) { final Pair<Set<Class<?>>, Boolean> key = new Pair(ImmutableSet.copyOf(interfaces), callOnVoidMethods); Class<? extends Server> clazz = classes.get(key); if (clazz == null) { clazz = new ByteBuddy() // http://bytebuddy.net/ .subclass(Server.class) .implement(interfaces) .implement(java.io.Serializable.class) .method(isDeclaredBy(anyOf(interfaces))).intercept(InvocationHandlerAdapter.of(callOnVoidMethods ? handler1 : handler2)) .make() .load(ProxyServerActor.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER).getLoaded(); final Class<? extends Server> old = classes.putIfAbsent(key, clazz); if (old != null) clazz = old; } return clazz; }
@SuppressWarnings("unchecked") private Pair<ActorRef<? extends WebMessage>, Class<? extends ActorImpl<? extends WebMessage>>> autoCreateActor(FullHttpRequest req) { registerActorClasses(); final String uri = req.getUri(); for (final Class<?> c : actorClasses) { if (WebActorHandler.handlesWithHttp(uri, c) || WebActorHandler.handlesWithWebSocket(uri, c)) return new Pair<ActorRef<? extends WebMessage>, Class<? extends ActorImpl<? extends WebMessage>>>( Actor.newActor ( new ActorSpec(c, actorParams != null ? actorParams.get(c) : EMPTY_OBJECT_ARRAY) ).spawn(), (Class<? extends ActorImpl<? extends WebMessage>>) c ); } return null; }
@Override public void run() throws SuspendExecution, InterruptedException { // Get first input S s = from.receive(); while (s != null) { final Channel<Channel<T>> resultWrapper = Channels.newChannel(1, Channels.OverflowPolicy.BLOCK, true, true); jobs.send(new Pair<>(s, resultWrapper)); results.send(resultWrapper); // Get next input s = from.receive(); } // No more inputs, close jobs channel and quit jobs.close(); } })).start();