Skip to content

Commit

Permalink
fix: getVariableFullNames returns incorrect result, #549
Browse files Browse the repository at this point in the history
  • Loading branch information
killme2008 committed Jun 10, 2024
1 parent a827810 commit 3716a6c
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 7 deletions.
7 changes: 5 additions & 2 deletions src/main/java/com/googlecode/aviator/BaseExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,12 @@ protected void afterPopulateFullNames(final Map<String, VariableMeta> fullNames,
if (this.lambdaBootstraps != null && !this.lambdaBootstraps.isEmpty()) {
for (LambdaFunctionBootstrap bootstrap : this.lambdaBootstraps.values()) {
for (VariableMeta meta : bootstrap.getClosureOverFullVarNames()) {
VariableMeta existsMeta = fullNames.get(meta.getName());
final String name = meta.getName();

VariableMeta existsMeta = fullNames.get(name);
if (existsMeta == null) {
if (!parentVars.contains(meta.getName())) {
String[] tmps = Constants.SPLIT_PAT.split(name);
if (!parentVars.contains(tmps[0])) {
fullNames.put(meta.getName(), meta);
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ public void setup() {
this.instance.setOption(Options.FEATURE_SET, Feature.getCompatibleFeatures());
}

@Test
public void testIssue549() {
// ignore
}

@Override
@Test(expected = UnsupportedFeatureException.class)
public void testMaxLoopCount() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,19 @@ public void setup() {
this.instance.setOption(Options.EVAL_TIMEOUT_MS, 100);
}


@Test
public void testIssue549() {
Expression exp = instance.compile(
"let appkey = get_appkey(\"com.sankuai.aaa.bbb.ccc\"); if appkey != nil{ return appkey.serviceLevel; } return nil;");
assertTrue(exp.getVariableNames().isEmpty());
assertTrue(exp.getVariableFullNames().isEmpty());

exp = instance.compile("if appkey != nil{ return appkey.serviceLevel; } return nil;");
assertEquals(Arrays.asList("appkey"), exp.getVariableNames());
assertEquals(Arrays.asList("appkey"), exp.getVariableFullNames());
}

@Test
public void testIssue476() {
Expression expr = instance.compile("let abc = new String('abc');");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -831,19 +831,29 @@ public void testGetVariableNamesAndFunctionNamesComplex() {
funcs = getFuncs(exp);
assertEquals(0, vars.size());
vars = exp.getVariableFullNames();
assertEquals(2, vars.size());
assertEquals("a.b", vars.get(0));
assertEquals("a.c", vars.get(1));
assertEquals(0, vars.size());
assertEquals(Arrays.asList("seq.map"), funcs);

exp = this.instance.compile("a = seq.map(); a.c = 2; add = lambda() -> a.b + a.c end; add()");
funcs = getFuncs(exp);
vars = exp.getVariableNames();
assertEquals(0, vars.size());
vars = exp.getVariableFullNames();
assertEquals(1, vars.size());
assertEquals("a.b", vars.get(0));
assertEquals(0, vars.size());
assertEquals(Arrays.asList("seq.map"), funcs);

exp = this.instance.compile("add = lambda(a) -> a.b + test1(a.c) + test2(y.d) end; add(x)");
funcs = getFuncs(exp);
vars = exp.getVariableNames();
assertEquals(2, vars.size());
assertEquals("y", vars.get(0));
assertEquals("x", vars.get(1));
vars = exp.getVariableFullNames();
assertEquals(2, vars.size());
assertEquals("y.d", vars.get(0));
assertEquals("x", vars.get(1));
assertEquals(2, funcs.size());
assertEquals(Arrays.asList("test1", "test2"), funcs);
}

private List<String> getFuncs(Expression exp) {
Expand Down

0 comments on commit 3716a6c

Please sign in to comment.