Merge pull request #185 from shannah/master

Fixed NPE in LinkedList.remove(e)
This commit is contained in:
Alexey Andreev 2016-02-21 22:27:24 +03:00
commit 1bb36b98b2
2 changed files with 31 additions and 2 deletions

View File

@ -343,10 +343,10 @@ public class TLinkedList<E> extends TAbstractSequentialList<E> implements TDeque
} }
removeEntry(currentEntry); removeEntry(currentEntry);
if (currentEntry == prevEntry) { if (currentEntry == prevEntry) {
prevEntry = nextEntry.previous; prevEntry = hasNext() ? nextEntry.previous : null;
--index; --index;
} else if (currentEntry == nextEntry) { } else if (currentEntry == nextEntry) {
nextEntry = prevEntry.next; nextEntry = hasPrevious() ? prevEntry.next : null;
} }
--size; --size;
version = modCount; version = modCount;

View File

@ -81,4 +81,33 @@ public class TTimer extends TObject {
}; };
task.nativeTimerId = Window.setTimeout(handler, (int) delay); task.nativeTimerId = Window.setTimeout(handler, (int) delay);
} }
public void scheduleAtFixedRate(final TTimerTask task, long delay, long period) {
if (cancelled || task.timer != null || task.nativeTimerId >= 0) {
throw new TIllegalStateException();
}
final long[] nextStartTime = new long[]{System.currentTimeMillis() + delay};
task.timer = this;
TimerHandler handler = new TimerHandler() {
@Override public void onTimer() {
new Thread(() -> {
if (cancelled || task.timer == null) {
return;
}
long nextDelay = nextStartTime[0] - System.currentTimeMillis();
if (nextDelay < 0 ) {
nextDelay = 0;
}
task.nativeTimerId = Window.setTimeout(this, (int) nextDelay);
nextStartTime[0] += period;
TTimerTask.performOnce(task);
if (!cancelled) {
task.timer = TTimer.this;
}
}).start();
}
};
task.nativeTimerId = Window.setTimeout(handler, (int) delay);
nextStartTime[0] += period;
}
} }