From 1ad10c8ced6575b7ca621978d0b2369c0df39b32 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 17 Feb 2023 10:46:32 +0100 Subject: [PATCH] [Fix] Fixed NPE in StrolchTimedState.trim() --- .../li/strolch/model/timedstate/StrolchTimedState.java | 8 ++++++-- .../strolch/model/timedstate/StrolchTimedStateTest.java | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java b/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java index bb0daa8a1..6d8cd0637 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java @@ -207,8 +207,12 @@ public interface StrolchTimedState extends StrolchElement { ITimeVariable timeEvolution = getTimeEvolution(); long time = timeStamp.toInstant().toEpochMilli(); - if (keepLastValue && timeEvolution.getFutureValues(time).isEmpty()) - time = timeEvolution.getValueAt(time).getTime(); + if (keepLastValue && timeEvolution.getFutureValues(time).isEmpty()) { + ITimeValue valueAt = timeEvolution.getValueAt(time); + if (valueAt == null) + return false; + time = valueAt.getTime(); + } return !timeEvolution.removePastValues(time).isEmpty(); } diff --git a/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java b/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java index 07e801ce6..153e8e0c1 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/timedstate/StrolchTimedStateTest.java @@ -200,6 +200,14 @@ public class StrolchTimedStateTest { assertEquals(2, floatState.getTimeEvolution().getValues().size()); } + @Test + public void testTrimTimedState4() { + ZonedDateTime now = ZonedDateTime.now().truncatedTo(ChronoUnit.DAYS).minusDays(20); + FloatTimedState floatState = new FloatTimedState(STATE_FLOAT_ID, STATE_FLOAT_ID); + assertFalse(floatState.trim(now, true)); + assertFalse(floatState.trim(20)); + } + private static Set asSet(String value) { HashSet hashSet = new HashSet<>(); hashSet.add(new AString(value));