From 949b1f834b67022f206252a078388a80d89f451a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kohlschu=CC=88tter?= Date: Tue, 27 Jun 2023 17:02:18 +0200 Subject: [PATCH] Clean up code in src/main/java Infer generic parameters for Map, List, etc. Cease use of deprecated Java API. Suppress "unchecked", "hiding" warnings where appropriate. Add missing serialVersionUID where necessary. Use getRenderSettings()/getParseSettings() instead of deprecated access. Remove unused class members. Remove unused imports. --- src/main/java/liqp/Insertion.java | 2 - src/main/java/liqp/LValue.java | 12 +-- src/main/java/liqp/ParseSettings.java | 1 + src/main/java/liqp/ProtectionSettings.java | 1 + src/main/java/liqp/RenderSettings.java | 3 +- src/main/java/liqp/TemplateContext.java | 8 +- src/main/java/liqp/TemplateParser.java | 1 + src/main/java/liqp/blocks/Block.java | 1 - .../ExceededMaxIterationsException.java | 1 + .../java/liqp/exceptions/LiquidException.java | 1 + .../exceptions/VariableNotExistException.java | 2 +- src/main/java/liqp/filters/Absolute_Url.java | 2 +- src/main/java/liqp/filters/Date.java | 5 +- src/main/java/liqp/filters/Filter.java | 7 -- src/main/java/liqp/filters/Map.java | 10 +- src/main/java/liqp/filters/Modulo.java | 5 +- src/main/java/liqp/filters/Sort.java | 31 +++--- src/main/java/liqp/filters/Sort_Natural.java | 2 +- src/main/java/liqp/filters/Times.java | 2 - src/main/java/liqp/filters/Where.java | 1 - .../date/CustomDateFormatRegistry.java | 11 +- .../liqp/filters/where/JekyllWhereImpl.java | 20 ++-- .../liqp/filters/where/LiquidWhereImpl.java | 12 +-- .../filters/where/PropertyResolverHelper.java | 10 +- src/main/java/liqp/nodes/AndNode.java | 2 - src/main/java/liqp/nodes/BlockNode.java | 2 - src/main/java/liqp/nodes/ContainsNode.java | 10 +- src/main/java/liqp/nodes/EqNode.java | 2 - src/main/java/liqp/nodes/FilterNode.java | 12 +-- src/main/java/liqp/nodes/GtEqNode.java | 8 +- src/main/java/liqp/nodes/GtNode.java | 5 +- src/main/java/liqp/nodes/LookupNode.java | 20 ++-- src/main/java/liqp/nodes/LtEqNode.java | 10 +- src/main/java/liqp/nodes/LtNode.java | 5 +- src/main/java/liqp/parser/Flavor.java | 4 +- src/main/java/liqp/parser/LiquidSupport.java | 22 ++-- src/main/java/liqp/parser/v4/NodeVisitor.java | 101 +++++++++++++++--- src/main/java/liqp/spi/BasicTypesSupport.java | 19 ++-- .../java/liqp/spi/Java8DateTypesSupport.java | 15 +-- src/main/java/liqp/tags/Include.java | 10 +- 40 files changed, 225 insertions(+), 173 deletions(-) diff --git a/src/main/java/liqp/Insertion.java b/src/main/java/liqp/Insertion.java index 0b36845d..9bbc18e3 100644 --- a/src/main/java/liqp/Insertion.java +++ b/src/main/java/liqp/Insertion.java @@ -1,8 +1,6 @@ package liqp; -import java.util.HashMap; import java.util.Locale; -import java.util.Map; import liqp.nodes.LNode; diff --git a/src/main/java/liqp/LValue.java b/src/main/java/liqp/LValue.java index 9442f797..6b425a15 100644 --- a/src/main/java/liqp/LValue.java +++ b/src/main/java/liqp/LValue.java @@ -1,9 +1,9 @@ package liqp; -import static java.math.BigDecimal.ROUND_UNNECESSARY; import static liqp.filters.date.Parser.getZonedDateTimeFromTemporalAccessor; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoField; @@ -219,9 +219,9 @@ public static boolean isTemporal(Object value){ * @param value * @return */ - protected Object[] mapAsArray(Map value) { + protected Object[] mapAsArray(Map value) { List keyValuePairs = new ArrayList<>(); - for (Map.Entry entry : ((Map) value).entrySet()) { + for (Map.Entry entry : value.entrySet()) { keyValuePairs.add(new Object[]{entry.getKey(), entry.getValue()}); } return keyValuePairs.toArray(); @@ -279,7 +279,7 @@ public Number asNumber(Object value) throws NumberFormatException { // mimic ruby's `BigDecimal.to_f` with standard java capabilities // same time provide expected out for java.math.BigDecimal public static String asFormattedNumber(BigDecimal bd) { - return bd.setScale(Math.max(1, bd.stripTrailingZeros().scale()), ROUND_UNNECESSARY).toPlainString(); + return bd.setScale(Math.max(1, bd.stripTrailingZeros().scale()), RoundingMode.UNNECESSARY).toPlainString(); } /** @@ -438,7 +438,7 @@ public boolean isFalsy(Object value, TemplateContext context) { if (this.isArray(value) && this.asArray(value, context).length == 0) return true; - if ((value instanceof Map) && ((Map) value).isEmpty()) + if ((value instanceof Map) && ((Map) value).isEmpty()) return true; return false; @@ -456,8 +456,8 @@ public boolean isMap(Object value) { return value != null && (value instanceof Map); } + @SuppressWarnings("unchecked") public Map asMap(Object value) { - return (Map)value; } } diff --git a/src/main/java/liqp/ParseSettings.java b/src/main/java/liqp/ParseSettings.java index b9b58e1c..d65d1a33 100644 --- a/src/main/java/liqp/ParseSettings.java +++ b/src/main/java/liqp/ParseSettings.java @@ -10,6 +10,7 @@ import liqp.filters.Filters; import liqp.parser.Flavor; +@SuppressWarnings("hiding") public class ParseSettings { public static final Flavor DEFAULT_FLAVOR = Flavor.LIQUID; public static final ParseSettings DEFAULT = DEFAULT_FLAVOR.defaultParseSettings(); diff --git a/src/main/java/liqp/ProtectionSettings.java b/src/main/java/liqp/ProtectionSettings.java index 9582bbce..7174e3c9 100644 --- a/src/main/java/liqp/ProtectionSettings.java +++ b/src/main/java/liqp/ProtectionSettings.java @@ -2,6 +2,7 @@ import liqp.exceptions.ExceededMaxIterationsException; +@SuppressWarnings("hiding") public class ProtectionSettings { public static final ProtectionSettings DEFAULT = new ProtectionSettings.Builder().build(); diff --git a/src/main/java/liqp/RenderSettings.java b/src/main/java/liqp/RenderSettings.java index d6cde1e5..1d41bf11 100644 --- a/src/main/java/liqp/RenderSettings.java +++ b/src/main/java/liqp/RenderSettings.java @@ -10,6 +10,7 @@ import liqp.parser.LiquidSupport; +@SuppressWarnings("hiding") public class RenderSettings { public static final Locale DEFAULT_LOCALE = Locale.ENGLISH; @@ -102,7 +103,7 @@ public Builder withLocale(Locale locale){ * that does not have own timezone information. * May be null, so the timezone pattern will be omitted in formatted strings. * @param defaultTimeZone - value or null - * @return + * @return This builder. */ public Builder withDefaultTimeZone(ZoneId defaultTimeZone) { this.defaultTimeZone = defaultTimeZone; diff --git a/src/main/java/liqp/TemplateContext.java b/src/main/java/liqp/TemplateContext.java index d3d699ce..ad67ff4d 100644 --- a/src/main/java/liqp/TemplateContext.java +++ b/src/main/java/liqp/TemplateContext.java @@ -8,10 +8,10 @@ import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; + import liqp.RenderTransformer.ObjectAppender; -import liqp.parser.LiquidSupport; import liqp.filters.Filters; -import liqp.parser.Flavor; +import liqp.parser.LiquidSupport; public class TemplateContext { @@ -180,9 +180,7 @@ public Map getEnvironmentMap() { return environmentMap; } - /** - * The registry is - */ + @SuppressWarnings("unchecked") public > T getRegistry(String registryName) { if (parent != null) { return parent.getRegistry(registryName); diff --git a/src/main/java/liqp/TemplateParser.java b/src/main/java/liqp/TemplateParser.java index b0516ca7..c1c4ab28 100644 --- a/src/main/java/liqp/TemplateParser.java +++ b/src/main/java/liqp/TemplateParser.java @@ -76,6 +76,7 @@ public Builder withProtectionSettings(ProtectionSettings s) { return this; } + @SuppressWarnings("hiding") public Builder withErrorMode(ErrorMode errorMode) { this.errorMode = errorMode; return this; diff --git a/src/main/java/liqp/blocks/Block.java b/src/main/java/liqp/blocks/Block.java index 31dbf628..29ec6b0a 100644 --- a/src/main/java/liqp/blocks/Block.java +++ b/src/main/java/liqp/blocks/Block.java @@ -1,7 +1,6 @@ package liqp.blocks; import liqp.Insertion; -import liqp.ParseSettings; public abstract class Block extends Insertion { /** diff --git a/src/main/java/liqp/exceptions/ExceededMaxIterationsException.java b/src/main/java/liqp/exceptions/ExceededMaxIterationsException.java index fc09378f..6fad2692 100644 --- a/src/main/java/liqp/exceptions/ExceededMaxIterationsException.java +++ b/src/main/java/liqp/exceptions/ExceededMaxIterationsException.java @@ -1,6 +1,7 @@ package liqp.exceptions; public class ExceededMaxIterationsException extends RuntimeException { + private static final long serialVersionUID = -2177965025182952056L; public ExceededMaxIterationsException(int maxIterations) { super("exceeded maxIterations: " + maxIterations); diff --git a/src/main/java/liqp/exceptions/LiquidException.java b/src/main/java/liqp/exceptions/LiquidException.java index b9a0e8aa..bbcf729b 100644 --- a/src/main/java/liqp/exceptions/LiquidException.java +++ b/src/main/java/liqp/exceptions/LiquidException.java @@ -7,6 +7,7 @@ import java.util.List; public class LiquidException extends RuntimeException { + private static final long serialVersionUID = -7720091243157735323L; public final int line; public final int charPositionInLine; diff --git a/src/main/java/liqp/exceptions/VariableNotExistException.java b/src/main/java/liqp/exceptions/VariableNotExistException.java index fe464664..177227cd 100644 --- a/src/main/java/liqp/exceptions/VariableNotExistException.java +++ b/src/main/java/liqp/exceptions/VariableNotExistException.java @@ -1,7 +1,7 @@ package liqp.exceptions; - public class VariableNotExistException extends RuntimeException { + private static final long serialVersionUID = -2726673309959828365L; private final String variableName; public VariableNotExistException(String variableName) { diff --git a/src/main/java/liqp/filters/Absolute_Url.java b/src/main/java/liqp/filters/Absolute_Url.java index 111ebafc..e8447cbe 100644 --- a/src/main/java/liqp/filters/Absolute_Url.java +++ b/src/main/java/liqp/filters/Absolute_Url.java @@ -66,7 +66,7 @@ public Object apply(Object value, TemplateContext context, Object... params) { } } - public static String convertUnicodeURLToAscii(String url) throws URISyntaxException { + public static String convertUnicodeURLToAscii(@SuppressWarnings("hiding") String url) throws URISyntaxException { if(url != null) { url = url.trim(); URI uri = new URI(url); diff --git a/src/main/java/liqp/filters/Date.java b/src/main/java/liqp/filters/Date.java index 650365c5..bd9eca03 100644 --- a/src/main/java/liqp/filters/Date.java +++ b/src/main/java/liqp/filters/Date.java @@ -8,7 +8,6 @@ import ua.co.k.strftime.StrftimeFormatter; import java.time.Instant; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Locale; @@ -22,7 +21,7 @@ protected Date() { super(); } - protected Date(CustomDateFormatSupport typeSupport) { + protected Date(CustomDateFormatSupport typeSupport) { super(); CustomDateFormatRegistry.add(typeSupport); } @@ -89,7 +88,7 @@ public static void removeDatePattern(String pattern) { datePatterns.remove(pattern); } - public static Filter withCustomDateType(CustomDateFormatSupport typeSupport) { + public static Filter withCustomDateType(CustomDateFormatSupport typeSupport) { return new Date(typeSupport); } } diff --git a/src/main/java/liqp/filters/Filter.java b/src/main/java/liqp/filters/Filter.java index e97ed1bb..532106c3 100644 --- a/src/main/java/liqp/filters/Filter.java +++ b/src/main/java/liqp/filters/Filter.java @@ -1,17 +1,10 @@ package liqp.filters; -import static liqp.ParseSettings.DEFAULT_FLAVOR; - import java.util.Arrays; -import java.util.HashMap; import java.util.Locale; -import java.util.Map; import liqp.LValue; -import liqp.ParseSettings; import liqp.TemplateContext; -import liqp.TemplateParser; -import liqp.parser.Flavor; /** * Output markup takes filters. Filters are simple methods. The first parameter is always the output of diff --git a/src/main/java/liqp/filters/Map.java b/src/main/java/liqp/filters/Map.java index eafe48d8..c9dc5d66 100644 --- a/src/main/java/liqp/filters/Map.java +++ b/src/main/java/liqp/filters/Map.java @@ -1,12 +1,12 @@ package liqp.filters; +import java.util.ArrayList; +import java.util.List; + import liqp.TemplateContext; import liqp.parser.Inspectable; import liqp.parser.LiquidSupport; -import java.util.ArrayList; -import java.util.List; - public class Map extends Filter { /* @@ -29,12 +29,12 @@ public Object apply(Object value, TemplateContext context, Object... params) { for (Object obj : array) { - java.util.Map map; + java.util.Map map; if (value instanceof Inspectable) { LiquidSupport evaluated = context.evaluate(value); map = evaluated.toLiquid(); } else { - map = (java.util.Map) obj; + map = (java.util.Map) obj; } Object val = map.get(key); diff --git a/src/main/java/liqp/filters/Modulo.java b/src/main/java/liqp/filters/Modulo.java index 81060cad..01ae5f43 100644 --- a/src/main/java/liqp/filters/Modulo.java +++ b/src/main/java/liqp/filters/Modulo.java @@ -1,10 +1,9 @@ package liqp.filters; -import liqp.Template; -import liqp.TemplateContext; - import java.math.BigDecimal; +import liqp.TemplateContext; + public class Modulo extends Filter { /* diff --git a/src/main/java/liqp/filters/Sort.java b/src/main/java/liqp/filters/Sort.java index 9196be55..d0e7bf0b 100644 --- a/src/main/java/liqp/filters/Sort.java +++ b/src/main/java/liqp/filters/Sort.java @@ -56,7 +56,7 @@ public Object apply(Object value, TemplateContext context, Object... params) { array = super.asArray(value, context); - List list = asComparableList(context, array, property); + List> list = asComparableList(context, array, property); Collections.sort(list); @@ -107,9 +107,10 @@ public String toString() { } } - private List asComparableList(TemplateContext context, Object[] array, String property) { + @SuppressWarnings("unchecked") + private List> asComparableList(TemplateContext context, Object[] array, String property) { - List list = new ArrayList(); + List> list = new ArrayList>(); for (Object obj : array) { @@ -119,29 +120,33 @@ private List asComparableList(TemplateContext context, Object[] arra obj = evaluated.toLiquid(); } if (obj instanceof java.util.Map && property != null) { - list.add(new SortableMap((java.util.Map) obj, property)); + list.add(new SortableMap((java.util.Map>) obj, property)); } else { - list.add((Comparable) obj); + list.add((Comparable) obj); } } return list; } - static class SortableMap extends HashMap implements Comparable { - + static class SortableMap extends HashMap> implements Comparable { + private static final long serialVersionUID = -6480701533195197967L; final String property; - SortableMap(java.util.Map map, String property) { + SortableMap(java.util.Map> map, String property) { super.putAll(map); this.property = property; } @Override - public int compareTo(SortableMap that) { - - Comparable thisValue = this.get(property); - Comparable thatValue = that.get(property); + public int compareTo(Object that) { + Comparable thisValue = this.get(property); + Object thatValue; + if(that instanceof SortableMap) { + thatValue = ((SortableMap)that).get(property); + } else { + thatValue = that; + } if (thisValue == null || thatValue == null) { throw new RuntimeException("Liquid error: comparison of Hash with Hash failed"); @@ -154,7 +159,7 @@ public int compareTo(SortableMap that) { public String toString() { StringBuilder builder = new StringBuilder(); - for (java.util.Map.Entry entry : super.entrySet()) { + for (java.util.Map.Entry entry : super.entrySet()) { builder.append(entry.getKey()).append(entry.getValue()); } diff --git a/src/main/java/liqp/filters/Sort_Natural.java b/src/main/java/liqp/filters/Sort_Natural.java index cbf7a35b..c67b021b 100644 --- a/src/main/java/liqp/filters/Sort_Natural.java +++ b/src/main/java/liqp/filters/Sort_Natural.java @@ -16,7 +16,7 @@ public Object apply(Object value, TemplateContext context, Object... params) { Object[] array = super.asArray(value, context); List list = new ArrayList(Arrays.asList(array)); - Collections.sort(list, new Comparator() { + Collections.sort(list, new Comparator() { @Override public int compare(Object o1, Object o2) { return String.valueOf(o1).compareToIgnoreCase(String.valueOf(o2)); diff --git a/src/main/java/liqp/filters/Times.java b/src/main/java/liqp/filters/Times.java index fcc8236f..054b2941 100644 --- a/src/main/java/liqp/filters/Times.java +++ b/src/main/java/liqp/filters/Times.java @@ -2,8 +2,6 @@ import java.math.BigDecimal; -import static java.math.BigDecimal.ROUND_UNNECESSARY; - public class Times extends Filter { /* diff --git a/src/main/java/liqp/filters/Where.java b/src/main/java/liqp/filters/Where.java index 223a9efd..3cbcb124 100644 --- a/src/main/java/liqp/filters/Where.java +++ b/src/main/java/liqp/filters/Where.java @@ -5,7 +5,6 @@ import liqp.filters.where.LiquidWhereImpl; import liqp.filters.where.PropertyResolverHelper; import liqp.filters.where.WhereImpl; -import liqp.parser.Flavor; /** * There are two different implementations of this filter in ruby. diff --git a/src/main/java/liqp/filters/date/CustomDateFormatRegistry.java b/src/main/java/liqp/filters/date/CustomDateFormatRegistry.java index b7c4da1e..41aeed47 100644 --- a/src/main/java/liqp/filters/date/CustomDateFormatRegistry.java +++ b/src/main/java/liqp/filters/date/CustomDateFormatRegistry.java @@ -13,10 +13,11 @@ public class CustomDateFormatRegistry { // might be better storage for this will be tree, // so the subtypes will be properly handled // and parent type will not override child's one - private static final List supportedTypes = new ArrayList<>(); + private static final List> supportedTypes = new ArrayList<>(); - public static void add(CustomDateFormatSupport supportThis) { - supportedTypes.add(0, supportThis); + @SuppressWarnings("unchecked") + public static void add(CustomDateFormatSupport supportThis) { + supportedTypes.add(0, (CustomDateFormatSupport)supportThis); } @@ -25,7 +26,7 @@ public static boolean isRegistered(CustomDateFormatSupport typeSupport) { } public static boolean isCustomDateType(Object value) { - for (CustomDateFormatSupport el: supportedTypes) { + for (CustomDateFormatSupport el: supportedTypes) { if (el.support(value)) { return true; } @@ -34,7 +35,7 @@ public static boolean isCustomDateType(Object value) { } public static ZonedDateTime getFromCustomType(Object value) { - for (CustomDateFormatSupport el: supportedTypes) { + for (CustomDateFormatSupport el: supportedTypes) { if (el.support(value)) { return el.getValue(value); } diff --git a/src/main/java/liqp/filters/where/JekyllWhereImpl.java b/src/main/java/liqp/filters/where/JekyllWhereImpl.java index 1ffcaa82..59a03c27 100644 --- a/src/main/java/liqp/filters/where/JekyllWhereImpl.java +++ b/src/main/java/liqp/filters/where/JekyllWhereImpl.java @@ -1,13 +1,13 @@ package liqp.filters.where; -import liqp.TemplateContext; -import liqp.nodes.AtomNode; - import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; +import liqp.TemplateContext; +import liqp.nodes.AtomNode; + /** * Created by vasyl.khrystiuk on 10/09/2019. * Based on: @@ -137,25 +137,25 @@ public Object apply(Object input, Object... params) { } if (input instanceof java.util.Map) { - input = ((Map) input).values(); + input = ((Map) input).values(); } if (input.getClass().isArray()) { input = arrayToArrayList((Object[]) input); } - Collection inputColl = (Collection) input; + Collection inputColl = (Collection) input; - List res = new ArrayList(); + List res = new ArrayList<>(); for (Object item : inputColl) { Object itemProperty = itemProperty(item, property); - if (comparePropertyVsTarget(itemProperty, value, context)) { + if (comparePropertyVsTarget(itemProperty, value)) { res.add(item); } } return res.toArray(new Object[res.size()]); } - private boolean comparePropertyVsTarget(Object itemProperty, Object target, TemplateContext context) { + private boolean comparePropertyVsTarget(Object itemProperty, Object target) { if (target == null) { return itemProperty == null; } @@ -181,7 +181,7 @@ private String joinedArray(Object itemProperty) { // version of Array(property).join Object[] objects; if (itemProperty instanceof Map) { - objects = mapAsArray((Map) itemProperty); + objects = mapAsArray((Map) itemProperty); } else { objects = asArray(itemProperty, context); } @@ -194,7 +194,7 @@ private Object itemProperty(Object e, Object property) { if (adapter != null) { return parseSortInput(adapter.getItemProperty(context, e, property)); } - return parseSortInput(((Map) e).get(property)); + return parseSortInput(((Map) e).get(property)); } private Object parseSortInput(Object property) { diff --git a/src/main/java/liqp/filters/where/LiquidWhereImpl.java b/src/main/java/liqp/filters/where/LiquidWhereImpl.java index 1c0c8129..0731d1f8 100644 --- a/src/main/java/liqp/filters/where/LiquidWhereImpl.java +++ b/src/main/java/liqp/filters/where/LiquidWhereImpl.java @@ -1,10 +1,5 @@ package liqp.filters.where; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import liqp.TemplateContext; -import liqp.spi.BasicTypesSupport; - import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; @@ -12,6 +7,11 @@ import java.util.Map; import java.util.Objects; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import liqp.TemplateContext; + /** * Created by vasyl.khrystiuk on 10/09/2019. */ @@ -85,7 +85,7 @@ private boolean objectHasPropertyValue(Object el, Object[] params) { if (resolver != null) { node = resolver.getItemProperty(context, el, rawProperty); } else { - Map map = mapper.convertValue(el, Map.class); + Map map = mapper.convertValue(el, Map.class); if (!map.containsKey(property)) { return false; } diff --git a/src/main/java/liqp/filters/where/PropertyResolverHelper.java b/src/main/java/liqp/filters/where/PropertyResolverHelper.java index ea885064..85666a73 100644 --- a/src/main/java/liqp/filters/where/PropertyResolverHelper.java +++ b/src/main/java/liqp/filters/where/PropertyResolverHelper.java @@ -1,14 +1,14 @@ package liqp.filters.where; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import liqp.LValue; import liqp.TemplateContext; import liqp.parser.Inspectable; import liqp.parser.LiquidSupport; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - public class PropertyResolverHelper { private final List propertyResolverAdapters; @@ -33,7 +33,7 @@ public boolean support(Object target) { INSTANCE.add(new PropertyResolverAdapter() { @Override public Object getItemProperty(TemplateContext context, Object input, Object property) { - return ((Map)input).get(property); + return ((Map)input).get(property); } @Override diff --git a/src/main/java/liqp/nodes/AndNode.java b/src/main/java/liqp/nodes/AndNode.java index 046d7bac..4d965a27 100644 --- a/src/main/java/liqp/nodes/AndNode.java +++ b/src/main/java/liqp/nodes/AndNode.java @@ -3,8 +3,6 @@ import liqp.LValue; import liqp.TemplateContext; -import java.util.Map; - public class AndNode extends LValue implements LNode { private LNode lhs; diff --git a/src/main/java/liqp/nodes/BlockNode.java b/src/main/java/liqp/nodes/BlockNode.java index f9996fc6..e704e614 100644 --- a/src/main/java/liqp/nodes/BlockNode.java +++ b/src/main/java/liqp/nodes/BlockNode.java @@ -16,7 +16,6 @@ public class BlockNode implements LNode { private List children; - private final boolean isRootBlock; public BlockNode() { this(false); @@ -24,7 +23,6 @@ public BlockNode() { public BlockNode(boolean isRootBlock) { this.children = new ArrayList(); - this.isRootBlock = isRootBlock; } public void add(LNode node) { diff --git a/src/main/java/liqp/nodes/ContainsNode.java b/src/main/java/liqp/nodes/ContainsNode.java index e5c1abfe..d77f22e7 100644 --- a/src/main/java/liqp/nodes/ContainsNode.java +++ b/src/main/java/liqp/nodes/ContainsNode.java @@ -1,15 +1,15 @@ package liqp.nodes; -import liqp.LValue; -import liqp.TemplateContext; -import liqp.parser.Inspectable; -import liqp.parser.LiquidSupport; - import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import liqp.LValue; +import liqp.TemplateContext; +import liqp.parser.Inspectable; +import liqp.parser.LiquidSupport; + public class ContainsNode extends LValue implements LNode { private LNode lhs; diff --git a/src/main/java/liqp/nodes/EqNode.java b/src/main/java/liqp/nodes/EqNode.java index 01bf52f8..e4518924 100644 --- a/src/main/java/liqp/nodes/EqNode.java +++ b/src/main/java/liqp/nodes/EqNode.java @@ -3,8 +3,6 @@ import liqp.LValue; import liqp.TemplateContext; -import java.util.Map; - public class EqNode implements LNode { private LNode lhs; diff --git a/src/main/java/liqp/nodes/FilterNode.java b/src/main/java/liqp/nodes/FilterNode.java index dd5231a3..c72abeb3 100644 --- a/src/main/java/liqp/nodes/FilterNode.java +++ b/src/main/java/liqp/nodes/FilterNode.java @@ -1,18 +1,17 @@ package liqp.nodes; -import liqp.TemplateContext; -import liqp.filters.Filter; -import liqp.spi.BasicTypesSupport; -import org.antlr.v4.runtime.ParserRuleContext; - import java.util.ArrayList; import java.util.List; +import org.antlr.v4.runtime.ParserRuleContext; + +import liqp.TemplateContext; +import liqp.filters.Filter; + public class FilterNode implements LNode { private final int line; private final int tokenStartIndex; - private final String text; private final Filter filter; private final List params; @@ -28,7 +27,6 @@ private FilterNode(int line, int tokenStartIndex, String text, Filter filter) { this.line = line; this.tokenStartIndex = tokenStartIndex; - this.text = text; this.filter = filter; this.params = new ArrayList(); } diff --git a/src/main/java/liqp/nodes/GtEqNode.java b/src/main/java/liqp/nodes/GtEqNode.java index 511ce313..3f08c7de 100644 --- a/src/main/java/liqp/nodes/GtEqNode.java +++ b/src/main/java/liqp/nodes/GtEqNode.java @@ -6,19 +6,17 @@ public GtEqNode(LNode lhs, LNode rhs) { super(lhs, rhs); } + @SuppressWarnings("unchecked") @Override Object doCompare(Object a, Object b) { - if (a instanceof Comparable && a.getClass().isInstance(b)) { - return ((Comparable) a).compareTo(b) >= 0; + return ((Comparable) a).compareTo(b) >= 0; } else if (b instanceof Comparable && b.getClass().isInstance(a)) { - return ((Comparable) b).compareTo(a) < 0; + return ((Comparable) b).compareTo(a) < 0; } // different number class so use this convertion return (a instanceof Number) && (b instanceof Number) && super.asNumber(a).doubleValue() >= super.asNumber(b).doubleValue(); } - - } diff --git a/src/main/java/liqp/nodes/GtNode.java b/src/main/java/liqp/nodes/GtNode.java index a7ab448b..0cb8098d 100644 --- a/src/main/java/liqp/nodes/GtNode.java +++ b/src/main/java/liqp/nodes/GtNode.java @@ -6,12 +6,13 @@ public GtNode(LNode lhs, LNode rhs) { super(lhs, rhs); } + @SuppressWarnings("unchecked") @Override Object doCompare(Object a, Object b) { if (a instanceof Comparable && a.getClass().isInstance(b)) { - return ((Comparable) a).compareTo(b) > 0; + return ((Comparable) a).compareTo(b) > 0; } else if (b instanceof Comparable && b.getClass().isInstance(a)) { - return ((Comparable) b).compareTo(a) <= 0; + return ((Comparable) b).compareTo(a) <= 0; } return (a instanceof Number) && (b instanceof Number) && diff --git a/src/main/java/liqp/nodes/LookupNode.java b/src/main/java/liqp/nodes/LookupNode.java index a3a97b12..7182d819 100644 --- a/src/main/java/liqp/nodes/LookupNode.java +++ b/src/main/java/liqp/nodes/LookupNode.java @@ -94,13 +94,13 @@ public Object get(Object value, TemplateContext context) { if(value instanceof Collection) { return ((Collection)value).size(); } - else if(value instanceof java.util.Map || value instanceof Inspectable) { - java.util.Map map; + else if(value instanceof Map || value instanceof Inspectable) { + Map map; if (value instanceof Inspectable) { LiquidSupport evaluated = context.evaluate(value); map = evaluated.toLiquid(); } else { - map = (java.util.Map) value; + map = (Map) value; } return map.containsKey(hash) ? map.get(hash) : map.size(); } @@ -113,8 +113,8 @@ else if(value instanceof CharSequence) { } } else if(hash.equals("first")) { - if(value instanceof java.util.List) { - java.util.List list = (java.util.List)value; + if(value instanceof List) { + List list = (List)value; return list.isEmpty() ? null : list.get(0); } else if(value.getClass().isArray()) { @@ -123,8 +123,8 @@ else if(value.getClass().isArray()) { } } else if(hash.equals("last")) { - if(value instanceof java.util.List) { - java.util.List list = (java.util.List)value; + if(value instanceof List) { + List list = (List)value; return list.isEmpty() ? null : list.get(list.size() - 1); } else if(value.getClass().isArray()) { @@ -133,13 +133,13 @@ else if(value.getClass().isArray()) { } } - if(value instanceof java.util.Map || value instanceof Inspectable) { - java.util.Map map; + if(value instanceof Map || value instanceof Inspectable) { + Map map; if (value instanceof Inspectable) { LiquidSupport evaluated = context.evaluate(value); map = evaluated.toLiquid(); } else { - map = (java.util.Map) value; + map = (Map) value; } return map.get(hash); } diff --git a/src/main/java/liqp/nodes/LtEqNode.java b/src/main/java/liqp/nodes/LtEqNode.java index 0100f876..46f2adb3 100644 --- a/src/main/java/liqp/nodes/LtEqNode.java +++ b/src/main/java/liqp/nodes/LtEqNode.java @@ -1,24 +1,20 @@ package liqp.nodes; public class LtEqNode extends ComparingExpressionNode { - - private LNode lhs; - private LNode rhs; - public LtEqNode(LNode lhs, LNode rhs) { super(lhs, rhs); } + @SuppressWarnings("unchecked") @Override Object doCompare(Object a, Object b) { if (a instanceof Comparable && a.getClass().isInstance(b)) { - return ((Comparable) a).compareTo(b) <= 0; + return ((Comparable) a).compareTo(b) <= 0; } else if (b instanceof Comparable && b.getClass().isInstance(a)) { - return ((Comparable) b).compareTo(a) > 0; + return ((Comparable) b).compareTo(a) > 0; } return (a instanceof Number) && (b instanceof Number) && super.asNumber(a).doubleValue() <= super.asNumber(b).doubleValue(); } - } diff --git a/src/main/java/liqp/nodes/LtNode.java b/src/main/java/liqp/nodes/LtNode.java index 59421b0f..f1d03ebf 100644 --- a/src/main/java/liqp/nodes/LtNode.java +++ b/src/main/java/liqp/nodes/LtNode.java @@ -6,13 +6,14 @@ public LtNode(LNode lhs, LNode rhs) { super(lhs, rhs); } + @SuppressWarnings("unchecked") @Override Object doCompare(Object a, Object b) { if (a instanceof Comparable && a.getClass().isInstance(b)) { - return ((Comparable) a).compareTo(b) < 0; + return ((Comparable) a).compareTo(b) < 0; } else if (b instanceof Comparable && b.getClass().isInstance(a)) { - return ((Comparable) b).compareTo(a) >= 0; + return ((Comparable) b).compareTo(a) >= 0; } return (a instanceof Number) && (b instanceof Number) && super.asNumber(a).doubleValue() < super.asNumber(b).doubleValue(); diff --git a/src/main/java/liqp/parser/Flavor.java b/src/main/java/liqp/parser/Flavor.java index 9998495f..691472df 100644 --- a/src/main/java/liqp/parser/Flavor.java +++ b/src/main/java/liqp/parser/Flavor.java @@ -102,7 +102,7 @@ public TemplateParser defaultParser() { } /** - * Returns the default {@link TemplateParser.ErrorMode} for this Flavor. + * Returns the default {@link liqp.TemplateParser.ErrorMode} for this Flavor. */ public TemplateParser.ErrorMode getErrorMode() { return errorMode; @@ -110,7 +110,7 @@ public TemplateParser.ErrorMode getErrorMode() { /** * Return default behavior for this Flavor whenever expressions must be evaluated in output tag - * @return + * @return if {@code true}. */ public boolean isEvaluateInOutputTag() { return evaluateInOutputTag; diff --git a/src/main/java/liqp/parser/LiquidSupport.java b/src/main/java/liqp/parser/LiquidSupport.java index 1c61ffba..6d091159 100644 --- a/src/main/java/liqp/parser/LiquidSupport.java +++ b/src/main/java/liqp/parser/LiquidSupport.java @@ -1,5 +1,9 @@ package liqp.parser; +import java.io.IOException; +import java.util.List; +import java.util.Map; + import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -7,14 +11,10 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.ser.std.StdSerializer; -import liqp.TemplateContext; + import liqp.spi.BasicTypesSupport; import liqp.spi.SPIHelper; -import java.io.IOException; -import java.util.List; -import java.util.Map; - /** * Special kind of {@link Inspectable} that do not perform * object conversion to Map<String, Object> using jackson mapper, @@ -47,6 +47,7 @@ public interface LiquidSupport extends Inspectable { class LiquidSerializer extends StdSerializer { + private static final long serialVersionUID = -7053942654651060805L; public LiquidSerializer() { this(null); @@ -93,14 +94,14 @@ public Map toLiquid() { return objectToMap(mapper, variable); } - static void visitMap(Map map) { - for (Map.Entry entry: map.entrySet()) { + static void visitMap(Map map) { + for (Map.Entry entry: map.entrySet()) { Object value = BasicTypesSupport.restoreObject(entry.getValue()); visit(value); entry.setValue(value); } } - static void visitList(List list) { + static void visitList(List list) { for (int i = 0; i< list.size(); i++) { Object object = list.get(i); Object value = BasicTypesSupport.restoreObject(object); @@ -109,11 +110,12 @@ static void visitList(List list) { list.set(i, value); } } + @SuppressWarnings("unchecked") static void visit(Object object) { if (object instanceof Map) { - visitMap((Map)object); + visitMap((Map)object); } if (object instanceof List) { - visitList((List)object); + visitList((List)object); } } diff --git a/src/main/java/liqp/parser/v4/NodeVisitor.java b/src/main/java/liqp/parser/v4/NodeVisitor.java index 3a76ecca..2f01dd65 100644 --- a/src/main/java/liqp/parser/v4/NodeVisitor.java +++ b/src/main/java/liqp/parser/v4/NodeVisitor.java @@ -1,24 +1,101 @@ package liqp.parser.v4; +import static liquid.parser.v4.LiquidParser.And; +import static liquid.parser.v4.LiquidParser.Eq; +import static liquid.parser.v4.LiquidParser.Gt; +import static liquid.parser.v4.LiquidParser.GtEq; +import static liquid.parser.v4.LiquidParser.Lt; +import static liquid.parser.v4.LiquidParser.LtEq; +import static liquid.parser.v4.LiquidParser.NEq; +import static liquid.parser.v4.LiquidParser.Or; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import org.antlr.v4.runtime.misc.Interval; +import org.antlr.v4.runtime.tree.TerminalNode; + import liqp.Insertion; import liqp.Insertions; import liqp.LValue; import liqp.ParseSettings; import liqp.exceptions.LiquidException; -import liqp.filters.Filter; import liqp.filters.Filters; -import liqp.nodes.*; -import liqp.parser.Flavor; +import liqp.nodes.AndNode; +import liqp.nodes.AtomNode; +import liqp.nodes.AttributeNode; +import liqp.nodes.BlockNode; +import liqp.nodes.ContainsNode; +import liqp.nodes.EqNode; +import liqp.nodes.FilterNode; +import liqp.nodes.GtEqNode; +import liqp.nodes.GtNode; +import liqp.nodes.InsertionNode; +import liqp.nodes.KeyValueNode; +import liqp.nodes.LNode; +import liqp.nodes.LookupNode; +import liqp.nodes.LtEqNode; +import liqp.nodes.LtNode; +import liqp.nodes.NEqNode; +import liqp.nodes.OrNode; +import liqp.nodes.OutputNode; +import liquid.parser.v4.LiquidParser.AssignmentContext; +import liquid.parser.v4.LiquidParser.AtomContext; +import liquid.parser.v4.LiquidParser.Atom_othersContext; +import liquid.parser.v4.LiquidParser.AttributeContext; +import liquid.parser.v4.LiquidParser.BlockContext; +import liquid.parser.v4.LiquidParser.Capture_tag_IdContext; +import liquid.parser.v4.LiquidParser.Capture_tag_StrContext; +import liquid.parser.v4.LiquidParser.Case_tagContext; +import liquid.parser.v4.LiquidParser.Comment_tagContext; +import liquid.parser.v4.LiquidParser.Continue_tagContext; +import liquid.parser.v4.LiquidParser.Cycle_tagContext; +import liquid.parser.v4.LiquidParser.Elsif_tagContext; +import liquid.parser.v4.LiquidParser.ExprContext; +import liquid.parser.v4.LiquidParser.Expr_containsContext; +import liquid.parser.v4.LiquidParser.Expr_eqContext; +import liquid.parser.v4.LiquidParser.Expr_logicContext; +import liquid.parser.v4.LiquidParser.Expr_relContext; +import liquid.parser.v4.LiquidParser.Expr_termContext; +import liquid.parser.v4.LiquidParser.FilenameContext; +import liquid.parser.v4.LiquidParser.FilterContext; +import liquid.parser.v4.LiquidParser.For_arrayContext; +import liquid.parser.v4.LiquidParser.For_attributeContext; +import liquid.parser.v4.LiquidParser.For_rangeContext; +import liquid.parser.v4.LiquidParser.If_tagContext; +import liquid.parser.v4.LiquidParser.Include_tagContext; +import liquid.parser.v4.LiquidParser.IndexContext; +import liquid.parser.v4.LiquidParser.Jekyll_include_filenameContext; +import liquid.parser.v4.LiquidParser.Jekyll_include_outputContext; +import liquid.parser.v4.LiquidParser.Jekyll_include_paramsContext; +import liquid.parser.v4.LiquidParser.Lookup_IdContext; +import liquid.parser.v4.LiquidParser.Lookup_StrContext; +import liquid.parser.v4.LiquidParser.Lookup_emptyContext; +import liquid.parser.v4.LiquidParser.Lookup_id_indexesContext; +import liquid.parser.v4.LiquidParser.Other_tagContext; +import liquid.parser.v4.LiquidParser.OutputContext; +import liquid.parser.v4.LiquidParser.Param_exprContext; +import liquid.parser.v4.LiquidParser.Param_expr_exprContext; +import liquid.parser.v4.LiquidParser.Param_expr_key_valueContext; +import liquid.parser.v4.LiquidParser.ParseContext; +import liquid.parser.v4.LiquidParser.Raw_tagContext; +import liquid.parser.v4.LiquidParser.Simple_tagContext; +import liquid.parser.v4.LiquidParser.Table_tagContext; +import liquid.parser.v4.LiquidParser.TermContext; +import liquid.parser.v4.LiquidParser.Term_BlankContext; +import liquid.parser.v4.LiquidParser.Term_DoubleNumContext; +import liquid.parser.v4.LiquidParser.Term_EmptyContext; +import liquid.parser.v4.LiquidParser.Term_FalseContext; +import liquid.parser.v4.LiquidParser.Term_LongNumContext; +import liquid.parser.v4.LiquidParser.Term_NilContext; +import liquid.parser.v4.LiquidParser.Term_StrContext; +import liquid.parser.v4.LiquidParser.Term_TrueContext; +import liquid.parser.v4.LiquidParser.Term_exprContext; +import liquid.parser.v4.LiquidParser.Term_lookupContext; +import liquid.parser.v4.LiquidParser.Unless_tagContext; +import liquid.parser.v4.LiquidParser.When_tagContext; import liquid.parser.v4.LiquidParserBaseVisitor; -import org.antlr.v4.runtime.misc.Interval; -import org.antlr.v4.runtime.tree.TerminalNode; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -import static liquid.parser.v4.LiquidParser.*; public class NodeVisitor extends LiquidParserBaseVisitor { diff --git a/src/main/java/liqp/spi/BasicTypesSupport.java b/src/main/java/liqp/spi/BasicTypesSupport.java index 9bff66c4..860a6c22 100644 --- a/src/main/java/liqp/spi/BasicTypesSupport.java +++ b/src/main/java/liqp/spi/BasicTypesSupport.java @@ -1,16 +1,17 @@ package liqp.spi; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.StdSerializer; + import liqp.filters.date.CustomDateFormatRegistry; import liqp.filters.date.CustomDateFormatSupport; -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - public abstract class BasicTypesSupport implements TypesSupport { private static ThreadLocal> local = new ThreadLocal>(){ @@ -26,6 +27,8 @@ protected void registerType(SimpleModule module, final Class clazz) { // so we will preserve the object in case of eager evaluation // and will put it back when needed module.addSerializer(new StdSerializer(clazz) { + private static final long serialVersionUID = -6538120903478739907L; + @Override public void serialize(T value, JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeStartObject(); @@ -36,7 +39,7 @@ public void serialize(T value, JsonGenerator gen, SerializerProvider provider) t }); } - protected void addCustomDateType(CustomDateFormatSupport typeSupport) { + protected void addCustomDateType(CustomDateFormatSupport typeSupport) { if (!CustomDateFormatRegistry.isRegistered(typeSupport)) { CustomDateFormatRegistry.add(typeSupport); } @@ -47,7 +50,7 @@ public static Object restoreObject(Object obj) { return obj; } //noinspection rawtypes - Map mapObj = (Map) obj; + Map mapObj = (Map) obj; if (!Boolean.TRUE.equals(mapObj.get("@supportedTypeMarker"))) { return obj; } @@ -67,8 +70,8 @@ public static String createReference(Object obj) { return key; } - public static TT getByReference(String key) { - return (TT)local.get().remove(key); + public static Object getByReference(String key) { + return local.get().remove(key); } public static void clearReferences(){ diff --git a/src/main/java/liqp/spi/Java8DateTypesSupport.java b/src/main/java/liqp/spi/Java8DateTypesSupport.java index e7b093fb..f73196cd 100644 --- a/src/main/java/liqp/spi/Java8DateTypesSupport.java +++ b/src/main/java/liqp/spi/Java8DateTypesSupport.java @@ -1,20 +1,9 @@ package liqp.spi; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import liqp.TemplateContext; -import liqp.filters.date.CustomDateFormatSupport; - -import java.io.IOException; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; import java.time.temporal.Temporal; -import java.util.Map; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; public class Java8DateTypesSupport extends BasicTypesSupport { @Override diff --git a/src/main/java/liqp/tags/Include.java b/src/main/java/liqp/tags/Include.java index 3b7ec7d6..289e831d 100644 --- a/src/main/java/liqp/tags/Include.java +++ b/src/main/java/liqp/tags/Include.java @@ -1,20 +1,18 @@ package liqp.tags; -import liqp.Template; -import liqp.TemplateContext; -import liqp.nodes.LNode; -import liqp.parser.Flavor; - import java.io.File; import java.util.HashMap; import java.util.Map; +import liqp.Template; +import liqp.TemplateContext; +import liqp.nodes.LNode; + public class Include extends Tag { public static final String INCLUDES_DIRECTORY_KEY = "liqp@includes_directory"; public static String DEFAULT_EXTENSION = ".liquid"; - @SuppressWarnings("deprecation") @Override public Object render(TemplateContext context, LNode... nodes) {