Skip to content

* transforms unknown dynamic invoke into NoSuchMethodError#764

Merged
Tom-Ski merged 2 commits intoMobiVM:masterfrom
dkimitsa:fix/invoke-dynamic-fallback
Feb 28, 2024
Merged

* transforms unknown dynamic invoke into NoSuchMethodError#764
Tom-Ski merged 2 commits intoMobiVM:masterfrom
dkimitsa:fix/invoke-dynamic-fallback

Conversation

@dkimitsa
Copy link
Contributor

currently only StringConcat and Lambda bootstraps are recognized and cause DynamicInvoke to be transformed/dessugared.

in other cases DynamicInvoke instruction will stay in place and will cause compilation type exception:

Java.lang.ClassCastException: soot.jimple.internal.JDynamicInvokeExpr cannot be cast to soot.jimple.InstanceInvokeExpr

Issue was risen in gitter channel in scope Scala/desirialize labda being inserted in all classes. All these classes were failed to compile. Even if this functionality is not used (scala/scala#4501).

As a workaround changed how InvokeDynamic is being handled:

  • introduced single InbokeDynamicCompilerPlugin;
  • LabdaPlugin and StringconcatRewriter plugins are made as delegates of InbokeDynamicCompilerPlugin;
  • all not recognized InvokeDynamic are now translated into NoSuchMethodError exceptions

currently only StringConcat and Lambda bootstraps are recognized and cause DynamicInvoke to be transformed/dessugared.

in other cases DynamicInvoke instruction will stay in place and will cause compilation type exception:
> Java.lang.ClassCastException: soot.jimple.internal.JDynamicInvokeExpr cannot be cast to soot.jimple.InstanceInvokeExpr

Issue was risen in gitter channel in scope Scala/desirialize labda being inserted in all classes. All these classes were failed to compile. Even if this functionality is not used (scala/scala#4501).

As a workaround changed how InvokeDynamic is being handled:
- introduced single InbokeDynamicCompilerPlugin;
- LabdaPlugin and StringconcatRewriter plugins are made as delegates of InbokeDynamicCompilerPlugin;
- all not recognized InvokeDynamic are now translated into NoSuchMethodError exceptions
@ccellado
Copy link

That's great, will it be included in next release?

@dkimitsa
Copy link
Contributor Author

@ccellado
hello, probably it will not go into 2.3.21 release. but in next release snapshot as there was no feedback on this feature.
meanwhile you can try it by building RoboVM locally

@ccellado
Copy link

@dkimitsa what feedback would you require to speed up the release?

@Tom-Ski
Copy link
Member

Tom-Ski commented Feb 27, 2024

2.3.21 has been released. If release is ok this will be merged and testable on snapshot. From there scheduled into next release

@dkimitsa
Copy link
Contributor Author

@ccellado you can build it locally from branch and test on local build.

@Tom-Ski Tom-Ski merged commit 8675d71 into MobiVM:master Feb 28, 2024
dkimitsa added a commit to dkimitsa/robovm that referenced this pull request Apr 15, 2024
currently only StringConcat and Lambda bootstraps are recognized and cause DynamicInvoke to be transformed/dessugared.

in other cases DynamicInvoke instruction will stay in place and will cause compilation type exception:
> Java.lang.ClassCastException: soot.jimple.internal.JDynamicInvokeExpr cannot be cast to soot.jimple.InstanceInvokeExpr

Issue was risen in gitter channel in scope Scala/desirialize labda being inserted in all classes. All these classes were failed to compile. Even if this functionality is not used (scala/scala#4501).

As a workaround changed how InvokeDynamic is being handled:
- introduced single InbokeDynamicCompilerPlugin;
- LabdaPlugin and StringconcatRewriter plugins are made as delegates of InbokeDynamicCompilerPlugin;
- all not recognized InvokeDynamic are now translated into NoSuchMethodError exceptions

Co-authored-by: Tomski <tomwojciechowski@asidik.com>
(cherry picked from commit 8675d71)
@dkimitsa dkimitsa deleted the fix/invoke-dynamic-fallback branch May 22, 2025 14:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants