reportmill / SnapCode

A Java workbench tool for data science and education
Other
13 stars 0 forks source link

no lambda support #1

Closed mmkathurima closed 2 months ago

mmkathurima commented 1 year ago

The following is a stacktrace when working with lambdas: show(IntStream.range(0, 10).filter(x -> x > 6))

java.lang.RuntimeException: JSExprEval.getWrappedLambdaExpr: Unknown lambda class: java.util.function.IntPredicate
        at javakit.runner.JSExprEval.getWrappedLambdaExpression(JSExprEval.java:838)
        at javakit.runner.JSExprEval.evalLambdaExpr(JSExprEval.java:631)
        at javakit.runner.JSExprEval.evalExpr(JSExprEval.java:105)
        at javakit.runner.JSExprEval.evalMethodCallExpr(JSExprEval.java:215)
        at javakit.runner.JSExprEval.evalExpr(JSExprEval.java:75)
        at javakit.runner.JSExprEval.evalExprDot(JSExprEval.java:440)
        at javakit.runner.JSExprEval.evalExpr(JSExprEval.java:67)
        at javakit.runner.JSExprEval.evalMethodCallExpr(JSExprEval.java:215)
        at javakit.runner.JSExprEval.evalExpr(JSExprEval.java:75)
        at javakit.runner.JSExprEval.evalExpr(JSExprEval.java:49)
        at javakit.runner.JSStmtEval.evalExpr(JSStmtEval.java:424)
        at javakit.runner.JSStmtEval.evalExprStmt(JSStmtEval.java:186)
        at javakit.runner.JSStmtEval.evalStmt(JSStmtEval.java:110)
        at javakit.runner.JSStmtEval.evalExecutable(JSStmtEval.java:52)
        at javakit.runner.JavaShell.evalStatement(JavaShell.java:123)
        at javakit.runner.JavaShell.runJavaCode(JavaShell.java:83)
        at snapcode.apptools.EvalToolRunner.runAppImpl(EvalToolRunner.java:62)
        at snapcode.apptools.EvalToolRunner.lambda$runApp$0(EvalToolRunner.java:42)
        at java.base/java.lang.Thread.run(Thread.java:829)

Lambdas are currently not supported

reportmill commented 11 months ago

Sorry for the delay on this - this works now.

reportmill commented 11 months ago
Lambda
mmkathurima commented 3 months ago

This issue is still present: image

reportmill commented 2 months ago

I added support for MethodRef Constructors yesterday, which was missing, so lambda method refs like this work now:

Supplier sup = Object::new;
reportmill commented 2 months ago

But I'm still having problems with a couple of cases like this:

BiFunction<Integer,Integer,Integer> func = (a,b) -> Integer.sum(a,b);
BinaryOperator<Integer> func = (a,b) -> Integer.sum(a,b);

I'm going to work on these today.

reportmill commented 2 months ago

Sorry for the delay, this ended up being a lot more complicated than I expected. I think I have this fixed now though.

reportmill commented 2 months ago
image