From 987d2d67d56e054adbe5ec56136dddb49f533137 Mon Sep 17 00:00:00 2001
From: Oliver Burn
Date: Mon, 4 Oct 2010 22:33:47 +1100
Subject: [PATCH] Break dependence of deprecated API from Beanutils.
Also fixed Checkstyle errors (oh the shame:-).
---
pom.xml | 8 +
.../tools/checkstyle/api/AutomaticBean.java | 148 ++++--------------
.../checks/coding/MagicNumberCheck.java | 10 +-
src/xdocs/config_coding.xml | 2 +-
src/xdocs/releasenotes.xml | 2 +-
5 files changed, 47 insertions(+), 123 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5261e6696..cc2fe80eb 100755
--- a/pom.xml
+++ b/pom.xml
@@ -357,6 +357,14 @@
org.apache.maven.pluginsmaven-linkcheck-plugin
+
+ org.apache.maven.plugins
+ maven-eclipse-plugin
+
+ true
+ true
+
+
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AutomaticBean.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AutomaticBean.java
index 544f99fbd..075b245b3 100755
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AutomaticBean.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AutomaticBean.java
@@ -27,27 +27,19 @@ import java.util.StringTokenizer;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtilsBean;
+import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.beanutils.PropertyUtilsBean;
-import org.apache.commons.beanutils.converters.AbstractArrayConverter;
-import org.apache.commons.beanutils.converters.BooleanArrayConverter;
+import org.apache.commons.beanutils.converters.ArrayConverter;
import org.apache.commons.beanutils.converters.BooleanConverter;
-import org.apache.commons.beanutils.converters.ByteArrayConverter;
import org.apache.commons.beanutils.converters.ByteConverter;
-import org.apache.commons.beanutils.converters.CharacterArrayConverter;
import org.apache.commons.beanutils.converters.CharacterConverter;
-import org.apache.commons.beanutils.converters.DoubleArrayConverter;
import org.apache.commons.beanutils.converters.DoubleConverter;
-import org.apache.commons.beanutils.converters.FloatArrayConverter;
import org.apache.commons.beanutils.converters.FloatConverter;
-import org.apache.commons.beanutils.converters.IntegerArrayConverter;
import org.apache.commons.beanutils.converters.IntegerConverter;
-import org.apache.commons.beanutils.converters.LongArrayConverter;
import org.apache.commons.beanutils.converters.LongConverter;
-import org.apache.commons.beanutils.converters.ShortArrayConverter;
import org.apache.commons.beanutils.converters.ShortConverter;
-
/**
* A Java Bean that implements the component lifecycle interfaces by
* calling the bean's setters for all configuration attributes.
@@ -71,55 +63,40 @@ public class AutomaticBean
private static BeanUtilsBean createBeanUtilsBean()
{
final ConvertUtilsBean cub = new ConvertUtilsBean();
-
// TODO: is there a smarter way to tell beanutils not to use defaults?
-
- final boolean[] booleanArray = new boolean[0];
- final byte[] byteArray = new byte[0];
- final char[] charArray = new char[0];
- final double[] doubleArray = new double[0];
- final float[] floatArray = new float[0];
- final int[] intArray = new int[0];
- final long[] longArray = new long[0];
- final short[] shortArray = new short[0];
-
-
cub.register(new BooleanConverter(), Boolean.TYPE);
cub.register(new BooleanConverter(), Boolean.class);
- cub.register(
- new BooleanArrayConverter(), booleanArray.getClass());
+ cub.register(new ArrayConverter(
+ boolean[].class, new BooleanConverter()), boolean[].class);
cub.register(new ByteConverter(), Byte.TYPE);
cub.register(new ByteConverter(), Byte.class);
- cub.register(
- new ByteArrayConverter(byteArray), byteArray.getClass());
+ cub.register(new ArrayConverter(byte[].class, new ByteConverter()),
+ byte[].class);
cub.register(new CharacterConverter(), Character.TYPE);
cub.register(new CharacterConverter(), Character.class);
- cub.register(
- new CharacterArrayConverter(), charArray.getClass());
+ cub.register(new ArrayConverter(char[].class, new CharacterConverter()),
+ char[].class);
cub.register(new DoubleConverter(), Double.TYPE);
cub.register(new DoubleConverter(), Double.class);
- cub.register(
- new DoubleArrayConverter(doubleArray), doubleArray.getClass());
+ cub.register(new ArrayConverter(double[].class, new DoubleConverter()),
+ double[].class);
cub.register(new FloatConverter(), Float.TYPE);
cub.register(new FloatConverter(), Float.class);
- cub.register(new FloatArrayConverter(), floatArray.getClass());
+ cub.register(new ArrayConverter(float[].class, new FloatConverter()),
+ float[].class);
cub.register(new IntegerConverter(), Integer.TYPE);
cub.register(new IntegerConverter(), Integer.class);
- cub.register(new IntegerArrayConverter(), intArray.getClass());
+ cub.register(new ArrayConverter(int[].class, new IntegerConverter()),
+ int[].class);
cub.register(new LongConverter(), Long.TYPE);
cub.register(new LongConverter(), Long.class);
- cub.register(new LongArrayConverter(), longArray.getClass());
+ cub.register(new ArrayConverter(long[].class, new LongConverter()),
+ long[].class);
cub.register(new ShortConverter(), Short.TYPE);
cub.register(new ShortConverter(), Short.class);
- cub.register(new ShortArrayConverter(), shortArray.getClass());
- // TODO: investigate:
- // StringArrayConverter doesn't properly convert an array of tokens with
- // elements containing an underscore, "_".
- // Hacked a replacement class :(
- // cub.register(new StringArrayConverter(),
- // String[].class);
- cub.register(new StrArrayConverter(), String[].class);
- cub.register(new IntegerArrayConverter(), Integer[].class);
+ cub.register(new ArrayConverter(short[].class, new ShortConverter()),
+ short[].class);
+ cub.register(new RelaxedStringArrayConverter(), String[].class);
// BigDecimal, BigInteger, Class, Date, String, Time, TimeStamp
// do not use defaults in the default configuration of ConvertUtilsBean
@@ -289,92 +266,31 @@ public class AutomaticBean
}
/**
- *
Standard Converter implementation that converts an incoming
- * String into an array of String. On a conversion failure, returns
- * a specified default value or throws a ConversionException depending
- * on how this instance is constructed.
- *
- * Hacked from
- * http://cvs.apache.org/viewcvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/converters/StringArrayConverter.java
- * because that implementation fails to convert array of tokens with
- * elements containing an underscore, "_" :(
- *
- * @author Rick Giles
+ * A converter that does not care whether the array elements contain String
+ * characters like '*' or '_'. The normal ArrayConverter class has problems
+ * with this characters.
*/
- private static final class StrArrayConverter extends AbstractArrayConverter
+ private static class RelaxedStringArrayConverter implements Converter
{
- /**
Model object for type comparisons.
*/
- private static final String[] MODEL = new String[0];
-
- /** Creates a new StrArrayConverter object. */
- public StrArrayConverter()
- {
- this.defaultValue = null;
- this.useDefault = false;
- }
-
+ /** {@inheritDoc} */
@SuppressWarnings("unchecked")
- @Override
public Object convert(Class aType, Object aValue)
- throws ConversionException
{
- // Deal with a null value
- if (aValue == null) {
- if (useDefault) {
- return (defaultValue);
- }
- throw new ConversionException("No value specified");
+ if (null == aType) {
+ throw new ConversionException("Cannot convert from null.");
}
- // Deal with the no-conversion-needed case
- if (MODEL.getClass() == aValue.getClass()) {
- return (aValue);
- }
-
- // Parse the input value as a String into elements
- // and convert to the appropriate type
- try {
- final List list = parseElements(aValue.toString());
- final String[] results = new String[list.size()];
-
- for (int i = 0; i < results.length; i++) {
- results[i] = (String) list.get(i);
- }
- return (results);
- }
- catch (final Exception e) {
- if (useDefault) {
- return (defaultValue);
- }
- throw new ConversionException(aValue.toString(), e);
- }
- }
-
- @SuppressWarnings("unchecked")
- @Override
- protected List parseElements(final String aValue)
- throws NullPointerException
- {
- // Validate the passed argument
- if (aValue == null) {
- throw new NullPointerException();
- }
-
- // Trim any matching '{' and '}' delimiters
- String str = aValue.trim();
- if (str.startsWith("{") && str.endsWith("}")) {
- str = str.substring(1, str.length() - 1);
- }
-
- final StringTokenizer st = new StringTokenizer(str, ",");
- final List retVal = Lists.newArrayList();
+ // Convert to a String and trim it for the tokenizer.
+ final StringTokenizer st = new StringTokenizer(
+ aValue.toString().trim(), ",");
+ final List result = Lists.newArrayList();
while (st.hasMoreTokens()) {
final String token = st.nextToken();
- retVal.add(token.trim());
+ result.add(token.trim());
}
- return retVal;
+ return result.toArray(new String[result.size()]);
}
}
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java
index 06302cd81..72598efd3 100755
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java
@@ -188,7 +188,7 @@ public class MagicNumberCheck extends Check
if (!ScopeUtils.inCodeBlock(aAST)) {
return false;
}
-
+
// find the method definition AST
DetailAST methodDefAST = aAST.getParent();
while ((null != methodDefAST)
@@ -196,25 +196,25 @@ public class MagicNumberCheck extends Check
{
methodDefAST = methodDefAST.getParent();
}
-
+
if (null == methodDefAST) {
return false;
}
-
+
// Check for 'hashCode' name.
final DetailAST identAST =
methodDefAST.findFirstToken(TokenTypes.IDENT);
if (!"hashCode".equals(identAST.getText())) {
return false;
}
-
+
// Check for no arguments.
final DetailAST paramAST =
methodDefAST.findFirstToken(TokenTypes.PARAMETERS);
if (0 != paramAST.getChildCount()) {
return false;
}
-
+
// we are in a 'public int hashCode()' method! The compiler will ensure
// the method returns an 'int' and is public.
return true;
diff --git a/src/xdocs/config_coding.xml b/src/xdocs/config_coding.xml
index bde227321..e4af3f350 100755
--- a/src/xdocs/config_coding.xml
+++ b/src/xdocs/config_coding.xml
@@ -2577,7 +2577,7 @@ case 3:
Checks there is only one statement per line. The following line
will be flagged as an error:
-
+
x = 1; y = 2; // Two statments on a single line.
diff --git a/src/xdocs/releasenotes.xml b/src/xdocs/releasenotes.xml
index 9a72d67f3..0299bb854 100755
--- a/src/xdocs/releasenotes.xml
+++ b/src/xdocs/releasenotes.xml
@@ -48,7 +48,7 @@
Enhanced MagicNumber
to support the parameter ignoreHashCodeMethod to ignore
magic numbers in hashCode() methods. Thanks to
- Daniel Solano Gómez for patch #3050788.
+ Daniel Solano Gómez for patch #3050788.