/plugins/android/src/org/jetbrains/android/compiler/ClassesAndJarsValidityState.java

https://bitbucket.org/nbargnesi/idea · Java · 68 lines · 57 code · 8 blank · 3 comment · 11 complexity · 67ffe2b25777f45217274e5749714002 MD5 · raw file

  1. package org.jetbrains.android.compiler;
  2. import com.intellij.compiler.CompilerIOUtil;
  3. import com.intellij.ide.highlighter.ArchiveFileType;
  4. import com.intellij.openapi.compiler.ValidityState;
  5. import com.intellij.openapi.fileTypes.StdFileTypes;
  6. import com.intellij.openapi.vfs.VirtualFile;
  7. import com.intellij.util.containers.HashSet;
  8. import org.jetbrains.annotations.NotNull;
  9. import java.io.DataInput;
  10. import java.io.DataOutput;
  11. import java.io.IOException;
  12. import java.util.Collection;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. import java.util.Set;
  16. /**
  17. * @author Eugene.Kudelevsky
  18. */
  19. class ClassesAndJarsValidityState implements ValidityState {
  20. private Map<String, Long> myFiles;
  21. private void fillMap(VirtualFile file, Set<VirtualFile> visited) {
  22. if (file.isDirectory() && visited.add(file)) {
  23. for (VirtualFile child : file.getChildren()) {
  24. fillMap(child, visited);
  25. }
  26. }
  27. else if (StdFileTypes.CLASS.equals(file.getFileType()) || file.getFileType() instanceof ArchiveFileType) {
  28. if (file.isValid()) {
  29. myFiles.put(file.getPath(), file.getTimeStamp());
  30. }
  31. }
  32. }
  33. public ClassesAndJarsValidityState(@NotNull Collection<VirtualFile> files) {
  34. myFiles = new HashMap<String, Long>();
  35. Set<VirtualFile> visited = new HashSet<VirtualFile>();
  36. for (VirtualFile file : files) {
  37. fillMap(file, visited);
  38. }
  39. }
  40. public ClassesAndJarsValidityState(@NotNull DataInput in) throws IOException {
  41. myFiles = new HashMap<String, Long>();
  42. int size = in.readInt();
  43. while (size-- > 0) {
  44. final String path = CompilerIOUtil.readString(in);
  45. final long timestamp = in.readLong();
  46. myFiles.put(path, timestamp);
  47. }
  48. }
  49. public boolean equalsTo(ValidityState otherState) {
  50. return otherState instanceof ClassesAndJarsValidityState
  51. && myFiles.equals(((ClassesAndJarsValidityState)otherState).myFiles);
  52. }
  53. public void save(DataOutput out) throws IOException {
  54. out.writeInt(myFiles.size());
  55. for (String dependency : myFiles.keySet()) {
  56. CompilerIOUtil.writeString(dependency, out);
  57. out.writeLong(myFiles.get(dependency));
  58. }
  59. }
  60. }