@@ -345,58 +345,72 @@ public static AviatorFunction generateGFunction(String name, RoleManager rm) {
345
345
346
346
@ Override
347
347
public AviatorObject variadicCall (Map <String , Object > env , AviatorObject ... args ) {
348
+ Map <String , AviatorBoolean > memorized = new HashMap <>();
349
+
348
350
int len = args .length ;
349
351
if (len < 2 ){
350
352
return AviatorBoolean .valueOf (false );
351
353
}
354
+ String key = "" ;
352
355
Object name1Obj = FunctionUtils .getJavaObject (args [0 ], env );
353
356
String name2 = FunctionUtils .getStringValue (args [1 ], env );
354
357
Sequence name1List = null ;
355
358
String name1 = null ;
356
359
if (name1Obj instanceof java .util .List ) {
357
360
name1List = RuntimeUtils .seq (name1Obj ,env );
361
+ for (Object obj : name1List ) {
362
+ key += ";" + obj ;
363
+ }
364
+ key += ";" + name2 ;
358
365
}
359
366
else {
360
367
name1 = (String ) name1Obj ;
368
+ key = ";" + name1 + ";" + name2 ;
361
369
}
362
370
363
- if (rm == null ) {
364
- return AviatorBoolean .valueOf (name1 .equals (name2 ));
371
+ AviatorBoolean value = memorized .get (key );
372
+ if (value != null ) {
373
+ return value ;
365
374
}
366
- switch (len ){
367
- case 2 :
368
- if (name1List !=null ) {
369
- boolean res = false ;
370
- for (Object obj : name1List ) {
371
- if (rm .hasLink ((String ) obj , name2 )){
372
- res = true ;
373
- break ;
374
- }
375
+
376
+ if (rm == null ) {
377
+ value = AviatorBoolean .valueOf (name1 .equals (name2 ));
378
+ } else if (len == 2 ) {
379
+ if (name1List !=null ) {
380
+ boolean res = false ;
381
+ for (Object obj : name1List ) {
382
+ if (rm .hasLink ((String ) obj , name2 )){
383
+ res = true ;
384
+ break ;
375
385
}
376
- return AviatorBoolean .valueOf (res );
377
386
}
378
- return AviatorBoolean .valueOf (rm .hasLink (name1 , name2 ));
379
- case 3 :
380
- String domain = FunctionUtils .getStringValue (args [2 ], env );
381
- return AviatorBoolean .valueOf (rm .hasLink (name1 , name2 , domain ));
382
- case 4 :
383
- String p_dom = FunctionUtils .getStringValue (args [3 ], env );
384
- Object domainObj = FunctionUtils .getJavaObject (args [2 ], env );
387
+ value = AviatorBoolean .valueOf (res );
388
+ }
389
+ value = AviatorBoolean .valueOf (rm .hasLink (name1 , name2 ));
390
+ } else if (len == 3 ) {
391
+ String domain = FunctionUtils .getStringValue (args [2 ], env );
392
+ value = AviatorBoolean .valueOf (rm .hasLink (name1 , name2 , domain ));
393
+ } else if (len == 4 ) {
394
+ String p_dom = FunctionUtils .getStringValue (args [3 ], env );
395
+ Object domainObj = FunctionUtils .getJavaObject (args [2 ], env );
385
396
386
- boolean res = false ;
387
- if (domainObj instanceof java .util .List ){
388
- Sequence domainSeq = RuntimeUtils .seq (domainObj ,env );
389
- for (Object r_dom : domainSeq ) {
390
- if (r_dom .equals (p_dom ) && rm .hasLink (name1 , name2 , (String ) r_dom )){
391
- res = true ;
392
- break ;
393
- }
397
+ boolean res = false ;
398
+ if (domainObj instanceof java .util .List ){
399
+ Sequence domainSeq = RuntimeUtils .seq (domainObj ,env );
400
+ for (Object r_dom : domainSeq ) {
401
+ if (r_dom .equals (p_dom ) && rm .hasLink (name1 , name2 , (String ) r_dom )){
402
+ res = true ;
403
+ break ;
394
404
}
395
405
}
396
- return AviatorBoolean .valueOf (res );
397
- default :
398
- return AviatorBoolean .valueOf (false );
406
+ }
407
+ value = AviatorBoolean .valueOf (res );
408
+ } else {
409
+ value = AviatorBoolean .valueOf (false );
399
410
}
411
+
412
+ memorized .put (key , value );
413
+ return value ;
400
414
}
401
415
402
416
@ Override
0 commit comments