/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.openapi.vcs.changes; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import com.intellij.util.Processor; import java.util.Collection; import java.util.Set; /** * <p>The dirty scope for a version control system. The instance of this interface * is passed to implementers of the {@link com.intellij.openapi.vcs.changes.ChangeProvider} * interface to the method {@link ChangeProvider#getChanges(VcsDirtyScope, ChangelistBuilder,com.intellij.openapi.progress.ProgressIndicator, ChangeListManagerGate)}.</p> * <p/> * <p>The instance of this class is valid only while the project is valid.</p> * * @author max */ public abstract class VcsDirtyScope { /** * @return a set of content roots affected. The content root * is considered affected if there is at least one descendant * dirty file or directory which is under this content root. * @see #getRecursivelyDirtyDirectories() * @see #getDirtyFiles() * @see com.intellij.openapi.vcs.ProjectLevelVcsManager#getVcsRootFor(com.intellij.openapi.vcs.FilePath) */ public abstract Collection<VirtualFile> getAffectedContentRoots(); /** * @return project for this dirty scope */ public abstract Project getProject(); /** * @return the vcs for this dirty scope */ public abstract AbstractVcs getVcs(); /** * Get dirty files and directories. Note if the directory is * listed as dirty, all files in it are also considered dirty and * they are returned by this method. Note that this method does not list * files that are returned by {@link #getRecursivelyDirtyDirectories()}. * * @return the set of dirty file or directories with all directory children added. */ public abstract Set<FilePath> getDirtyFiles(); /** * Get dirty files and directories. This method differs from * {@link #getDirtyFiles()} that it does not adds all children * to the set of the dirty files automatically. The invoker should * process the children of valid directories themselves. * * @return the set of dirty file or directories without implied directory children. */ public abstract Set<FilePath> getDirtyFilesNoExpand(); /** * Get recursively dirty directories. * * @return a directories that are recursively dirty. */ public abstract Set<FilePath> getRecursivelyDirtyDirectories(); public abstract boolean isRecursivelyDirty(final VirtualFile vf); /** * Invoke the {@code iterator} for all files in the dirty scope. * For recursively dirty directories all children are processed. * * @param iterator an iterator to invoke */ public abstract void iterate(Processor<FilePath> iterator); public abstract void iterateExistingInsideScope(Processor<VirtualFile> vf); public abstract boolean isEmpty(); /** * Check if the path belongs to the dirty scope. * * @param path a path to check * @return true if path belongs to the dirty scope. */ public abstract boolean belongsTo(final FilePath path); public abstract boolean belongsTo(final FilePath path, final Consumer<AbstractVcs> vcsConsumer); public Collection<VirtualFile> getAffectedContentRootsWithCheck() { return getAffectedContentRoots(); } public boolean wasEveryThingDirty() { return false; } public void setWasEverythingDirty(boolean wasEverythingDirty) { } }