Remove redundant the "this" keyword
[idea/community.git] / platform / lang-api / src / com / intellij / FileIntPropertyPusher.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij;
3
4 import com.intellij.openapi.project.Project;
5 import com.intellij.openapi.roots.impl.FilePropertyPusher;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import com.intellij.openapi.vfs.newvfs.FileAttribute;
8 import com.intellij.util.io.DataInputOutputUtil;
9 import org.jetbrains.annotations.ApiStatus;
10 import org.jetbrains.annotations.NotNull;
11
12 import java.io.DataInputStream;
13 import java.io.DataOutputStream;
14 import java.io.IOException;
15
16 @ApiStatus.Internal
17 @ApiStatus.Experimental
18 public interface FileIntPropertyPusher<T> extends FilePropertyPusher<T> {
19   @NotNull
20   FileAttribute getAttribute();
21
22   int toInt(@NotNull T property) throws IOException;
23
24   @NotNull
25   T fromInt(int val) throws IOException;
26
27   @Override
28   default void persistAttribute(@NotNull Project project, @NotNull VirtualFile fileOrDir, @NotNull T actualValue) throws IOException {
29     try (DataInputStream stream = getAttribute().readAttribute(fileOrDir)) {
30       if (stream != null) {
31         int storedIntValue = DataInputOutputUtil.readINT(stream);
32         if (storedIntValue == toInt(actualValue)) return;
33       } else if (actualValue == getDefaultValue()) {
34         return;
35       }
36     }
37
38     try (DataOutputStream stream = getAttribute().writeAttribute(fileOrDir)) {
39       DataInputOutputUtil.writeINT(stream, toInt(actualValue));
40     }
41
42     propertyChanged(project, fileOrDir, actualValue);
43   }
44
45   void propertyChanged(@NotNull Project project,
46                        @NotNull VirtualFile fileOrDir,
47                        @NotNull T actualProperty);
48 }