@@ -76,7 +76,7 @@ private static void resolveRecursive(Expression exp, Map<String, Expression> map
7676 }
7777 } else if (left instanceof Var var && canSubstitute (var , right )) {
7878 map .put (var .getName (), right .clone ());
79- } else if (left instanceof FunctionInvocation && !right . toString (). contains ( leftKey )) {
79+ } else if (left instanceof FunctionInvocation && !containsExpression ( right , left )) {
8080 map .put (leftKey , right .clone ());
8181 }
8282 }
@@ -147,7 +147,7 @@ private static boolean hasUsage(Expression exp, String name) {
147147 && (right .isLiteral () || (!(right instanceof Var ) && canSubstitute (v , right ))))
148148 return false ;
149149 if (left instanceof FunctionInvocation && left .toString ().equals (name )
150- && (right .isLiteral () || (!(right instanceof Var ) && !right . toString (). contains ( name ))))
150+ && (right .isLiteral () || (!(right instanceof Var ) && !containsExpression ( right , left ))))
151151 return false ;
152152 if (right instanceof Var v && v .getName ().equals (name ) && left .isLiteral ())
153153 return false ;
@@ -210,4 +210,18 @@ private static boolean containsVariable(Expression exp, String name) {
210210 }
211211 return false ;
212212 }
213+
214+ private static boolean containsExpression (Expression exp , Expression target ) {
215+ if (exp .equals (target ))
216+ return true ;
217+
218+ if (!exp .hasChildren ())
219+ return false ;
220+
221+ for (Expression child : exp .getChildren ()) {
222+ if (containsExpression (child , target ))
223+ return true ;
224+ }
225+ return false ;
226+ }
213227}
0 commit comments