use less memory for file attributes

This commit is contained in:
Maxim.Mossienko
2012-06-21 19:42:46 +04:00
parent 03d19dd59a
commit 3069a08ed1
3 changed files with 17 additions and 15 deletions
@@ -831,13 +831,13 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent {
}
private SourceFileInfo(@NotNull DataInput in) throws IOException {
final int projCount = in.readInt();
final int projCount = DataInputOutputUtil.readINT(in);
for (int idx = 0; idx < projCount; idx++) {
final int projectId = in.readInt();
final long stamp = in.readLong();
final int projectId = DataInputOutputUtil.readINT(in);
final long stamp = DataInputOutputUtil.readTIME(in);
updateTimestamp(projectId, stamp);
final int pathsCount = in.readInt();
final int pathsCount = DataInputOutputUtil.readINT(in);
for (int i = 0; i < pathsCount; i++) {
final int path = in.readInt();
addOutputPath(projectId, path);
@@ -847,18 +847,18 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent {
public void save(@NotNull final DataOutput out) throws IOException {
final int[] projects = getProjectIds().toArray();
out.writeInt(projects.length);
DataInputOutputUtil.writeINT(out, projects.length);
for (int projectId : projects) {
out.writeInt(projectId);
out.writeLong(getTimestamp(projectId));
DataInputOutputUtil.writeINT(out, projectId);
DataInputOutputUtil.writeTIME(out, getTimestamp(projectId));
final Object value = myProjectToOutputPathMap != null? myProjectToOutputPathMap.get(projectId) : null;
if (value instanceof Integer) {
out.writeInt(1);
DataInputOutputUtil.writeINT(out, 1);
out.writeInt(((Integer)value).intValue());
}
else if (value instanceof TIntHashSet) {
final TIntHashSet set = (TIntHashSet)value;
out.writeInt(set.size());
DataInputOutputUtil.writeINT(out, set.size());
final IOException[] ex = new IOException[] {null};
set.forEach(new TIntProcedure() {
public boolean execute(final int value) {
@@ -877,7 +877,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent {
}
}
else {
out.writeInt(0);
DataInputOutputUtil.writeINT(out, 0);
}
}
}
@@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.newvfs.FileAttribute;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.util.io.DataInputOutputUtil;
import com.intellij.util.messages.MessageBus;
import org.jetbrains.annotations.NotNull;
@@ -77,14 +78,14 @@ public class JavaLanguageLevelPusher implements FilePropertyPusher<LanguageLevel
return false;
}
private static final FileAttribute PERSISTENCE = new FileAttribute("language_level_persistence", 1, true);
private static final FileAttribute PERSISTENCE = new FileAttribute("language_level_persistence", 2, true);
@Override
public void persistAttribute(VirtualFile fileOrDir, @NotNull LanguageLevel level) throws IOException {
final DataInputStream iStream = PERSISTENCE.readAttribute(fileOrDir);
if (iStream != null) {
try {
final int oldLevelOrdinal = iStream.readInt();
final int oldLevelOrdinal = DataInputOutputUtil.readINT(iStream);
if (oldLevelOrdinal == level.ordinal()) return;
}
finally {
@@ -93,7 +94,7 @@ public class JavaLanguageLevelPusher implements FilePropertyPusher<LanguageLevel
}
final DataOutputStream oStream = PERSISTENCE.writeAttribute(fileOrDir);
oStream.writeInt(level.ordinal());
DataInputOutputUtil.writeINT(oStream, level.ordinal());
oStream.close();
for (VirtualFile child : fileOrDir.getChildren()) {