blob: 9a8a3fcce50687898100bd0ffb3938eee56535c8 [file] [log] [blame]
package org.jetbrains.android.compiler;
import com.intellij.compiler.CompilerIOUtil;
import com.intellij.ide.highlighter.ArchiveFileType;
import com.intellij.openapi.compiler.ValidityState;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NotNull;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author Eugene.Kudelevsky
*/
class ClassesAndJarsValidityState implements ValidityState {
private Map<String, Long> myFiles;
private void fillMap(VirtualFile file, Set<VirtualFile> visited) {
if (file.isDirectory() && visited.add(file)) {
for (VirtualFile child : file.getChildren()) {
fillMap(child, visited);
}
}
else if (StdFileTypes.CLASS.equals(file.getFileType()) || file.getFileType() instanceof ArchiveFileType) {
if (file.isValid()) {
myFiles.put(file.getPath(), file.getTimeStamp());
}
}
}
public ClassesAndJarsValidityState(@NotNull Collection<VirtualFile> files) {
myFiles = new HashMap<String, Long>();
Set<VirtualFile> visited = new HashSet<VirtualFile>();
for (VirtualFile file : files) {
fillMap(file, visited);
}
}
public ClassesAndJarsValidityState(@NotNull DataInput in) throws IOException {
myFiles = new HashMap<String, Long>();
int size = in.readInt();
while (size-- > 0) {
final String path = CompilerIOUtil.readString(in);
final long timestamp = in.readLong();
myFiles.put(path, timestamp);
}
}
@Override
public boolean equalsTo(ValidityState otherState) {
return otherState instanceof ClassesAndJarsValidityState
&& myFiles.equals(((ClassesAndJarsValidityState)otherState).myFiles);
}
@Override
public void save(DataOutput out) throws IOException {
out.writeInt(myFiles.size());
for (String dependency : myFiles.keySet()) {
CompilerIOUtil.writeString(dependency, out);
out.writeLong(myFiles.get(dependency));
}
}
}