The Java 8 Stream API sets forth a promising new programming model that incorporates functional-like, MapReduce-style features into a mainstream programming language. However, using streams efficiently may involve subtle considerations.
This tool consists of automated refactoring research prototype plug-ins for Eclipse that assists developers in writing optimal stream client code in a semantics-preserving fashion. Refactoring preconditions and transformations for automatically determining when it is safe and possibly advantageous to convert a sequential stream to parallel and improve upon already parallel streams are included. The approach utilizes both WALA and SAFE.
(click to view)
The refactoring can be run in two different ways:
- As a command.
- Select a project.
- Select "Optimize Streams..." from the "Quick Access" dialog (CTRL-3).
- As a menu item.
- Right-click on a project.
- Under "Refactor," choose "Optimize Streams..."
Currently, the refactoring works only via the package explorer and the outline views. You can either select a single project to optimize or select multiple projects. In each case, the tool will find streams in the enclosing projects to refactor.
This video demonstrates the different ways that this tool can be installed.
An alpha version of our tool is available via an Eclipse update site at: https://raw.githubusercontent.com/ponder-lab/Optimize-Java-8-Streams-Refactoring/master/edu.cuny.hunter.streamrefactoring.updatesite. Please choose the latest version of the "Optimize Stream Refactoring."
You may also install the tool via the Eclipse Marketplace by dragging this icon to your running Eclipse workspace:
The refactoring has several dependencies as listed below. If you experience any trouble installing the plug-in using the above update site, you can manually install the dependencies. The latest version of the plug-ins should be installed. If installing SAFE, note that WALA must be installed first:
Please note that there is a special dependency on WALA. Currently, our refactoring requires WALA version 1.3.10. Although the version from the official WALA site would theoretically work, the plug-in has been tested with the WALA version whose update site is listed above. We highly recommend that this version of WALA be used with the plug-in, which may require uninstalling other WALA features from your current Eclipse installation. Issue #192 has been opened to track the future integration.
Explicit entry points may be marked using the appropriate annotation found in the corresponding annotation library. They can also be marked using a text file named entry_points.txt
. The processing of this file is recursive; it will search for this file in the same directory as the source code and will traverse up the directory structure until one is found. As such, the file may be placed in, for example, package directories, subproject directories, and project roots. The format of the file is simply a list of method signatures on each line.
This video explains more details on how entry points can be specified.
There are currently some limitations with embedded streams (i.e., streams declared as part of lambda expressions sent as arguments to intermediate stream operations). This is due to model differences between the Eclipse JDT and WALA. See #155 for details.
In general, there is an issue with the mapping between the Eclipse DOM and WALA DOM, particuarly when using Anonymous Inner Classes (AICs). We are currently working with the WALA developers to resolve this issue.
For information on contributing, see CONTRIBUTING.md.
This wiki page highlights the locations in our code that solve several engineerinng challenges outlined in our SCAM 2018 paper.
See the wiki for further information.