Je développe un plug-in Eclipse qui modifie par programmation les fichiers C++ à partir de l'espace de travail. J'essaye maintenant de sauver les changements faits. J'ai jeté un coup d'oeil à cette solution: How can I call save method in eclipse plugin development programmatically mais cela inclut avoir les dossiers que je veux sauver ouvrent dans l'éditeur. Depuis que j'ai 5k + fichiers à modifier et enregistrer, je ne peux pas me permettre de les ouvrir tous dans un éditeur avant d'enregistrer.Comment enregistrer des fichiers par programme dans Eclipse sans utiliser d'éditeur?
En cherchant une solution j'ai trouvé ce sujet sur le forum officiel d'Eclipse: https://www.eclipse.org/forums/index.php/t/1070377/. Malheureusement, aucune réponse n'a été fournie.
J'ai essayé d'utiliser:
PlatformUI.getWorkbench().getService(IHandlerService.class).executeCommand("org.eclipse.ui.file.saveAll", event)
ou
IWorkspace.save(boolean, IProgressMonitor)
ou
ITranslationUnit.save(IProgressMonitor, boolean)
ou
ICProject.save(IProgressMonitor, boolean)
mais aucune de ces solutions n'a fonctionné. Ma question est donc:
Comment enregistrer des fichiers par programme dans Eclipse sans utiliser un éditeur?
Merci beaucoup à l'avance
EDIT:
exemple de ce que je suis en train de réaliser
deleteAndSave(IFunction functionToDelete) {
boolean forceDeletion = true;
IProgressMonitor progressMonitor = new NullProgressMonitor();
//delete the portion of code
functionToDelete.delete(forceDeletion, progressMonitor);
//we get the file containing the function
IFile file = (IFile) functionToDelete.getUnderlyingResource();
//save the file to the disk (ideally 'file.save()' ?)
file.getWorkspace().save(true, progressMonitor);
}
A la fin de cette exécution, j'attendre la nouvelle version de le fichier à enregistrer sur le disque. La fonction est correctement supprimée et les modifications apparaissent dans l'EDI si j'ouvre le fichier dans l'éditeur, mais le fichier est marqué comme non sauvegardé par Eclipse (montrant une étoile avant le nom du fichier).
EDIT:
Bien que cela ne répond pas à la question (sans utiliser un éditeur), je suis le bon comportement avec:
deleteAndSave(IFunction functionToDelete) {
IProgressMonitor progressMonitor = new NullProgressMonitor();
IWorkbenchPage activePage = PlatformUI
.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage();
functionToDelete.delete(true, progressMonitor);
IFile file = (IFile) functionToDelete.getUnderlyingResource();
IEditorPart editorPart = IDE.openEditor(activePage, file);
editorPart.doSave(progressMonitor);
activePage.closeEditor(editorPart, false);
}
Cependant, cela ouvre une page de l'éditeur pour chaque fichier et ferme immédiatement, de sorte que les performances ne sont pas satisfaisantes pour un grand volume de fichiers.
Plus d'infos nécessaire. Si vous n'avez pas ouvert le fichier dans un éditeur, qu'essayez-vous d'enregistrer et comment avez-vous chargé les fichiers? c'est-à-dire où sont les modifications que vous essayez d'enregistrer stockées. –
* ne répondant pas à votre question * en utilisant org.eclipse.ui.ide.IDE.saveAllEditors (IResource [], boolean) est probablement le meilleur moyen de sauvegarder les éditeurs. –
Le plugin supprime certaines parties spécifiques du code via 'ISourceManipulation.delete'. Le plugin analyse tous les fichiers d'un projet donné via l'index Eclipse ('IIndex') et supprime le code approprié, le tout en arrière-plan. Ainsi, les fichiers où du code a été supprimé ne sont pas synchronisés avec le disque, mais ils ne sont pas ouverts dans un éditeur. – AGenevray