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); } } }