List of usage examples for java.lang.invoke SerializedLambda getImplMethodName
public String getImplMethodName()
From source file:org.lambdamatic.analyzer.LambdaExpressionAnalyzer.java
/** * Returns the {@link SerializedLambdaInfo} for the given {@code expression} * /*from w w w. j av a 2 s. c o m*/ * @param expression the expression to analyze. * @return the corresponding {@link SerializedLambda} * @throws AnalyzeException if something wrong happened (a {@link NoSuchMethodException}, * {@link IllegalArgumentException} or {@link InvocationTargetException} exception * occurred). * * @see http ://docs.oracle.com/javase/8/docs/api/java/lang/invoke/SerializedLambda.html * @see http ://stackoverflow.com/questions/21860875/printing-debug-info-on-errors * -with-java-8-lambda-expressions/21879031 #21879031 */ private static SerializedLambdaInfo getSerializedLambdaInfo(final Object expression) { final Class<?> cl = expression.getClass(); try { final Method m = cl.getDeclaredMethod("writeReplace"); m.setAccessible(true); final Object result = m.invoke(expression); if (result instanceof SerializedLambda) { final SerializedLambda serializedLambda = (SerializedLambda) result; LOGGER.debug(" Lambda FunctionalInterface: {}.{} ({})", serializedLambda.getFunctionalInterfaceClass(), serializedLambda.getFunctionalInterfaceMethodName(), serializedLambda.getFunctionalInterfaceMethodSignature()); LOGGER.debug(" Lambda Implementation: {}.{} ({})", serializedLambda.getImplClass(), serializedLambda.getImplMethodName(), serializedLambda.getImplMethodSignature()); IntStream.range(0, serializedLambda.getCapturedArgCount()) .forEach(i -> LOGGER.debug(" with Captured Arg(" + i + "): '" + serializedLambda.getCapturedArg(i) + ((serializedLambda.getCapturedArg(i) != null) ? "' (" + serializedLambda.getCapturedArg(i).getClass().getName() + ")" : ""))); return new SerializedLambdaInfo(serializedLambda); } } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new AnalyzeException("Failed to find the Serialized form for the given Lambda Expression", e); } return null; }