Die Java 8-Stream-API legt ein vielversprechendes neues Programmiermodell fest, das funktionale Funktionen im MapReduce-Stil in eine Mainstream-Programmiersprache einbezieht. Die effiziente Verwendung von Streams kann jedoch subtile Überlegungen beinhalten.
Dieses Tool besteht aus automatisiertem Refactoring-Forschungsprototyp-Plug-Ins für Eclipse, der Entwicklern beim Schreiben optimaler Stream-Client-Code in einer semantisch-präzierenden Weise unterstützt. Refactoring Voraussetzungen und Transformationen zur automatischen Bestimmung, wann es sicher und möglicherweise vorteilhaft ist, einen sequentiellen Strom in Parallel umzuwandeln und bereits parallele Streams zu verbessern, sind enthalten. Der Ansatz nutzt sowohl Wala als auch Safe.
(Klicken Sie hier, um anzuzeigen)
Das Refactoring kann auf zwei verschiedene Arten ausgeführt werden:
Derzeit funktioniert das Refactoring nur über den Paket Explorer und die Umrissansichten. Sie können entweder ein einzelnes Projekt auswählen, um mehrere Projekte zu optimieren oder zu optimieren. In jedem Fall findet das Tool Streams in den beigefügten Projekten zum Refactor.
Die neueste Veröffentlichung ist V0.18.0. It has been tested on Eclipse IDE for RCP and RAP Developers Version: 2019-03 (4.11.0), Build id: 20190314-1200 under OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.19.04.2-b03) and OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode) on Ubuntu 19.04.
Dieses Video zeigt die verschiedenen Möglichkeiten, wie dieses Tool installiert werden kann.
Eine Alpha-Version unseres Tools ist über eine Eclipse-Update-Site unter: https://raw.githubuSercontent.com/ponder-lab/optimize-java-8-streams-refactoring/master/edu.cuny.hunter.streamrefactoring.updatessite verfügbar. Bitte wählen Sie die neueste Version des "Optimize Stream Refactoring".
Sie können das Tool auch über den Eclipse Marketplace installieren, indem Sie dieses Symbol in den Betriebsarbeitspace Eclipse ziehen:
Das Refactoring hat mehrere Abhängigkeiten, wie unten aufgeführt. Wenn Sie Probleme mit der Installation des Plug-Ins über die oben genannte Aktualisierungsseite haben, können Sie die Abhängigkeiten manuell installieren. Die neueste Version der Plug-Ins sollte installiert werden. Beachten Sie bei der Installation, dass Wala zuerst installiert werden muss :
| Abhängigkeit | Site aktualisieren |
|---|---|
| Wala | https://raw.githubuSercontent.com/ponder-lab/wala/streams/com.ibm.wala.updatessit |
| SICHER | https://raw.githubuSercontent.com/tech-srl/safe/master/com.ibm.safe.updatessit |
| Gemeinsame Sonnenfinsternis Java Refactoring -Rahmen | https://raw.githubuSercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/edu.cuny.citytech.refactoring.common.updatessite |
Bitte beachten Sie, dass es eine besondere Abhängigkeit von Wala gibt. Derzeit erfordert unser Refactoring Wala Version 1.3.10 . Obwohl die Version der offiziellen Wala-Website theoretisch funktionieren würde, wurde das Plug-In mit der Wala-Version getestet, deren Update-Site oben aufgeführt ist. Wir empfehlen dringend, dass diese Version von Wala mit dem Plug-In verwendet wird, für die möglicherweise andere Wala-Funktionen von Ihrer aktuellen Eclipse-Installation deinstallieren müssen. Ausgabe Nr. 192 wurde geöffnet, um die zukünftige Integration zu verfolgen.
Explizite Einstiegspunkte können unter Verwendung der entsprechenden Annotation in der entsprechenden Annotationsbibliothek markiert werden. Sie können auch mit einer Textdatei mit dem Namen entry_points.txt gekennzeichnet werden. Die Verarbeitung dieser Datei ist rekursiv; Es wird nach dieser Datei im selben Verzeichnis wie der Quellcode suchen und die Verzeichnisstruktur bis zur gefundenen Verzeichnisstruktur nach oben durchqueren. Daher kann die Datei in Paketverzeichnissen, Subprojektverzeichnissen und Projektwurzeln platziert werden. Das Format der Datei ist einfach eine Liste von Methodensignaturen in jeder Zeile.
In diesem Video werden weitere Details darüber erläutert, wie Einstiegspunkte angegeben werden können.
Derzeit gibt es einige Einschränkungen bei eingebetteten Streams (dh Streams, die als Teil von Lambda -Ausdrücken deklariert werden, die als Argumente für Zwischenstromoperationen gesendet wurden). Dies ist auf Modellunterschiede zwischen dem Eclipse JDT und Wala zurückzuführen. Weitere Informationen finden Sie in #155.
Im Allgemeinen gibt es ein Problem mit der Zuordnung zwischen Eclipse Dom und Wala Dom, insbesondere bei der Verwendung anonymer innerer Klassen (AICs). Wir arbeiten derzeit mit den Wala -Entwicklern zusammen, um dieses Problem zu lösen.
Informationen zum Beitrag zum Beitrag finden Sie unter Beitrags.md.
Auf dieser Wiki -Seite werden die Standorte in unserem Code hervorgehoben, die mehrere technische Herausforderungen lösen, die in unserem SCAM 2018 -Papier beschrieben werden.
Weitere Informationen finden Sie im Wiki.
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh und Syed Ahmed. Sicheres automatisiertes Refactoring für eine intelligente Parallelisierung von Java 8 -Strömen. In der International Conference on Software Engineering , ICSE '19, Seiten 619–630, Piscataway, NJ, USA, Mai 2019. ACM/IEEE, IEEE Press. [Bib | Doi | Folien | http]
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh und Syed Ahmed. Ein Tool zur Optimierung von Java 8 -Stream -Software über automatisiertes Refactoring. In der internationalen Arbeitskonferenz zur Quellcodeanalyse und -manipulation , Scam '18, Seiten 34-39. IEEE, IEEE Press, September 2018. Ingenieurstrecke. [Bib | Doi | Folien | http]
Bitte zitieren Sie diese Arbeit wie folgt:
@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 } ,
}