Hi all,

 

I encountered the following strange inconsistent behavior with the eclipse IDE and the Drools compiler.

 

I have the following test rule which should fire if a specific time condition is present. The time condition is evaluated by a function called getTimelineDescriptor() which is imported using import function.

 

rule "ScheduleTime: request for explicit time arrived" 

     

      when       

                        ConditionMatrix(descriptors.times.timeline contains getTimelineDescriptor(EButtonID.TIME_SPECIFIC) ||

                                        descriptors.times.timeline contains getTimelineDescriptor(EButtonID.DYNAMIC_ABSOLUTE_TIME) ||

                                        descriptors.times.timeline contains getTimelineDescriptor(EButtonID.DYNAMIC_RELATIVE_TIME),

                                        $srcAlt: srcWorkingAlternative,                                                                                          

                                        )

                                                           

      then

            //something...

                       

end

 

the IDE indicates an error on the conditionMatrix line with the following description:

Multiple markers at this line

- [ERR 101] Line 123:77 no viable alternative at input '(' in rule "ScheduleTime: request for explicit time arrived" in pattern ConditionMatrix

- [ERR 102] Line 123:103 mismatched input '||' expecting 'then' in rule "ScheduleTime: request for explicit time arrived"

- [ERR 101] Line 123:101 no viable alternative at input ')' in rule "ScheduleTime: request for explicit time arrived" in pattern getTimelineDescriptor

 

BUT it compiles ok and runs properly.

 

When I wrap the function with brackets (as I thought it should be) like this

 

rule "ScheduleTime: request for explicit time arrived" 

     

      when       

                        ConditionMatrix(descriptors.times.timeline contains (getTimelineDescriptor(EButtonID.TIME_SPECIFIC)) ||

                                        descriptors.times.timeline contains (getTimelineDescriptor(EButtonID.DYNAMIC_ABSOLUTE_TIME)) ||

                                        descriptors.times.timeline contains (getTimelineDescriptor(EButtonID.DYNAMIC_RELATIVE_TIME)),

                                        $srcAlt: srcWorkingAlternative,                                                                                          

                                        )

                                                           

      then

            //something...

                       

end

 

the IDE shows no error but the compilation fails with the following error:

16:19:14,734 [ERROR] [LoggerStream]: Unable to Analyse Expression descriptors.times.timeline contains (getTimelineDescriptor(EButtonID.TIME_SPECIFIC)) || descriptors.times.timeline contains (getTimelineDescriptor(EButtonID.DYNAMIC_ABSOLUTE_TIME)) || descriptors.times.timeline contains (getTimelineDescriptor(EButtonID.DYNAMIC_RELATIVE_TIME)):

[Error: unable to resolve method using strict-mode: com.delegatecom.rules.ConditionMatrix.contains(com.delegatecom.nlp.api.TimelineDescriptor)]

[Near : {... tors.times.timeline contains (getTimelineDescripto ....}]

 

I am using Drools 5.2 with Helios (Eclipse).

Any ideas why this is so? Although I have a working option it is impossible to maintain code when there are error indications.

 

Thanks,

Hezi