package jetbrains.mps.ide.platform.watching;
/*Generated by MPS */
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.vfs.VirtualFileManager;
import java.util.List;
import jetbrains.mps.generator.cache.BaseModelCache;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.ide.MPSCoreComponents;
import jetbrains.mps.textgen.trace.TraceInfoCache;
import jetbrains.mps.make.java.BLDependenciesCache;
import jetbrains.mps.generator.impl.dependencies.GenerationDependenciesCache;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.vfs.VirtualFileEvent;
import jetbrains.mps.vfs.IFile;
import jetbrains.mps.ide.vfs.VirtualFileUtils;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import com.intellij.openapi.vfs.VirtualFileAdapter;
import com.intellij.openapi.vfs.VirtualFileMoveEvent;
public class ModelCacheReloader implements ApplicationComponent {
private VirtualFileManager myVirtualFileManager;
private ModelCacheReloader.CacheFileListener myFileListener = new ModelCacheReloader.CacheFileListener();
private List<BaseModelCache> myCaches = ListSequence.fromList(new ArrayList<BaseModelCache>());
public ModelCacheReloader(VirtualFileManager virtualFileManager, MPSCoreComponents coreComponents) {
// TODO rewrite using FileSystem.getInstance().addListener(..)
myVirtualFileManager = virtualFileManager;
ListSequence.fromList(myCaches).addElement(TraceInfoCache.getInstance());
ListSequence.fromList(myCaches).addElement(BLDependenciesCache.getInstance());
ListSequence.fromList(myCaches).addElement(GenerationDependenciesCache.getInstance());
}
@Override
public void initComponent() {
myVirtualFileManager.addVirtualFileListener(myFileListener);
}
@Override
public void disposeComponent() {
myVirtualFileManager.removeVirtualFileListener(myFileListener);
}
@NonNls
@NotNull
@Override
public String getComponentName() {
return getClass().getName();
}
private void invalidateForFile(VirtualFileEvent event) {
final IFile file = VirtualFileUtils.toIFile(event.getFile());
check_hmm83z_a1a7(ListSequence.fromList(myCaches).findFirst(new IWhereFilter<BaseModelCache>() {
public boolean accept(BaseModelCache c) {
return c.getCacheFileName().equalsIgnoreCase(file.getName());
}
}), file);
}
private class CacheFileListener extends VirtualFileAdapter {
private CacheFileListener() {
}
@Override
public void beforeFileMovement(VirtualFileMoveEvent event) {
invalidateForFile(event);
}
@Override
public void beforeFileDeletion(VirtualFileEvent event) {
invalidateForFile(event);
}
@Override
public void fileCreated(VirtualFileEvent event) {
invalidateForFile(event);
}
@Override
public void contentsChanged(VirtualFileEvent event) {
invalidateForFile(event);
}
}
private static void check_hmm83z_a1a7(BaseModelCache checkedDotOperand, IFile file) {
if (null != checkedDotOperand) {
checkedDotOperand.invalidateCacheForFile(file);
}
}
}