I found that using a logical 'or' pipe (|) with global variables will
give a NullPointerException in the JessDE editor.
Given the following:
(defglobal ?*A* = "A")
(defglobal ?*B* = "B")
(deftemplate aTmpl
(slot aSlot))
(defrule aRule
(aTmpl (aSlot ?*A*|?*B*))
=>
(printout t "Hello" crlf))
The JessDE Editor shows no syntax errors however when you try to save
the file you get a "Save Failed:null" dialog.
With the following exception:
java.lang.NullPointerException
at jess.HasLHS.isAVariableDefinition(HasLHS.java:401)
at jess.HasLHS.transformOrConjunctionsIntoOrFuncalls(HasLHS.java:324)
at jess.HasLHS.addCE(HasLHS.java:176)
at jess.Defrule.addCE(Defrule.java:137)
at jess.HasLHS.doSetLHS(HasLHS.java:145)
at jess.Defrule.createChain(Defrule.java:434)
at jess.HasLHS.setLHS(HasLHS.java:133)
at jess.Jesp.parseDefrule(Jesp.java:1376)
at jess.Jesp.parseExpression(Jesp.java:401)
at jess.Jesp.parseExpression(Jesp.java:354)
at
gov.sandia.jess.editor.model.JessModel.processDocument(JessModel.java:
231)
at
gov.sandia.jess.editor.model.JessModel.recomputeExpressionStarts(JessM
odel.java:211)
at
gov.sandia.jess.editor.JessDocument.recomputeExpressionStarts(JessDocu
ment.java:57)
at gov.sandia.jess.editor.JessEditor.touch(JessEditor.java:210)
at gov.sandia.jess.editor.JessEditor.doSave(JessEditor.java:202)
at
org.eclipse.ui.internal.SaveableHelper$1.run(SaveableHelper.java:95)
at
org.eclipse.ui.internal.SaveableHelper$2.run(SaveableHelper.java:116)
at
org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalConte
xt.java:346)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:291)
at
org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.jav
a:624)
at
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at
org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:
621)
at
org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2134)
at
org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(Sav
eableHelper.java:122)
at
org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:10
0)
at
org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1154
)
at
org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:2714
)
at
org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:27
27)
at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:69)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:996)
at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(
ActionContributionItem.java:538)
at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContrib
utionItem.java:488)
at
org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionCo
ntributionItem.java:441)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
at
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3125)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2758)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java
:367)
at
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
at
org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103
)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActi
vator.java:226)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.jav
a:376)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.jav
a:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
at org.eclipse.core.launcher.Main.run(Main.java:973)
at org.eclipse.core.launcher.Main.main(Main.java:948)
Using:
jess version=70b7
java version=1.5.0_06
eclipse 3.1.2
BTW, if you change the logical 'or' pipe (|) to a logical 'and'
ampersand (&) you don't get the error.
(defrule aRule
(aTmpl (aSlot ?*A*&?*B*))
=>
(printout t "Hello" crlf))
Additionally you don't get the error using local variables:
(deftemplate anotherTmpl
(slot s1)
(slot s2))
(defrule aRule
(anotherTmpl
(s1 ?s1)
(s2 ?s2))
(aTmpl
(aSlot ?s1|?s2))
=>
(printout t "Hello" crlf))
Thanks,
- Howard
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------