ical4j icon indicating copy to clipboard operation
ical4j copied to clipboard

NullPointerException when calculating recurrence set

Open jhruzova opened this issue 4 years ago • 1 comments

Hi,

I tried to generate recurrence set for this event and it seems like the frequency minutely (same for secondly and hourly) fails on NullPointerException when using BYDAY property, but according to doc it should work.

I was expecting that this will generate events every 15 minutes from 13:30 to 16:30 every Wednesday.

Thanks

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTAMP:20210225T141856Z
DTSTART:20210104T130000Z
SUMMARY:even
UID:9aaf74fd-b0d6-4958-84c1-01ee9e8e9eac
RRULE:FREQ=MINUTELY;INTERVAL=15;BYDAY=WE;BYHOUR=13,14,15,16
EXRULE:FREQ=MINUTELY;INTERVAL=15;BYHOUR=16;BYMINUTE=30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
EXRULE:FREQ=MINUTELY;INTERVAL=15;BYHOUR=13;BYMINUTE=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
END:VEVENT
END:VCALENDAR
Exception in thread "main" java.lang.NullPointerException
	at net.fortuna.ical4j.transform.recurrence.ByDayRule.transform(ByDayRule.java:41)
	at net.fortuna.ical4j.transform.recurrence.ByDayRule.transform(ByDayRule.java:19)
	at net.fortuna.ical4j.model.Recur.getCandidates(Recur.java:924)
	at net.fortuna.ical4j.model.Recur.getDates(Recur.java:736)
	at net.fortuna.ical4j.model.Recur.getDates(Recur.java:643)
	at net.fortuna.ical4j.model.Component.lambda$calculateRecurrenceSet$11(Component.java:362)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
	at net.fortuna.ical4j.model.Component.calculateRecurrenceSet(Component.java:364)
	at app.Application.generateEvents(main.java:85)
	at app.Application.main(main.java:71)

image

jhruzova avatar Feb 25 '21 15:02 jhruzova

Update: This code should help to reproduce it. application.zip

In my opinion, this method in Recur.java should not return null for other frequencies than daily, weekly, monthly, yearly, when in documentation also secondly, minutely and hourly are supported.

 private Frequency deriveFilterType() {
        if (frequency == Frequency.DAILY || !getYearDayList().isEmpty() || !getMonthDayList().isEmpty()) {
            return Frequency.DAILY;
        } else if (frequency == Frequency.WEEKLY || !getWeekNoList().isEmpty()) {
            return Frequency.WEEKLY;
        } else if (frequency == Frequency.MONTHLY || !getMonthList().isEmpty()) {
            return Frequency.MONTHLY;
        } else if (frequency == Frequency.YEARLY) {
            return Frequency.YEARLY;
        }
        return null;
    }

jhruzova avatar Apr 08 '21 07:04 jhruzova