package krasa.formatter.settings.provider; import java.io.File; import krasa.formatter.common.ModifiableFile; import org.jetbrains.annotations.Nullable; /** * @author Vojtech Krasa */ public abstract class CachedProvider<T> { private ModifiableFile modifiableFile; private ModifiableFile.Monitor lastState; private T cachedValue; protected CachedProvider(ModifiableFile modifiableFile) { this.modifiableFile = modifiableFile; } protected abstract T readFile(File file); public T get() { if (cachedValue == null || modifiableFile.wasChanged(lastState)) { saveLastModified(); cachedValue = readFile(modifiableFile); } return cachedValue; } public ModifiableFile.Monitor getModifiedMonitor() { return modifiableFile.getModifiedMonitor(); } public boolean wasChanged(@Nullable ModifiableFile.Monitor lastState) { return lastState == null || modifiableFile.wasChanged(lastState); } private void saveLastModified() { lastState = modifiableFile.getModifiedMonitor(); } }