/** * Copyright 2005-2013 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. */ /* * Modifications Copyright(c) 2014 Google, Inc. */ package org.python.pydev.shared_ui.search.replace; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.ResourceChangeChecker; /** * Checks changed files with a workspace's {@link IWorkspace#validateEdit(IFile[], Object)} * to integrate with a VCS. */ public class ChangedFilesChecker { /** * Checks the given files that have been changed by validating them with the workspace. * * @param files the files to check * @param validationContext the context for validating the files. Should be the value of * {@link org.eclipse.ltk.core.refactoring.Refactoring#getValidationContext()}. * @param refactoringStatus the value to store the detection of problems. * @throws CoreException when the validation is canceled */ public static void checkFiles(Collection<IFile> files, Object validationContext, RefactoringStatus refactoringStatus) throws CoreException { List<IFile> readOnly = new ArrayList<IFile>(); for (IFile file : files) { if (file.isReadOnly()) { readOnly.add(file); } } if (ResourcesPlugin.getPlugin() == null) { //i.e.: in test mode we won't be able to get the workspace return; } if (!readOnly.isEmpty()) { IFile[] readOnlyFiles = readOnly.toArray(new IFile[readOnly.size()]); IWorkspace workspace = ResourcesPlugin.getWorkspace(); IStatus status = workspace.validateEdit(readOnlyFiles, validationContext); if (status.getSeverity() == IStatus.CANCEL) { throw new OperationCanceledException(); } refactoringStatus.merge(RefactoringStatus.create(status)); if (refactoringStatus.hasFatalError()) { return; } } refactoringStatus.merge(ResourceChangeChecker.checkFilesToBeChanged( files.toArray(new IFile[files.size()]), null)); } }