[rules-users] Functions with array parameters (double[]) cease to compile in 5.2.0

ru sorokin at oogis.ru
Tue Aug 16 11:10:40 EDT 2011


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

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];
double D = GreatCircle.sphericalDistance(p1, l1, p2, l2);
int dt = sec - t1;
double ds = dt * v;
if(ds > D){
    int t2 = (int) (t1 + D / v);
    return nextPoint(Nxt, t2, sec, a, v);
} else {
    double az = GreatCircle.sphericalAzimuth(p1, l1, p2, l2);
    double[] sb = GreatCircle.sphericalBetween(p1, l1, ds, az, 1);
    ArrayList al = new ArrayList();
    al.add(N);
    al.add(t1);
    al.add(new double[]{sb[2], sb[3]});
    al.add(az);
    return al;
} }

function ArrayList prevPoint( int N, int t1, int sec, double[] a, double v )
{ int Npv = N-1;
int Npv2 = Npv * 2;
if(Npv2 < 0)
    return null;
int N2 = N * 2;
double p1 = a[N2];
double l1 = a[N2+1];
double p2 = a[Npv2];
double l2 = a[Npv2+1];
double D = GreatCircle.sphericalDistance(p1, l1, p2, l2);
int dt = sec - t1;
double ds = dt * v;
if(ds > D){
    int t2 = (int) (t1 + D / v);
    return prevPoint(Npv, t2, sec, a, v);
} else {
    double az = GreatCircle.sphericalAzimuth(p1, l1, p2, l2);
    double[] sb = GreatCircle.sphericalBetween(p1, l1, ds, az, 1);
    ArrayList al = new ArrayList();
    al.add(N);
    al.add(t1);
    al.add(new double[]{sb[2], sb[3]});
    al.add(az);
    return al;
} }

In 5.1.1 all have been compiling well and working great :) :(

--
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.



More information about the rules-users mailing list