11package com .hubspot .jinjava ;
22
3- import org .immutables .value .Value ;
4-
53/**
64 * This class allows Jinjava to be configured to override legacy behaviour.
75 * LegacyOverrides.NONE signifies that none of the legacy functionality will be overridden.
86 * LegacyOverrides.ALL signifies that all new functionality will be used; avoid legacy "bugs".
97 */
10- @ Value .Immutable (singleton = true )
11- @ JinjavaImmutableStyle .WithStyle
12- public interface LegacyOverrides extends WithLegacyOverrides {
13- LegacyOverrides NONE = new Builder ().build ();
14- LegacyOverrides THREE_POINT_0 = new Builder ()
8+ public class LegacyOverrides {
9+
10+ public static final LegacyOverrides NONE = new LegacyOverrides .Builder ().build ();
11+ public static final LegacyOverrides THREE_POINT_0 = new Builder ()
1512 .withEvaluateMapKeys (true )
1613 .withIterateOverMapKeys (true )
1714 .withUsePyishObjectMapper (true )
@@ -22,7 +19,7 @@ public interface LegacyOverrides extends WithLegacyOverrides {
2219 .withUseTrimmingForNotesAndExpressions (true )
2320 .withKeepNullableLoopValues (true )
2421 .build ();
25- LegacyOverrides ALL = new Builder ()
22+ public static final LegacyOverrides ALL = new LegacyOverrides . Builder ()
2623 .withEvaluateMapKeys (true )
2724 .withIterateOverMapKeys (true )
2825 .withUsePyishObjectMapper (true )
@@ -33,59 +30,151 @@ public interface LegacyOverrides extends WithLegacyOverrides {
3330 .withUseTrimmingForNotesAndExpressions (true )
3431 .withKeepNullableLoopValues (true )
3532 .build ();
33+ private final boolean evaluateMapKeys ;
34+ private final boolean iterateOverMapKeys ;
35+ private final boolean usePyishObjectMapper ;
36+ private final boolean useSnakeCasePropertyNaming ;
37+ private final boolean useNaturalOperatorPrecedence ;
38+ private final boolean parseWhitespaceControlStrictly ;
39+ private final boolean allowAdjacentTextNodes ;
40+ private final boolean useTrimmingForNotesAndExpressions ;
41+ private final boolean keepNullableLoopValues ;
3642
37- @ Value .Default
38- default boolean isEvaluateMapKeys () {
39- return false ;
43+ private LegacyOverrides (Builder builder ) {
44+ evaluateMapKeys = builder .evaluateMapKeys ;
45+ iterateOverMapKeys = builder .iterateOverMapKeys ;
46+ usePyishObjectMapper = builder .usePyishObjectMapper ;
47+ useSnakeCasePropertyNaming = builder .useSnakeCasePropertyNaming ;
48+ useNaturalOperatorPrecedence = builder .useNaturalOperatorPrecedence ;
49+ parseWhitespaceControlStrictly = builder .parseWhitespaceControlStrictly ;
50+ allowAdjacentTextNodes = builder .allowAdjacentTextNodes ;
51+ useTrimmingForNotesAndExpressions = builder .useTrimmingForNotesAndExpressions ;
52+ keepNullableLoopValues = builder .keepNullableLoopValues ;
4053 }
4154
42- @ Value .Default
43- default boolean isIterateOverMapKeys () {
44- return false ;
55+ public static Builder newBuilder () {
56+ return new Builder ();
4557 }
4658
47- @ Value .Default
48- default boolean isUsePyishObjectMapper () {
49- return false ;
59+ public boolean isEvaluateMapKeys () {
60+ return evaluateMapKeys ;
5061 }
5162
52- @ Value .Default
53- default boolean isUseSnakeCasePropertyNaming () {
54- return false ;
63+ public boolean isIterateOverMapKeys () {
64+ return iterateOverMapKeys ;
5565 }
5666
57- @ Value .Default
58- default boolean isUseNaturalOperatorPrecedence () {
59- return false ;
67+ public boolean isUsePyishObjectMapper () {
68+ return usePyishObjectMapper ;
6069 }
6170
62- @ Value .Default
63- default boolean isParseWhitespaceControlStrictly () {
64- return false ;
71+ public boolean isUseSnakeCasePropertyNaming () {
72+ return useSnakeCasePropertyNaming ;
6573 }
6674
67- @ Value .Default
68- default boolean isAllowAdjacentTextNodes () {
69- return false ;
75+ public boolean isUseNaturalOperatorPrecedence () {
76+ return useNaturalOperatorPrecedence ;
7077 }
7178
72- @ Value .Default
73- default boolean isUseTrimmingForNotesAndExpressions () {
74- return false ;
79+ public boolean isParseWhitespaceControlStrictly () {
80+ return parseWhitespaceControlStrictly ;
7581 }
7682
77- @ Value .Default
78- default boolean isKeepNullableLoopValues () {
79- return false ;
83+ public boolean isAllowAdjacentTextNodes () {
84+ return allowAdjacentTextNodes ;
8085 }
8186
82- class Builder extends ImmutableLegacyOverrides .Builder {}
87+ public boolean isUseTrimmingForNotesAndExpressions () {
88+ return useTrimmingForNotesAndExpressions ;
89+ }
8390
84- static Builder newBuilder () {
85- return builder () ;
91+ public boolean isKeepNullableLoopValues () {
92+ return keepNullableLoopValues ;
8693 }
8794
88- static Builder builder () {
89- return new Builder ();
95+ public static class Builder {
96+
97+ private boolean evaluateMapKeys = false ;
98+ private boolean iterateOverMapKeys = false ;
99+ private boolean usePyishObjectMapper = false ;
100+ private boolean useSnakeCasePropertyNaming = false ;
101+ private boolean useNaturalOperatorPrecedence = false ;
102+ private boolean parseWhitespaceControlStrictly = false ;
103+ private boolean allowAdjacentTextNodes = false ;
104+ private boolean useTrimmingForNotesAndExpressions = false ;
105+ private boolean keepNullableLoopValues = false ;
106+
107+ private Builder () {}
108+
109+ public LegacyOverrides build () {
110+ return new LegacyOverrides (this );
111+ }
112+
113+ public static Builder from (LegacyOverrides legacyOverrides ) {
114+ return new Builder ()
115+ .withEvaluateMapKeys (legacyOverrides .evaluateMapKeys )
116+ .withIterateOverMapKeys (legacyOverrides .iterateOverMapKeys )
117+ .withUsePyishObjectMapper (legacyOverrides .usePyishObjectMapper )
118+ .withUseSnakeCasePropertyNaming (legacyOverrides .useSnakeCasePropertyNaming )
119+ .withUseNaturalOperatorPrecedence (legacyOverrides .useNaturalOperatorPrecedence )
120+ .withParseWhitespaceControlStrictly (
121+ legacyOverrides .parseWhitespaceControlStrictly
122+ )
123+ .withAllowAdjacentTextNodes (legacyOverrides .allowAdjacentTextNodes )
124+ .withUseTrimmingForNotesAndExpressions (
125+ legacyOverrides .useTrimmingForNotesAndExpressions
126+ );
127+ }
128+
129+ public Builder withEvaluateMapKeys (boolean evaluateMapKeys ) {
130+ this .evaluateMapKeys = evaluateMapKeys ;
131+ return this ;
132+ }
133+
134+ public Builder withIterateOverMapKeys (boolean iterateOverMapKeys ) {
135+ this .iterateOverMapKeys = iterateOverMapKeys ;
136+ return this ;
137+ }
138+
139+ public Builder withUsePyishObjectMapper (boolean usePyishObjectMapper ) {
140+ this .usePyishObjectMapper = usePyishObjectMapper ;
141+ return this ;
142+ }
143+
144+ public Builder withUseSnakeCasePropertyNaming (boolean useSnakeCasePropertyNaming ) {
145+ this .useSnakeCasePropertyNaming = useSnakeCasePropertyNaming ;
146+ return this ;
147+ }
148+
149+ public Builder withUseNaturalOperatorPrecedence (
150+ boolean useNaturalOperatorPrecedence
151+ ) {
152+ this .useNaturalOperatorPrecedence = useNaturalOperatorPrecedence ;
153+ return this ;
154+ }
155+
156+ public Builder withParseWhitespaceControlStrictly (
157+ boolean parseWhitespaceControlStrictly
158+ ) {
159+ this .parseWhitespaceControlStrictly = parseWhitespaceControlStrictly ;
160+ return this ;
161+ }
162+
163+ public Builder withAllowAdjacentTextNodes (boolean allowAdjacentTextNodes ) {
164+ this .allowAdjacentTextNodes = allowAdjacentTextNodes ;
165+ return this ;
166+ }
167+
168+ public Builder withUseTrimmingForNotesAndExpressions (
169+ boolean useTrimmingForNotesAndExpressions
170+ ) {
171+ this .useTrimmingForNotesAndExpressions = useTrimmingForNotesAndExpressions ;
172+ return this ;
173+ }
174+
175+ public Builder withKeepNullableLoopValues (boolean keepNullableLoopValues ) {
176+ this .keepNullableLoopValues = keepNullableLoopValues ;
177+ return this ;
178+ }
90179 }
91180}
0 commit comments