Skip to content

Commit 58110c9

Browse files
committed
Use eager parser depending on execution mode
1 parent 21e805a commit 58110c9

5 files changed

Lines changed: 34 additions & 22 deletions

File tree

src/main/java/com/hubspot/jinjava/Jinjava.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,17 @@ public Jinjava(JinjavaConfig globalConfig) {
8585
this.globalContext = new Context();
8686

8787
Properties expConfig = new Properties();
88-
// TODO add config flag
89-
// if (globalConfig.isEagerExecutionEnabled()) {
90-
expConfig.setProperty(
91-
TreeBuilder.class.getName(),
92-
EagerExtendedSyntaxBuilder.class.getName()
93-
);
94-
// } else {
95-
// expConfig.setProperty(
96-
// TreeBuilder.class.getName(),
97-
// ExtendedSyntaxBuilder.class.getName()
98-
// );
99-
// }
88+
if (globalConfig.getExecutionMode().useEagerParser()) {
89+
expConfig.setProperty(
90+
TreeBuilder.class.getName(),
91+
EagerExtendedSyntaxBuilder.class.getName()
92+
);
93+
} else {
94+
expConfig.setProperty(
95+
TreeBuilder.class.getName(),
96+
ExtendedSyntaxBuilder.class.getName()
97+
);
98+
}
10099

101100
TypeConverter converter = new TruthyTypeConverter();
102101
this.expressionFactory = new ExpressionFactoryImpl(expConfig, converter);

src/main/java/com/hubspot/jinjava/el/JinjavaInterpreterResolver.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,15 @@ private Object getValue(
242242
}
243243

244244
if (value instanceof DeferredValue) {
245-
// TODO add a flag to toggle which is thrown
246-
throw new DeferredParsingException(String.class, propertyName);
247-
// throw new DeferredValueException(
248-
// propertyName,
249-
// interpreter.getLineNumber(),
250-
// interpreter.getPosition()
251-
// );
245+
if (interpreter.getConfig().getExecutionMode().useEagerParser()) {
246+
throw new DeferredParsingException(String.class, propertyName);
247+
} else {
248+
throw new DeferredValueException(
249+
propertyName,
250+
interpreter.getLineNumber(),
251+
interpreter.getPosition()
252+
);
253+
}
252254
}
253255
} catch (PropertyNotFoundException e) {
254256
if (errOnUnknownProp) {

src/main/java/com/hubspot/jinjava/interpret/JinjavaInterpreter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,11 @@ public Object retraceVariable(String variable, int lineNumber, int startPosition
425425
Object obj = context.get(varName);
426426
if (obj != null) {
427427
if (obj instanceof DeferredValue) {
428-
// TODO add a flag to toggle which is thrown
429-
throw new DeferredParsingException(String.class, variable);
430-
// throw new DeferredValueException(variable, lineNumber, startPosition);
428+
if (config.getExecutionMode().useEagerParser()) {
429+
throw new DeferredParsingException(String.class, variable);
430+
} else {
431+
throw new DeferredValueException(variable, lineNumber, startPosition);
432+
}
431433
}
432434
obj = var.resolve(obj);
433435
}

src/main/java/com/hubspot/jinjava/mode/EagerExecutionMode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public boolean isPreserveRawTags() {
2020
return true;
2121
}
2222

23+
@Override
24+
public boolean useEagerParser() {
25+
return true;
26+
}
27+
2328
@Override
2429
public void prepareContext(Context context) {
2530
context

src/main/java/com/hubspot/jinjava/mode/ExecutionMode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,9 @@ default boolean isPreserveRawTags() {
77
return false;
88
}
99

10+
default boolean useEagerParser() {
11+
return false;
12+
}
13+
1014
default void prepareContext(Context context) {}
1115
}

0 commit comments

Comments
 (0)