Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

* transforms unknown dynamic invoke into NoSuchMethodError #764

Merged
merged 2 commits into from
Feb 28, 2024

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
1 check passed
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 <[email protected]>
(cherry picked from commit 8675d71)
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