Java 8 Stream APIは、機能的なMapReduceスタイルの機能を主流のプログラミング言語に組み込んだ有望な新しいプログラミングモデルを設定しています。ただし、ストリームを効率的に使用するには、微妙な考慮事項が含まれる場合があります。
このツールは、自動化されたリファクタリングリファクタリングリファクタリングリファクタリングリファクタリングプロトタイプのプラグインであり、開発者がセマンティクスを提供するファッションで最適なストリームクライアントコードを書くのを支援します。リファクタリングの前提条件と変換は、シーケンシャルストリームを並列に変換し、既に平行なストリームを改善するのが安全であり、おそらく有利であるかを自動的に決定するための変換が含まれています。このアプローチは、WALAとSAFEの両方を利用しています。
(クリックして表示)
リファクタリングは2つの異なる方法で実行できます。
現在、リファクタリングはパッケージエクスプローラーとアウトラインビューを介してのみ機能します。単一のプロジェクトを選択して、複数のプロジェクトを最適化するか、選択できます。いずれの場合も、このツールは、リファクタリングするプロジェクトに囲まれたプロジェクトにストリームを見つけます。
最新リリースはv0.18.0です。 RCPおよびRAP DevelopersバージョンのEclipse IDEでテストされていますバージョン:2019-03(4.11.0)、Build ID:20190314-1200 OpenJDKランタイム環境(ビルド1.8.0_212-8U212-B03-0UBUNTU1.19.04.2-B03)およびOPENJDK 64-BIT SERVER VM(BUIT 25.212( Ubuntu 19.04。
このビデオは、このツールをインストールできるさまざまな方法を示しています。
当社のツールのアルファバージョンは、https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/edu.cuny.hunter.streamrefactoring.updatesite.ptimize-java-8-streams-refactoring/optimize-javaize-javaize-javaize-javaze-javaize-javaize-javaize-javaize-javaize-javaize-javaize-javaize-javaize-java-java-java-java-java. 「最適化ストリームリファクタリング」の最新バージョンを選択してください。
また、このアイコンを実行中のEclipseワークスペースにドラッグして、Eclipse Marketplaceを介してツールをインストールすることもできます。
参照されるように、リファクタリングにはいくつかの依存関係があります。上記の更新サイトを使用してプラグインをインストールするのに問題がある場合は、依存関係を手動でインストールできます。プラグインの最新バージョンをインストールする必要があります。安全にインストールする場合は、最初にWALAをインストールする必要があることに注意してください。
| 依存 | サイトを更新します |
|---|---|
| ワラ | https://raw.githubusercontent.com/ponder-lab/wala/streams/com.ibm.wala.updatesite |
| 安全 | https://raw.githubusercontent.com/tech-srl/safe/master/com.ibm.safe.updatesite |
| 一般的なEclipse Javaリファクタリングフレームワーク | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/edu.cuny.citytech.refactoring.updatesite |
ワラに特別な依存があることに注意してください。現在、リファクタリングにはWALAバージョン1.3.10が必要です。公式のWALAサイトのバージョンは理論的に機能しますが、プラグインは、上記の更新サイトがリストされているWalaバージョンでテストされています。このバージョンのWALAをプラグインで使用することを強くお勧めします。これには、現在のEclipseインストールから他のWALA機能をアンインストールする必要がある場合があります。将来の統合を追跡するために、問題#192が開かれました。
明示的なエントリポイントは、対応する注釈ライブラリにある適切な注釈を使用してマークされる場合があります。また、 entry_points.txtという名前のテキストファイルを使用してマークすることもできます。このファイルの処理は再帰的です。ソースコードと同じディレクトリでこのファイルを検索し、発見されるまでディレクトリ構造を通過します。そのため、ファイルは、たとえば、パッケージディレクトリ、サブプロジェクトディレクトリ、プロジェクトルーツなどに配置できます。ファイルの形式は、各行のメソッドシグネチャの単なるリストです。
このビデオでは、エントリポイントの指定方法に関する詳細について説明します。
現在、埋め込まれたストリームにはいくつかの制限があります(つまり、中間ストリーム操作に引数として送信されるラムダ式の一部として宣言されたストリーム)。これは、Eclipse JDTとWalaのモデルの違いによるものです。詳細については、#155を参照してください。
一般に、特に匿名の内部クラス(AIC)を使用する場合、Eclipse DomとWala Domの間のマッピングに問題があります。現在、この問題を解決するためにWALA開発者と協力しています。
貢献については、Convributing.mdを参照してください。
このWikiページは、詐欺2018の論文で概説されているいくつかのエンジニアリングの課題を解決するコードの場所を強調しています。
詳細については、Wikiをご覧ください。
Raffi Khatchadourian、Yiming Tang、Mehdi Bagherzadeh、Syed Ahmed。 Java 8ストリームのインテリジェントな並列化のための安全な自動リファクタリング。 Software Engineeringに関する国際会議、ICSE '19、ページ619-630、ニュージャージー州ピスカタウェイ、米国、2019年5月。ACM/IEEE、IEEE Press。 [bib | doi |スライド| http]
Raffi Khatchadourian、Yiming Tang、Mehdi Bagherzadeh、Syed Ahmed。自動リファクタリングを介してJava 8ストリームソフトウェアを最適化するためのツール。ソースコード分析と操作に関する国際ワーキング会議では、詐欺'18、34--39ページ。 IEEE、IEEE Press、2018年9月。エンジニアリングトラック。 [bib | doi |スライド| http]
この作業を次のように引用してください。
@InProceedings { Khatchadourian2019 ,
author = { Raffi Khatchadourian and Yiming Tang and Mehdi Bagherzadeh and Syed Ahmed } ,
booktitle = { International Conference on Software Engineering } ,
title = { Safe Automated Refactoring for Intelligent Parallelization of {Java} 8 Streams } ,
year = { 2019 } ,
address = { Piscataway, NJ, USA } ,
month = may,
organization = { ACM/IEEE } ,
pages = { 619--630 } ,
publisher = { {IEEE} } ,
series = { ICSE '19 } ,
acmid = { 3339586 } ,
doi = { 10.1109/icse.2019.00072 } ,
keywords = { Java 8, automatic parallelization, refactoring, static analysis, streams, typestate analysis } ,
location = { Montr'eal, QC, Canada } ,
numpages = { 12 } ,
url = { http://academicworks.cuny.edu/hc_pubs/489 } ,
}
@InProceedings { Khatchadourian2018 ,
author = { Raffi Khatchadourian and Yiming Tang and Mehdi Bagherzadeh and Syed Ahmed } ,
booktitle = { International Working Conference on Source Code Analysis and Manipulation } ,
title = { A Tool for Optimizing {Java} 8 Stream Software via Automated Refactoring } ,
year = { 2018 } ,
month = sep,
note = { Engineering Track. } ,
organization = { IEEE } ,
pages = { 34--39 } ,
publisher = { IEEE Press } ,
series = { IEEE SCAM '18 } ,
doi = { 10.1109/SCAM.2018.00011 } ,
issn = { 2470-6892 } ,
keywords = { refactoring, automatic parallelization, typestate analysis, ordering, Java 8, streams, eclipse, WALA, SAFE } ,
location = { Madrid, Spain } ,
numpages = { 6 } ,
url = { http://academicworks.cuny.edu/hc_pubs/429 } ,
}