package jetbrains.mps.core.tool.environment.classloading; /*Generated by MPS */ import org.jetbrains.annotations.NotNull; @SuppressWarnings(value = {"NonPrivateFieldAccessedInSynchronizedContext"}) public abstract class TimedComputable<T> extends Timed<T> { private int myAcquireCount = 0; public TimedComputable() { } public T acquire() { myAccessCount++; myAcquireCount++; if (myT == null) { myT = calc(); } poll(); return myT; } protected T getIfCached() { return myT; } public void release() { myAcquireCount--; assert myAcquireCount >= 0; } @Override public void dispose() { assert myAcquireCount == 0; super.dispose(); } @Override protected boolean isLocked() { return myAcquireCount != 0; } @NotNull protected abstract T calc(); }