Skip to content

Commit 3716a6c

Browse files
committed
fix: getVariableFullNames returns incorrect result, #549
1 parent a827810 commit 3716a6c

4 files changed

Lines changed: 38 additions & 7 deletions

File tree

src/main/java/com/googlecode/aviator/BaseExpression.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,12 @@ protected void afterPopulateFullNames(final Map<String, VariableMeta> fullNames,
118118
if (this.lambdaBootstraps != null && !this.lambdaBootstraps.isEmpty()) {
119119
for (LambdaFunctionBootstrap bootstrap : this.lambdaBootstraps.values()) {
120120
for (VariableMeta meta : bootstrap.getClosureOverFullVarNames()) {
121-
VariableMeta existsMeta = fullNames.get(meta.getName());
121+
final String name = meta.getName();
122+
123+
VariableMeta existsMeta = fullNames.get(name);
122124
if (existsMeta == null) {
123-
if (!parentVars.contains(meta.getName())) {
125+
String[] tmps = Constants.SPLIT_PAT.split(name);
126+
if (!parentVars.contains(tmps[0])) {
124127
fullNames.put(meta.getName(), meta);
125128
}
126129
} else {

src/test/java/com/googlecode/aviator/AviatorEvaluatorInstanceCompatibleUnitTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public void setup() {
1717
this.instance.setOption(Options.FEATURE_SET, Feature.getCompatibleFeatures());
1818
}
1919

20+
@Test
21+
public void testIssue549() {
22+
// ignore
23+
}
24+
2025
@Override
2126
@Test(expected = UnsupportedFeatureException.class)
2227
public void testMaxLoopCount() {

src/test/java/com/googlecode/aviator/AviatorEvaluatorInstanceUnitTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ public void setup() {
6161
this.instance.setOption(Options.EVAL_TIMEOUT_MS, 100);
6262
}
6363

64+
65+
@Test
66+
public void testIssue549() {
67+
Expression exp = instance.compile(
68+
"let appkey = get_appkey(\"com.sankuai.aaa.bbb.ccc\"); if appkey != nil{ return appkey.serviceLevel; } return nil;");
69+
assertTrue(exp.getVariableNames().isEmpty());
70+
assertTrue(exp.getVariableFullNames().isEmpty());
71+
72+
exp = instance.compile("if appkey != nil{ return appkey.serviceLevel; } return nil;");
73+
assertEquals(Arrays.asList("appkey"), exp.getVariableNames());
74+
assertEquals(Arrays.asList("appkey"), exp.getVariableFullNames());
75+
}
76+
6477
@Test
6578
public void testIssue476() {
6679
Expression expr = instance.compile("let abc = new String('abc');");

src/test/java/com/googlecode/aviator/test/function/FunctionTest.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -831,19 +831,29 @@ public void testGetVariableNamesAndFunctionNamesComplex() {
831831
funcs = getFuncs(exp);
832832
assertEquals(0, vars.size());
833833
vars = exp.getVariableFullNames();
834-
assertEquals(2, vars.size());
835-
assertEquals("a.b", vars.get(0));
836-
assertEquals("a.c", vars.get(1));
834+
assertEquals(0, vars.size());
837835
assertEquals(Arrays.asList("seq.map"), funcs);
838836

839837
exp = this.instance.compile("a = seq.map(); a.c = 2; add = lambda() -> a.b + a.c end; add()");
840838
funcs = getFuncs(exp);
841839
vars = exp.getVariableNames();
842840
assertEquals(0, vars.size());
843841
vars = exp.getVariableFullNames();
844-
assertEquals(1, vars.size());
845-
assertEquals("a.b", vars.get(0));
842+
assertEquals(0, vars.size());
846843
assertEquals(Arrays.asList("seq.map"), funcs);
844+
845+
exp = this.instance.compile("add = lambda(a) -> a.b + test1(a.c) + test2(y.d) end; add(x)");
846+
funcs = getFuncs(exp);
847+
vars = exp.getVariableNames();
848+
assertEquals(2, vars.size());
849+
assertEquals("y", vars.get(0));
850+
assertEquals("x", vars.get(1));
851+
vars = exp.getVariableFullNames();
852+
assertEquals(2, vars.size());
853+
assertEquals("y.d", vars.get(0));
854+
assertEquals("x", vars.get(1));
855+
assertEquals(2, funcs.size());
856+
assertEquals(Arrays.asList("test1", "test2"), funcs);
847857
}
848858

849859
private List<String> getFuncs(Expression exp) {

0 commit comments

Comments
 (0)