This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 1debe62f23a29027c9de55c4cdcce4b9b7661dec Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Wed Jul 13 18:10:08 2022 +0300 Some more warnings cleanup --- .../java/org/apache/cayenne/reflect/Converter.java | 4 +- .../apache/cayenne/reflect/ConverterFactory.java | 310 +++++++++------------ .../org/apache/cayenne/reflect/EnumConverter.java | 4 +- .../org/apache/cayenne/reflect/ToAnyConverter.java | 11 +- .../cayenne/access/types/MockExtendedType.java | 4 +- .../server/JNDIDataSourceFactoryIT.java | 1 + .../reflect/LifecycleCallbackEventHandlerTest.java | 2 +- .../apache/cayenne/reflect/PropertyUtilsTest.java | 29 +- .../template/directive/BindDirectiveIT.java | 2 +- .../java/org/apache/cayenne/unit/util/TstBean.java | 4 +- .../apache/cayenne/velocity/ResultDirective.java | 5 +- .../apache/cayenne/modeler/ProjectTreeView.java | 4 +- .../modeler/action/ImportEOModelAction.java | 3 +- 13 files changed, 166 insertions(+), 217 deletions(-) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/Converter.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/Converter.java index 567b5d448..687c8b9e1 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/Converter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/Converter.java @@ -24,7 +24,7 @@ package org.apache.cayenne.reflect; * * @since 1.2 */ -public abstract class Converter<T> { +public interface Converter<T> { /** * Converts object to supported class without doing any type checking. @@ -35,5 +35,5 @@ public abstract class Converter<T> { * @return * an object of type @code{type}. If the conversion fails an exception will be thrown. If value is null then the result will be null. */ - protected abstract T convert(Object value, Class<T> type); + T convert(Object value, Class<T> type); } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/ConverterFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/ConverterFactory.java index 248dcd765..03894217a 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/ConverterFactory.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/ConverterFactory.java @@ -36,222 +36,173 @@ public class ConverterFactory { static final ConverterFactory factory = new ConverterFactory(); - private Map<Class<?>, Converter<?>> converters; - private EnumConverter enumConveter = new EnumConverter(); - private Converter<Object> toAnyConverter = new ToAnyConverter<Object>(); - + private final Map<Class<?>, Converter<?>> converters; + private final EnumConverter<?> enumConverter = new EnumConverter<>(); + private final Converter<Object> toAnyConverter = new ToAnyConverter<>(); + + // TODO: this methods uses deprecated Date.parse method that has no direct replacement, + // we need to determine date formats we should support and update code accordingly + @SuppressWarnings("deprecation") private ConverterFactory() { - Converter<String> toStringConverter = new Converter<String>() { + Converter<String> toStringConverter = (object, type) -> object != null ? object.toString() : null; - @Override - protected String convert(Object object, Class<String> type) { - return object != null ? object.toString() : null; + Converter<Boolean> toBooleanConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? Boolean.FALSE : null; } - }; - - Converter<Boolean> toBooleanConverter = new Converter<Boolean>() { - - @Override - protected Boolean convert(Object object, Class<Boolean> type) { - if (object == null) { - return type.isPrimitive() ? Boolean.FALSE : null; - } - if (object instanceof Boolean) { - return (Boolean)object; - } else if (object instanceof Integer || object instanceof Long || object instanceof Short || object instanceof Byte) { - if (((Number)object).longValue() == 0) { - return Boolean.FALSE; - } else if (((Number)object).longValue() == 1) { - return Boolean.TRUE; - } + if (object instanceof Boolean) { + return (Boolean) object; + } else if (object instanceof Integer || object instanceof Long || object instanceof Short || object instanceof Byte) { + if (((Number) object).longValue() == 0) { + return Boolean.FALSE; + } else if (((Number) object).longValue() == 1) { + return Boolean.TRUE; } - - return "true".equalsIgnoreCase(object.toString()) - ? Boolean.TRUE - : Boolean.FALSE; } - }; - - Converter<Long> toLongConverter = new Converter<Long>() { - - @Override - protected Long convert(Object object, Class<Long> type) { - if (object == null) { - return type.isPrimitive() ? Long.valueOf(0) : null; - } - - if (object instanceof Long) { - return (Long)object; - } - return Long.valueOf(object.toString()); - } + return "true".equalsIgnoreCase(object.toString()) + ? Boolean.TRUE + : Boolean.FALSE; }; - - Converter<Integer> toIntConverter = new Converter<Integer>() { - - @Override - protected Integer convert(Object object, Class<Integer> type) { - if (object == null) { - return type.isPrimitive() ? 0 : null; - } - - if (object instanceof Integer) { - return (Integer)object; - } - return Integer.valueOf(object.toString()); + Converter<Long> toLongConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? 0L : null; } - }; - Converter<Byte> toByteConverter = new Converter<Byte>() { + if (object instanceof Long) { + return (Long) object; + } - @Override - protected Byte convert(Object object, Class<Byte> type) { - if (object == null) { - return type.isPrimitive() ? (byte) 0 : null; - } + return Long.valueOf(object.toString()); + }; - if (object instanceof Byte) { - return (Byte)object; - } + Converter<Integer> toIntConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? 0 : null; + } - return Byte.valueOf(object.toString()); + if (object instanceof Integer) { + return (Integer) object; } + + return Integer.valueOf(object.toString()); }; - Converter<Short> toShortConverter = new Converter<Short>() { + Converter<Byte> toByteConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? (byte) 0 : null; + } - @Override - protected Short convert(Object object, Class<Short> type) { - if (object == null) { - return type.isPrimitive() ? (short) 0 : null; - } + if (object instanceof Byte) { + return (Byte) object; + } - if (object instanceof Short) { - return (Short)object; - } + return Byte.valueOf(object.toString()); + }; - return Short.valueOf(object.toString()); + Converter<Short> toShortConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? (short) 0 : null; } - }; - Converter<Character> toCharConverter = new Converter<Character>() { + if (object instanceof Short) { + return (Short) object; + } - @Override - protected Character convert(Object object, Class<Character> type) { - if (object == null) { - return type.isPrimitive() ? (char) 0 : null; - } + return Short.valueOf(object.toString()); + }; - if (object instanceof Character) { - return (Character)object; - } + Converter<Character> toCharConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? (char) 0 : null; + } - String string = object.toString(); - return Character.valueOf(string.length() > 0 ? string.charAt(0) : 0); + if (object instanceof Character) { + return (Character) object; } + + String string = object.toString(); + return string.length() > 0 ? string.charAt(0) : 0; }; - Converter<Double> toDoubleConverter = new Converter<Double>() { + Converter<Double> toDoubleConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? 0.0d : null; + } - @Override - protected Double convert(Object object, Class<Double> type) { - if (object == null) { - return type.isPrimitive() ? 0.0d : null; - } + if (object instanceof Double) { + return (Double) object; + } - if (object instanceof Double) { - return (Double)object; - } + return Double.valueOf(object.toString()); + }; - return Double.valueOf(object.toString()); + Converter<Float> toFloatConverter = (object, type) -> { + if (object == null) { + return type.isPrimitive() ? 0.0f : null; } - }; - Converter<Float> toFloatConverter = new Converter<Float>() { + if (object instanceof Float) { + return (Float) object; + } - @Override - protected Float convert(Object object, Class<Float> type) { - if (object == null) { - return type.isPrimitive() ? 0.0f : null; - } + return Float.valueOf(object.toString()); + }; - if (object instanceof Float) { - return (Float)object; - } + Converter<BigDecimal> toBigDecimalConverter = (object, type) -> { + if (object == null) { + return null; + } - return Float.valueOf(object.toString()); + if (object instanceof BigDecimal) { + return (BigDecimal) object; } + + return new BigDecimal(object.toString()); }; - Converter<BigDecimal> toBigDecimalConverter = new Converter<BigDecimal>() { + Converter<BigInteger> toBigIntegerConverter = (object, type) -> { + if (object == null) { + return null; + } - @Override - protected BigDecimal convert(Object object, Class<BigDecimal> type) { - if (object == null) { - return null; - } + if (object instanceof BigInteger) { + return (BigInteger) object; + } - if (object instanceof BigDecimal) { - return (BigDecimal)object; - } + return new BigInteger(object.toString()); + }; - return new BigDecimal(object.toString()); + Converter<Date> toDateConverter = (value, type) -> { + if (value == null) { + return null; } + if (value instanceof Date) { + return (Date) value; + } + if (value instanceof Number) { + return new Date(((Number) value).longValue()); + } + return new Date(value.toString()); }; - Converter<BigInteger> toBigIntegerConverter = new Converter<BigInteger>() { - - @Override - protected BigInteger convert(Object object, Class<BigInteger> type) { - if (object == null) { - return null; - } - - if (object instanceof BigInteger) { - return (BigInteger)object; - } - - return new BigInteger(object.toString()); + Converter<Timestamp> toTimestampConverter = (value, type) -> { + if (value == null) { + return null; + } + if (value instanceof Timestamp) { + return (Timestamp) value; + } + if (value instanceof Number) { + return new Timestamp(((Number) value).longValue()); } + return new Timestamp(Date.parse(value.toString())); }; - Converter<Date> toDateConverter = new Converter<Date>() { - @Override - protected Date convert(Object value, Class<Date> type) { - if (value == null) { - return null; - } - if (value instanceof Date) { - return (Date) value; - } - if (value instanceof Number){ - return new Date(((Number)value).longValue()); - } - return new Date(value.toString()); - } - }; - - Converter<Timestamp> toTimestampConverter = new Converter<Timestamp>() { - @Override - protected Timestamp convert(Object value, Class<Timestamp> type) { - if (value == null) { - return null; - } - if (value instanceof Timestamp) { - return (Timestamp) value; - } - if (value instanceof Number){ - return new Timestamp(((Number)value).longValue()); - } - return new Timestamp(Date.parse(value.toString())); - } - }; - - // TODO: byte[] converter... + // TODO: byte[] converter... converters = new HashMap<>(); @@ -283,28 +234,27 @@ public class ConverterFactory { _addConverter(BigInteger.class, toBigIntegerConverter); _addConverter(Number.class, toBigDecimalConverter); _addConverter(String.class, toStringConverter); - _addConverter(Date.class, toDateConverter); - _addConverter(Timestamp.class, toTimestampConverter); + _addConverter(Date.class, toDateConverter); + _addConverter(Timestamp.class, toTimestampConverter); } /** * Converters are used by {@link PropertyUtils#setProperty(Object, String, Object)} to coerce * generic Object values into the specific type expected by the named setter. - * - * @param type - * the Class to convert a value to; the destination type - * @param converter - * a converter used to convert the value from Object to T + * + * @param type the Class to convert a value to; the destination type + * @param converter a converter used to convert the value from Object to T * @since 4.0 */ public static <T> void addConverter(Class<? super T> type, Converter<T> converter) { - factory._addConverter(type, converter); + factory._addConverter(type, converter); } - + private <T> void _addConverter(Class<? super T> type, Converter<T> converter) { - converters.put(type, converter); + converters.put(type, converter); } - + + @SuppressWarnings("unchecked") <T> Converter<T> getConverter(Class<T> type) { if (type == null) { throw new IllegalArgumentException("Null type"); @@ -312,10 +262,10 @@ public class ConverterFactory { // check for enum BEFORE super call, as it will return a noop converter if (type.isEnum()) { - return enumConveter; + return (Converter<T>) enumConverter; } Converter<T> c = (Converter<T>) converters.get(type); - return c != null ? c : (Converter<T>)toAnyConverter; + return c != null ? c : (Converter<T>) toAnyConverter; } } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/EnumConverter.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/EnumConverter.java index 1c7536090..ebb419451 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/EnumConverter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/EnumConverter.java @@ -26,11 +26,11 @@ import org.apache.cayenne.util.Util; /** * @since 1.2 */ -class EnumConverter<T extends Enum & ExtendedEnumeration> extends Converter<T> { +class EnumConverter<T extends Enum<T> & ExtendedEnumeration> implements Converter<T> { @Override @SuppressWarnings("unchecked") - protected T convert(Object object, Class<T> type) { + public T convert(Object object, Class<T> type) { if (ExtendedEnumeration.class.isAssignableFrom(type)) { ExtendedEnumeration[] values; diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/ToAnyConverter.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/ToAnyConverter.java index b69a765ba..257e0d9d4 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/ToAnyConverter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/ToAnyConverter.java @@ -26,9 +26,10 @@ import org.apache.cayenne.CayenneRuntimeException; * Can convert to any class that has a constructor that takes a * single Object or a single String parameter. */ -public class ToAnyConverter<T> extends Converter<T> { - @Override - protected T convert(Object value, Class<T> type) { +public class ToAnyConverter<T> implements Converter<T> { + @SuppressWarnings("unchecked") + @Override + public T convert(Object value, Class<T> type) { if (value == null) { return null; } @@ -37,14 +38,14 @@ public class ToAnyConverter<T> extends Converter<T> { } try { - Constructor<?> constructor; + Constructor<T> constructor; try { constructor = type.getConstructor(Object.class); } catch (NoSuchMethodException e) { constructor = type.getConstructor(String.class); value = value.toString(); } - return (T) constructor.newInstance(value); + return constructor.newInstance(value); } catch (Exception e) { throw new CayenneRuntimeException(e); } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java index 4fe6f30cb..3152ac104 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java @@ -51,13 +51,13 @@ public class MockExtendedType implements ExtendedType<Object> { @Override public Object materializeObject(ResultSet rs, int index, int type) throws Exception { - return objectClass.newInstance(); + return objectClass.getDeclaredConstructor().newInstance(); } @Override public Object materializeObject(CallableStatement rs, int index, int type) throws Exception { - return objectClass.newInstance(); + return objectClass.getDeclaredConstructor().newInstance(); } @Override diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/JNDIDataSourceFactoryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/JNDIDataSourceFactoryIT.java index 7642926c2..fb03f1634 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/JNDIDataSourceFactoryIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/JNDIDataSourceFactoryIT.java @@ -34,6 +34,7 @@ import javax.naming.NameNotFoundException; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; +@Deprecated @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class JNDIDataSourceFactoryIT extends ServerCase { diff --git a/cayenne-server/src/test/java/org/apache/cayenne/reflect/LifecycleCallbackEventHandlerTest.java b/cayenne-server/src/test/java/org/apache/cayenne/reflect/LifecycleCallbackEventHandlerTest.java index ed0f25e92..39ff19c83 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/reflect/LifecycleCallbackEventHandlerTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/reflect/LifecycleCallbackEventHandlerTest.java @@ -158,7 +158,7 @@ public class LifecycleCallbackEventHandlerTest { protected List callbackTimes = new ArrayList(); void callback(Object entity) { - callbackTimes.add(new Long(System.currentTimeMillis())); + callbackTimes.add(System.currentTimeMillis()); try { Thread.sleep(100); } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/reflect/PropertyUtilsTest.java b/cayenne-server/src/test/java/org/apache/cayenne/reflect/PropertyUtilsTest.java index 75ee53f87..51a58683a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/reflect/PropertyUtilsTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/reflect/PropertyUtilsTest.java @@ -281,24 +281,21 @@ public class PropertyUtilsTest { Converter<Date> oldConverter = ConverterFactory.factory.getConverter(Date.class); try { - ConverterFactory.addConverter(Date.class, new Converter<>() { - @Override - protected Date convert(Object value, Class<Date> type) { - if (value == null) - return null; - if (value instanceof Date) { - return (Date) value; - } - if (value instanceof String) { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - try { - return format.parse((String) value); - } catch (ParseException e) { - throw new CayenneRuntimeException("Unable to convert '" + value + "' to a Date", e); - } + ConverterFactory.addConverter(Date.class, (value, type) -> { + if (value == null) + return null; + if (value instanceof Date) { + return (Date) value; + } + if (value instanceof String) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + try { + return format.parse((String) value); + } catch (ParseException e) { + throw new CayenneRuntimeException("Unable to convert '" + value + "' to a Date", e); } - throw new CayenneRuntimeException("Unable to convert '" + value + "' to a Date"); } + throw new CayenneRuntimeException("Unable to convert '" + value + "' to a Date"); }); TstJavaBean o1 = new TstJavaBean(); diff --git a/cayenne-server/src/test/java/org/apache/cayenne/template/directive/BindDirectiveIT.java b/cayenne-server/src/test/java/org/apache/cayenne/template/directive/BindDirectiveIT.java index 9e618a035..6d9ef6452 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/template/directive/BindDirectiveIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/template/directive/BindDirectiveIT.java @@ -137,7 +137,7 @@ public class BindDirectiveIT extends ServerCase { // insert 3 artists for (int i = 1; i < 4; i++) { - tArtist.insert(new Long(i), "Artist" + i); + tArtist.insert((long) i, "Artist" + i); } // now select only with names: Artist1 and Artist3 diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/util/TstBean.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/util/TstBean.java index 2bb9615e0..da4d07687 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/unit/util/TstBean.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/util/TstBean.java @@ -56,11 +56,11 @@ public class TstBean { public TstBean(String string, int intValue) { this.string = string; - this.integer = new Integer(intValue); + this.integer = intValue; } public TstBean(int intValue) { - integer = new Integer(intValue); + integer = intValue; } public Integer getInteger() { diff --git a/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java b/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java index 8d80f347b..676459b29 100644 --- a/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java +++ b/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java @@ -192,8 +192,9 @@ public class ResultDirective extends Directive { */ protected void bindResult(InternalContextAdapter context, ColumnDescriptor columnDescriptor) { - Collection<Object> resultColumns = (Collection<Object>) context.getInternalUserContext().get( - VelocitySQLTemplateProcessor.RESULT_COLUMNS_LIST_KEY); + @SuppressWarnings("unchecked") + Collection<Object> resultColumns = (Collection<Object>) context + .getInternalUserContext().get(VelocitySQLTemplateProcessor.RESULT_COLUMNS_LIST_KEY); if (resultColumns != null) { resultColumns.add(columnDescriptor); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java index 00d3fdd05..d17490a98 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeView.java @@ -976,7 +976,7 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener, return list.toArray(); } - private void positionNode(Object[] path, Comparator comparator) { + private void positionNode(Object[] path, Comparator<ConfigurationNode> comparator) { if (path == null) { return; } @@ -992,7 +992,7 @@ public class ProjectTreeView extends JTree implements DomainDisplayListener, private void positionNode( MutableTreeNode parent, DefaultMutableTreeNode treeNode, - Comparator comparator) { + Comparator<ConfigurationNode> comparator) { removeTreeSelectionListener(treeSelectionListener); try { diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java index 67c04f110..1df3949a0 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java @@ -142,8 +142,7 @@ public class ImportEOModelAction extends CayenneAction { Map connection = (Map) eomodelIndex.get("connectionDictionary"); if (adapter != null && connection != null) { - CreateNodeAction nodeBuilder = (CreateNodeAction) getApplication().getActionManager().getAction( - CreateNodeAction.class); + CreateNodeAction nodeBuilder = getApplication().getActionManager().getAction(CreateNodeAction.class); // this should make created node current, resulting in the new map being added // to the node automatically once it is loaded