/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.ui.actions.container; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.python.pydev.core.docutils.StringUtils; import org.python.pydev.core.log.Log; /** * Action used to delete the .pyc and $py.class files (generated from the python or jython interpreter). * * @author Fabio */ public class PyDeletePycAndClassFiles extends PyContainerAction { /** * Deletes the files... recursively pass the folders and delete the files (and sum them so that we know how many * files were deleted). * * @param container the folder from where we want to remove the files * @return the number of files deleted */ protected int doActionOnContainer(IContainer container, IProgressMonitor monitor) { int deleted = 0; try { IResource[] members = container.members(); for (IResource c : members) { if (monitor.isCanceled()) { break; } monitor.worked(1); if (c instanceof IContainer) { deleted += this.doActionOnContainer((IContainer) c, monitor); } else if (c instanceof IFile) { String name = c.getName(); if (name != null) { if (name.endsWith(".pyc") || name.endsWith(".pyo") || name.endsWith("$py.class")) { c.delete(true, monitor); deleted += 1; } } } } } catch (CoreException e) { Log.log(e); } return deleted; } @Override protected void afterRun(int deleted) { MessageDialog.openInformation(null, "Files deleted", com.aptana.shared_core.string.StringUtils.format("Deleted %s files.", deleted)); } @Override protected boolean confirmRun() { return MessageDialog.openConfirm(null, "Confirm deletion", "Are you sure that you want to recursively delete the *.pyc and *$py.class files from the selected folder(s)?\n" + "\n" + "This action cannot be undone."); } }