I just found that this is apparently a variant of JBRULES-3117
-W
Indeed. It seems that, from 5.2.0 on, when there is a DRL file containing a function with a signature that contains a parameter that is an array of some simple type foo (int, double,...) and a scalar parameter of the same type and another function with a similar signature, an inappropriate syntax error is flagged:
[ <functionname> : unable to resolve type while building function ]
E.g.
function nextPoint( int[] a, int n ){ }
function prevpoint( int[] a, int n ){ }
@ru: Splitting the DRL might be a workaround, but this might not be easy as this is generated code.
-WOn 16 August 2011 17:10, ru <sorokin@oogis.ru> wrote:
Situation definitely treaky - I am working as author on DroolsTab plugin to
Protege (http://protegewiki.stanford.edu/wiki/DroolsTab). In this project
drl file is generated programmatically and sent through pipe to
PackageBuilder. I did some experiments as you suggested. Results:
1. Only one function in package does not produce error messages
2. Two similar functions produce only one error message "In package
TestExecutor error: [ prevPoint : unable to resolve type while building
function
]
function name: prevPoint" and allways on last function in spite of their
order.
Here is corresponding drl file:
package TestExecutor
import ru.oogis.pins.*
import ru.oogis.dro.*
import ru.igis.omtab.*
import java.util.*
import ru.oogis.util.DroClock
import com.bbn.openmap.proj.coords.LatLonPoint
import edu.stanford.smi.protege.model.Cls
import edu.stanford.smi.protege.model.Slot
import edu.stanford.smi.protege.model.Project
import edu.stanford.smi.protege.model.Instance
import edu.stanford.smi.protege.model.KnowledgeBase
import edu.stanford.smi.protege.server.RemoteProjectManager
import java.io.*
import com.bbn.openmap.omGraphics.OMGraphicList
import groovy.lang.Binding
import groovy.lang.GroovyShell
import java.awt.Component
import com.bbn.openmap.layer.location.LocationLayer
import com.bbn.openmap.layer.location.LocationHandler
import clojuretab.ClojureTab
import com.bbn.openmap.MapBean
import com.bbn.openmap.proj.GreatCircle
import com.bbn.openmap.layer.e00.E00Layer
import com.bbn.openmap.omGraphics.OMPoly
import com.bbn.openmap.proj.ProjMath
double D = GreatCircle.sphericalDistance(p1, l1, p2, l2);
function ArrayList nextPoint( int N, int t1, int sec, double[] a, double v )
{ int Nxt = N+1;
int Nxt2 = Nxt * 2;
if(Nxt2 >= a.length-1)
return null;
int N2 = N * 2;
double p1 = a[N2];
double l1 = a[N2+1];
double p2 = a[Nxt2];
double l2 = a[Nxt2+1];
int dt = sec - t1;double az = GreatCircle.sphericalAzimuth(p1, l1, p2, l2);
double ds = dt * v;
if(ds > D){
int t2 = (int) (t1 + D / v);
return nextPoint(Nxt, t2, sec, a, v);
} else {
double[] sb = GreatCircle.sphericalBetween(p1, l1, ds, az, 1);
ArrayList al = new ArrayList();function ArrayList prevPoint( int N, int t1, int sec, double[] a, double v )
al.add(N);
al.add(t1);
al.add(new double[]{sb[2], sb[3]});
al.add(az);
return al;
} }
{ int Npv = N-1;
int Npv2 = Npv * 2;
if(Npv2 < 0)
return null;double p2 = a[Npv2];
int N2 = N * 2;
double p1 = a[N2];
double l1 = a[N2+1];
double l2 = a[Npv2+1];
double D = GreatCircle.sphericalDistance(p1, l1, p2, l2);
int dt = sec - t1;return prevPoint(Npv, t2, sec, a, v);
double ds = dt * v;
if(ds > D){
int t2 = (int) (t1 + D / v);
} else {
double az = GreatCircle.sphericalAzimuth(p1, l1, p2, l2);
double[] sb = GreatCircle.sphericalBetween(p1, l1, ds, az, 1);
ArrayList al = new ArrayList();In 5.1.1 all have been compiling well and working great :) :(
al.add(N);
al.add(t1);
al.add(new double[]{sb[2], sb[3]});
al.add(az);
return al;
} }
--
View this message in context: http://drools.46999.n3.nabble.com/Functions-with-array-parameters-double-cease-to-compile-in-5-2-0-tp3251260p3258930.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users