Skip to content

Commit a84a2c9

Browse files
committed
Preserve identifier in EagerAstMethod like is done in EagerAstMacroFunction.
Also migrate both to directly use the EagerAstParameters.getPartiallyResolved to reconstruct the parameters. There's no reason that it wasn't already done this way
1 parent ad68c0f commit a84a2c9

4 files changed

Lines changed: 33 additions & 32 deletions

File tree

src/main/java/com/hubspot/jinjava/el/ext/eager/EagerAstMacroFunction.java

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.lang.reflect.Array;
1313
import java.lang.reflect.InvocationTargetException;
1414
import java.lang.reflect.Method;
15-
import java.util.StringJoiner;
1615
import javax.el.ELContext;
1716
import javax.el.ELException;
1817

@@ -154,26 +153,23 @@ public String getPartiallyResolved(
154153
) {
155154
return deferredParsingException.getDeferredEvalResult();
156155
}
157-
StringBuilder sb = new StringBuilder();
158-
sb.append(getName());
159-
try {
160-
StringJoiner paramString = new StringJoiner(", ");
161-
for (int i = 0; i < ((AstParameters) params).getCardinality(); i++) {
162-
paramString.add(
163-
EvalResultHolder.reconstructNode(
164-
bindings,
165-
context,
166-
(EvalResultHolder) ((AstParameters) params).getChild(i),
167-
deferredParsingException,
168-
preserveIdentifier
169-
)
156+
String paramString;
157+
if (
158+
deferredParsingException != null &&
159+
deferredParsingException.getSourceNode() == params
160+
) {
161+
paramString = deferredParsingException.getDeferredEvalResult();
162+
} else {
163+
paramString =
164+
params.getPartiallyResolved(
165+
bindings,
166+
context,
167+
deferredParsingException,
168+
preserveIdentifier
170169
);
171-
}
172-
sb.append(String.format("(%s)", paramString));
173-
} catch (DeferredParsingException dpe) {
174-
sb.append(String.format("(%s)", dpe.getDeferredEvalResult()));
175170
}
176-
return sb.toString();
171+
172+
return (getName() + String.format("(%s)", paramString));
177173
}
178174

179175
@Override

src/main/java/com/hubspot/jinjava/el/ext/eager/EagerAstMethod.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import com.hubspot.jinjava.el.ext.DeferredParsingException;
44
import com.hubspot.jinjava.interpret.DeferredValueException;
5-
import com.hubspot.jinjava.util.EagerExpressionResolver;
65
import de.odysseus.el.tree.Bindings;
76
import de.odysseus.el.tree.impl.ast.AstMethod;
8-
import de.odysseus.el.tree.impl.ast.AstNode;
97
import de.odysseus.el.tree.impl.ast.AstParameters;
108
import de.odysseus.el.tree.impl.ast.AstProperty;
119
import javax.el.ELContext;
@@ -90,16 +88,13 @@ public String getPartiallyResolved(
9088
) {
9189
paramString = deferredParsingException.getDeferredEvalResult();
9290
} else {
93-
try {
94-
paramString =
95-
EagerExpressionResolver.getValueAsJinjavaStringSafe(
96-
((AstNode) params).eval(bindings, context)
97-
);
98-
// remove brackets so they can get replaced with parentheses
99-
paramString = paramString.substring(1, paramString.length() - 1);
100-
} catch (DeferredParsingException e) {
101-
paramString = e.getDeferredEvalResult();
102-
}
91+
paramString =
92+
params.getPartiallyResolved(
93+
bindings,
94+
context,
95+
deferredParsingException,
96+
preserveIdentifier
97+
);
10398
}
10499

105100
return (propertyResult + String.format("(%s)", paramString));

src/main/java/com/hubspot/jinjava/el/ext/eager/EagerAstParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public String getPartiallyResolved(
7070
context,
7171
node,
7272
deferredParsingException,
73-
false
73+
preserveIdentifier
7474
)
7575
)
7676
);

src/test/java/com/hubspot/jinjava/el/ext/eager/EagerAstMethodTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ public void itPreservesIdentifier() {
6969
}
7070
}
7171

72+
@Test
73+
public void itPreservesNonDeferredIdentifier() {
74+
try {
75+
interpreter.resolveELExpression("deferred.append(foo_map)", -1);
76+
fail("Should throw DeferredParsingException");
77+
} catch (DeferredParsingException e) {
78+
assertThat(e.getDeferredEvalResult()).isEqualTo("deferred.append(foo_map)");
79+
}
80+
}
81+
7282
@Test
7383
public void itPreservesAstDot() {
7484
try {

0 commit comments

Comments
 (0)