From a34b7e75c6b2bf37b269b859f80aec8f892d34c3 Mon Sep 17 00:00:00 2001 From: George Kankava Date: Wed, 20 Apr 2016 19:57:41 +0400 Subject: [PATCH 1/2] Multiple code improvements - squid:S1192, squid:UselessParenthesesCheck, squid:S1213 --- .../github/tminglei/bind/FrameworkUtils.java | 14 +++--- .../com/github/tminglei/bind/Mappings.java | 47 ++++++++++--------- .../com/github/tminglei/bind/Processors.java | 18 +++---- .../github/tminglei/bind/PropertyUtils.java | 21 +++++---- 4 files changed, 54 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/github/tminglei/bind/FrameworkUtils.java b/src/main/java/com/github/tminglei/bind/FrameworkUtils.java index 2baa024..8c61e1a 100644 --- a/src/main/java/com/github/tminglei/bind/FrameworkUtils.java +++ b/src/main/java/com/github/tminglei/bind/FrameworkUtils.java @@ -28,6 +28,10 @@ public class FrameworkUtils { public static final Constraint PASS_VALIDATE = (name, data, messages, options) -> Collections.EMPTY_LIST; + + private static final Pattern OBJ_ELEMENT_NAME = Pattern.compile("^(.*)\\.([^\\.]+)$"); + private static final Pattern ARR_ELEMENT_NAME = Pattern.compile("^(.*)\\[([\\d]+)\\]$"); + public static List unmodifiableList(List list) { return list == null ? Collections.EMPTY_LIST : Collections.unmodifiableList(list); } @@ -75,8 +79,6 @@ public static boolean isEmptyInput(String name, Map data, InputM } } - static final Pattern OBJ_ELEMENT_NAME = Pattern.compile("^(.*)\\.([^\\.]+)$"); - static final Pattern ARR_ELEMENT_NAME = Pattern.compile("^(.*)\\[([\\d]+)\\]$"); // return (parent, name, isArray:false) or (name, index, isArray:true) static String[] splitName(String name) { logger.trace("splitting name for {}", name); @@ -267,7 +269,7 @@ public static String getLabel(String fullName, Messages messages, Options option // make a Constraint which will try to check and collect errors public static Constraint checking(Function check, String messageOrKey, boolean isKey, String... extraMessageArgs) { - return mkSimpleConstraint(((label, vString, messages) -> { + return mkSimpleConstraint((label, vString, messages) -> { logger.debug("checking for {}", vString); if (isEmptyStr(vString)) return null; @@ -281,12 +283,12 @@ public static String getLabel(String fullName, Messages messages, Options option return String.format(msgTemplate, messageArgs.toArray()); } } - }), null); + }, null); } // make a compound Constraint, which checks whether any inputting constraints passed public static Constraint anyPassed(Constraint... constraints) { - return ((name, data, messages, options) -> { + return (name, data, messages, options) -> { logger.debug("checking any passed for {}", name); List> errErrors = new ArrayList<>(); @@ -303,7 +305,7 @@ public static Constraint anyPassed(Constraint... constraints) { .collect(Collectors.joining(", ", "[", "]")); return Arrays.asList(entry(name, String.format(messages.get("error.anypassed"), label, errStr))); - }); + }; } // Computes the available indexes for the given key in this set of data. diff --git a/src/main/java/com/github/tminglei/bind/Mappings.java b/src/main/java/com/github/tminglei/bind/Mappings.java index 54c5d0c..e9c945f 100644 --- a/src/main/java/com/github/tminglei/bind/Mappings.java +++ b/src/main/java/com/github/tminglei/bind/Mappings.java @@ -21,6 +21,9 @@ */ public class Mappings { private static final Logger logger = LoggerFactory.getLogger(Mappings.class); + public static final String D_$ = "^[\\d]+$"; + public static final String S_NOT_A_DATE_LONG = "'%s' not a date long"; + public static final String ERROR_PATTERN = "error.pattern"; /////////////////////////////////// pre-defined field mappings //////////////////////// @@ -171,7 +174,7 @@ public static Mapping date(String pattern, Constraint... constraints) InputMode.SINGLE, mkSimpleConverter(s -> { if (isEmptyStr(s)) return null; - else if (s.matches("^[\\d]+$")) { + else if (s.matches(D_$)) { Instant instant = new Date(Long.parseLong(s)).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.of("UTC")).toLocalDate(); } else { @@ -179,8 +182,8 @@ else if (s.matches("^[\\d]+$")) { } }), new MappingMeta(LocalDate.class) ).constraint(anyPassed( - checking(s -> new Date(Long.parseLong(s)), "'%s' not a date long", false), - checking(formatter::parse, "error.pattern", true, pattern) + checking(s -> new Date(Long.parseLong(s)), S_NOT_A_DATE_LONG, false), + checking(formatter::parse, ERROR_PATTERN, true, pattern) )).constraint(constraints); } @@ -198,7 +201,7 @@ public static Mapping datetime(String pattern, Constraint... cons InputMode.SINGLE, mkSimpleConverter(s -> { if (isEmptyStr(s)) return null; - else if (s.matches("^[\\d]+$")) { + else if (s.matches(D_$)) { Instant instant = new Date(Long.parseLong(s)).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.of("UTC")); } else { @@ -206,8 +209,8 @@ else if (s.matches("^[\\d]+$")) { } }), new MappingMeta(LocalDateTime.class) ).constraint(anyPassed( - checking(s -> new Date(Long.parseLong(s)), "'%s' not a date long", false), - checking(formatter::parse, "error.pattern", true, pattern) + checking(s -> new Date(Long.parseLong(s)), S_NOT_A_DATE_LONG, false), + checking(formatter::parse, ERROR_PATTERN, true, pattern) )).constraint(constraints); } @@ -225,7 +228,7 @@ public static Mapping time(String pattern, Constraint... constraints) InputMode.SINGLE, mkSimpleConverter(s -> { if (isEmptyStr(s)) return null; - else if (s.matches("^[\\d]+$")) { + else if (s.matches(D_$)) { Instant instant = new Date(Long.parseLong(s)).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.of("UTC")).toLocalTime(); } else { @@ -233,8 +236,8 @@ else if (s.matches("^[\\d]+$")) { } }), new MappingMeta(LocalTime.class) ).constraint(anyPassed( - checking(s -> new Date(Long.parseLong(s)), "'%s' not a date long", false), - checking(formatter::parse, "error.pattern", true, pattern) + checking(s -> new Date(Long.parseLong(s)), S_NOT_A_DATE_LONG, false), + checking(formatter::parse, ERROR_PATTERN, true, pattern) )).constraint(constraints); } @@ -250,7 +253,7 @@ else if (s.matches("^[\\d]+$")) { public static Mapping ignored(T instead) { return new FieldMapping( InputMode.POLYMORPHIC, - ((name, data) -> instead), + (name, data) -> instead, new MappingMeta(instead.getClass()) ).options(o -> o._ignoreConstraints(true)); } @@ -278,14 +281,14 @@ public static Mapping defaultVal(Mapping base, T defaultVal, Constrain public static Mapping> optional(Mapping base, Constraint... constraints) { return new FieldMapping>( base.options()._inputMode(), - ((name, data) -> { + (name, data) -> { logger.debug("optional - converting {}", name); if (isEmptyInput(name, data, base.options()._inputMode())) { return Optional.empty(); } else return Optional.of(base.convert(name, data)); - }), - ((name, data, messages, options) -> { + }, + (name, data, messages, options) -> { logger.debug("optional - validating {}", name); if (isEmptyInput(name, data, base.options()._inputMode())) { @@ -295,7 +298,7 @@ public static Mapping> optional(Mapping base, Constraint... c .options(o -> o._label(o._label().orElse(options._label().orElse(null)))) .validate(name, data, messages, options); } - }), new MappingMeta(Optional.class, base) + }, new MappingMeta(Optional.class, base) ).options(o -> o._ignoreConstraints(true)) .constraint(constraints); } @@ -310,20 +313,20 @@ public static Mapping> optional(Mapping base, Constraint... c public static Mapping> list(Mapping base, Constraint... constraints) { return new FieldMapping>( InputMode.MULTIPLE, - ((name, data) -> { + (name, data) -> { logger.debug("list - converting {}", name); return indexes(name, data).stream() .map(i -> base.convert(name + "[" + i + "]", data)) .collect(Collectors.toList()); - }), - ((name, data, messages, options) -> { + }, + (name, data, messages, options) -> { logger.debug("list - validating {}", name); return indexes(name, data).stream() .flatMap(i -> base.validate(name + "[" + i + "]", data, messages, options).stream()) .collect(Collectors.toList()); - }), new MappingMeta(List.class, base) + }, new MappingMeta(List.class, base) ).constraint(constraints); } @@ -340,7 +343,7 @@ public static Mapping> map(Mapping vBase, Constraint... co public static Mapping> map(Mapping kBase, Mapping vBase, Constraint... constraints) { return new FieldMapping>( InputMode.MULTIPLE, - ((name, data) -> { + (name, data) -> { logger.debug("map - converting {}", name); return keys(name, data).stream() @@ -356,8 +359,8 @@ public static Mapping> map(Mapping kBase, Mapping vBase, Map.Entry::getKey, Map.Entry::getValue )); - }), - ((name, data, messages, options) -> { + }, + (name, data, messages, options) -> { logger.debug("map - validating {}", name); return keys(name, data).stream() @@ -370,7 +373,7 @@ public static Mapping> map(Mapping kBase, Mapping vBase, ).stream(); }) .collect(Collectors.toList()); - }), new MappingMeta(Map.class, kBase, vBase) + }, new MappingMeta(Map.class, kBase, vBase) ).constraint(constraints); } diff --git a/src/main/java/com/github/tminglei/bind/Processors.java b/src/main/java/com/github/tminglei/bind/Processors.java index 588ae35..8e1198e 100644 --- a/src/main/java/com/github/tminglei/bind/Processors.java +++ b/src/main/java/com/github/tminglei/bind/Processors.java @@ -100,7 +100,7 @@ public static PreProcessor expandJson() { } public static PreProcessor expandJson(String prefix) { return mkPreProcessorWithMeta((prefix1, data, options) -> { - logger.debug("expanding json at '{}'", (prefix == null ? prefix1 : prefix)); + logger.debug("expanding json at '{}'", prefix == null ? prefix1 : prefix); String thePrefix = prefix == null ? prefix1 : prefix; String jsonStr = data.get(thePrefix); @@ -132,7 +132,7 @@ public static PreProcessor expandJsonKeys() { } public static PreProcessor expandJsonKeys(String prefix) { return mkPreProcessorWithMeta((prefix1, data, options) -> { - logger.debug("expanding json keys at '{}'", (prefix == null ? prefix1 : prefix)); + logger.debug("expanding json keys at '{}'", prefix == null ? prefix1 : prefix); Map data1 = expandJson(prefix).apply(prefix1, data, options); Map data2 = expandListKeys(prefix).apply(prefix1, data1, options); @@ -149,7 +149,7 @@ public static PreProcessor expandListKeys() { } public static PreProcessor expandListKeys(String prefix) { return mkPreProcessorWithMeta((prefix1, data, options) -> { - logger.debug("expanding list keys at '{}'", (prefix == null ? prefix1 : prefix)); + logger.debug("expanding list keys at '{}'", prefix == null ? prefix1 : prefix); String thePrefix = prefix == null ? prefix1 : prefix; Pattern p = Pattern.compile("^" + Pattern.quote(thePrefix) + "\\[[\\d]+\\].*"); @@ -228,7 +228,7 @@ public static PreProcessor changePrefix(String from, String to) { */ public static Function>, Map> errsTree() { - return ((errors) -> { + return (errors) -> { logger.debug("converting errors list to errors tree"); Map root = new HashMap<>(); @@ -239,7 +239,7 @@ public static PreProcessor changePrefix(String from, String to) { workObj.add(error.getValue()); } return root; - }); + }; } ///////////////////////////////// pre-defined touched checkers ///////////////////// @@ -250,13 +250,13 @@ public static PreProcessor changePrefix(String from, String to) { * @return new created touched checker */ public static TouchedChecker listTouched(List touched) { - return ((prefix, data) -> { + return (prefix, data) -> { logger.debug("checking touched in list for '{}'", prefix); return touched.stream() .filter(key -> key.startsWith(prefix)) .count() > 0; - }); + }; } /** @@ -266,7 +266,7 @@ public static TouchedChecker listTouched(List touched) { * @return new created touched checker */ public static TouchedChecker prefixTouched(String dataPrefix, String touchedPrefix) { - return ((prefix, data) -> { + return (prefix, data) -> { logger.debug("checking touched with data prefix '{}' and touched prefix '{}' for '{}'", dataPrefix, touchedPrefix, prefix); @@ -274,6 +274,6 @@ public static TouchedChecker prefixTouched(String dataPrefix, String touchedPref return data.keySet().stream() .filter(key -> key.startsWith(prefixToBeChecked)) .count() > 0; - }); + }; } } diff --git a/src/main/java/com/github/tminglei/bind/PropertyUtils.java b/src/main/java/com/github/tminglei/bind/PropertyUtils.java index 50bc4cb..96d5d61 100644 --- a/src/main/java/com/github/tminglei/bind/PropertyUtils.java +++ b/src/main/java/com/github/tminglei/bind/PropertyUtils.java @@ -13,14 +13,19 @@ */ public class PropertyUtils { + public static final String PROPERTY_NAME_IS_NULL = "Property name is NULL!"; + public static final String CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S = "Can't find property '%1$s' in class %2$s"; + private static Map> pdCache = + Collections.synchronizedMap( new WeakHashMap<>() ); + public static Object readProperty( Object bean, String propName ) { Objects.requireNonNull(bean, "Bean object is NULL!"); - Objects.requireNonNull(propName, "Property name is NULL!"); + Objects.requireNonNull(propName, PROPERTY_NAME_IS_NULL); PropertyDescriptor pd = findPropertyDescriptor( bean.getClass(), propName ); if( pd == null) - throw new IllegalArgumentException( String.format("Can't find property '%1$s' in class %2$s", + throw new IllegalArgumentException( String.format(CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S, propName, bean.getClass().getName())); try { @@ -29,7 +34,7 @@ public static Object readProperty( Object bean, String propName ) { if (method == null) throw new UnsupportedOperationException("Property '" + pd.getName() + "' is not readable"); - return (method.invoke(bean, new Object[0])); + return method.invoke(bean, new Object[0]); } catch (Exception e) { throw new RuntimeException( String.format("Exception occurred when reading property '%1$s': %2$s", @@ -39,12 +44,12 @@ public static Object readProperty( Object bean, String propName ) { public static void writeProperty( Object bean, String propName, Object propValue ) { Objects.requireNonNull(bean, "Bean object is NULL!"); - Objects.requireNonNull(propName, "Property name is NULL!"); + Objects.requireNonNull(propName, PROPERTY_NAME_IS_NULL); PropertyDescriptor pd = findPropertyDescriptor( bean.getClass(), propName ); if( pd == null) - throw new IllegalArgumentException( String.format("Can't find property '%1$s' in class %2$s", + throw new IllegalArgumentException( String.format(CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S, propName, bean.getClass().getName())); try { @@ -63,12 +68,12 @@ public static void writeProperty( Object bean, String propName, Object propValue public static Class getPropertyType( Class beanclazz, String propName ) { Objects.requireNonNull(beanclazz, "Bean class is NULL!"); - Objects.requireNonNull(propName, "Property name is NULL!"); + Objects.requireNonNull(propName, PROPERTY_NAME_IS_NULL); PropertyDescriptor pd = findPropertyDescriptor( beanclazz, propName ); if( pd == null) - throw new IllegalArgumentException( String.format("Can't find property '%1$s' in class %2$s", + throw new IllegalArgumentException( String.format(CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S, propName, beanclazz.getName())); return pd.getPropertyType(); @@ -136,8 +141,6 @@ public static Class getReturnType( Class declaringClass, String methodName //---------------------------------------------------- inner support methods --- - static Map> pdCache = - Collections.synchronizedMap( new WeakHashMap<>() ); static Map introspect( Class beanclazz ) { Map pdmap = pdCache.get( beanclazz.getName() ); From c853da72ab6106a1775710c62c544337c910d8bf Mon Sep 17 00:00:00 2001 From: George Kankava Date: Wed, 20 Apr 2016 20:08:47 +0400 Subject: [PATCH 2/2] Multiple code improvements - squid:S1192, squid:UselessParenthesesCheck, squid:S1213 --- src/main/java/com/github/tminglei/bind/Mappings.java | 8 ++++---- src/main/java/com/github/tminglei/bind/PropertyUtils.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/tminglei/bind/Mappings.java b/src/main/java/com/github/tminglei/bind/Mappings.java index e9c945f..2362fb5 100644 --- a/src/main/java/com/github/tminglei/bind/Mappings.java +++ b/src/main/java/com/github/tminglei/bind/Mappings.java @@ -21,7 +21,7 @@ */ public class Mappings { private static final Logger logger = LoggerFactory.getLogger(Mappings.class); - public static final String D_$ = "^[\\d]+$"; + public static final String PATTERN = "^[\\d]+$"; public static final String S_NOT_A_DATE_LONG = "'%s' not a date long"; public static final String ERROR_PATTERN = "error.pattern"; @@ -174,7 +174,7 @@ public static Mapping date(String pattern, Constraint... constraints) InputMode.SINGLE, mkSimpleConverter(s -> { if (isEmptyStr(s)) return null; - else if (s.matches(D_$)) { + else if (s.matches(PATTERN)) { Instant instant = new Date(Long.parseLong(s)).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.of("UTC")).toLocalDate(); } else { @@ -201,7 +201,7 @@ public static Mapping datetime(String pattern, Constraint... cons InputMode.SINGLE, mkSimpleConverter(s -> { if (isEmptyStr(s)) return null; - else if (s.matches(D_$)) { + else if (s.matches(PATTERN)) { Instant instant = new Date(Long.parseLong(s)).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.of("UTC")); } else { @@ -228,7 +228,7 @@ public static Mapping time(String pattern, Constraint... constraints) InputMode.SINGLE, mkSimpleConverter(s -> { if (isEmptyStr(s)) return null; - else if (s.matches(D_$)) { + else if (s.matches(PATTERN)) { Instant instant = new Date(Long.parseLong(s)).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.of("UTC")).toLocalTime(); } else { diff --git a/src/main/java/com/github/tminglei/bind/PropertyUtils.java b/src/main/java/com/github/tminglei/bind/PropertyUtils.java index 96d5d61..04172a2 100644 --- a/src/main/java/com/github/tminglei/bind/PropertyUtils.java +++ b/src/main/java/com/github/tminglei/bind/PropertyUtils.java @@ -14,7 +14,7 @@ public class PropertyUtils { public static final String PROPERTY_NAME_IS_NULL = "Property name is NULL!"; - public static final String CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S = "Can't find property '%1$s' in class %2$s"; + public static final String CANNOT_FIND_PROPERTY_IN_CLASS = "Can't find property '%1$s' in class %2$s"; private static Map> pdCache = Collections.synchronizedMap( new WeakHashMap<>() ); @@ -25,7 +25,7 @@ public static Object readProperty( Object bean, String propName ) { PropertyDescriptor pd = findPropertyDescriptor( bean.getClass(), propName ); if( pd == null) - throw new IllegalArgumentException( String.format(CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S, + throw new IllegalArgumentException( String.format(CANNOT_FIND_PROPERTY_IN_CLASS, propName, bean.getClass().getName())); try { @@ -49,7 +49,7 @@ public static void writeProperty( Object bean, String propName, Object propValue PropertyDescriptor pd = findPropertyDescriptor( bean.getClass(), propName ); if( pd == null) - throw new IllegalArgumentException( String.format(CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S, + throw new IllegalArgumentException( String.format(CANNOT_FIND_PROPERTY_IN_CLASS, propName, bean.getClass().getName())); try { @@ -73,7 +73,7 @@ public static Class getPropertyType( Class beanclazz, String propName ) { PropertyDescriptor pd = findPropertyDescriptor( beanclazz, propName ); if( pd == null) - throw new IllegalArgumentException( String.format(CAN_T_FIND_PROPERTY_1$S_IN_CLASS_2$S, + throw new IllegalArgumentException( String.format(CANNOT_FIND_PROPERTY_IN_CLASS, propName, beanclazz.getName())); return pd.getPropertyType();