3737import org .scijava .plugin .Parameter ;
3838import org .scijava .plugin .Plugin ;
3939import org .scijava .util .ArrayUtils ;
40- import org .scijava .util .Types ;
4140
4241/**
43- * A {@link Converter} that specializes in converting
44- * n-dimensional arrays into {@link String}s. This {@link Converter} can convert any array whose
45- * component types can be converted into {@link String}s. By default, this
42+ * A {@link Converter} that specializes in converting n-dimensional arrays into
43+ * {@link String}s. This {@link Converter} can convert any array whose component
44+ * types can be converted into {@link String}s. By default, this
4645 * {@link Converter} delimits the array elements with commas.
4746 *
4847 * @author Gabriel Selzer
@@ -53,77 +52,77 @@ public class ArrayToStringConverter extends AbstractConverter<Object, String> {
5352 @ Parameter (required = false )
5453 private ConvertService convertService ;
5554
56- @ Override public boolean canConvert (final Class <?> src , final Class <?> dest ) {
57- if (src == null ) return false ;
58- final Class <?> saneSrc = Types .box (src );
59- final Class <?> saneDest = Types .box (dest );
60- return saneSrc .isArray () && saneDest == String .class ;
55+ @ Override
56+ public boolean canConvert (final Class <?> src , final Class <?> dest ) {
57+ return src != null && src .isArray () && dest == String .class ;
6158 }
6259
63- @ Override public boolean canConvert (final Object src , final Class <?> dest ) {
64- if (convertService == null ) return false ;
60+ @ Override
61+ public boolean canConvert (final Object src , final Class <?> dest ) {
62+ if (convertService == null || src == null ) return false ;
6563 if (!canConvert (src .getClass (), dest )) return false ;
6664 if (Array .getLength (src ) == 0 ) return true ;
6765 return convertService .supports (Array .get (src , 0 ), dest );
6866 }
6967
7068 @ Override
71- public Object convert (Object src , Type dest ) {
69+ public Object convert (Object src , final Type dest ) {
7270 // Preprocess the "string-likes"
73- if (src .getClass ().equals (String [].class ) || //
74- src .getClass ().equals (Character [].class ) || //
75- src .getClass ().equals (char [].class )) //
71+ final Class <?> srcClass = src .getClass ();
72+ if (srcClass == String [].class || //
73+ srcClass == Character [].class || //
74+ srcClass == char [].class ) //
7675 {
7776 src = preprocessCharacters (src );
7877 }
7978 // Convert each element to Strings
80- String elementString = ArrayUtils .toCollection (src ).stream () //
79+ final String elementString = ArrayUtils .toCollection (src ).stream () //
8180 .map (object -> convertService .convert (object , String .class )) //
8281 .collect (Collectors .joining (", " ));
8382 return "{" + elementString + "}" ;
8483 }
8584
8685 private String [] preprocessStrings (final Object src ) {
87- int numElements = Array .getLength (src );
88- String [] processed = new String [numElements ];
86+ final int numElements = Array .getLength (src );
87+ final String [] processed = new String [numElements ];
8988 for (int i = 0 ; i < numElements ; i ++) {
9089 processed [i ] = preprocessString (Array .get (src , i ));
9190 }
9291 return processed ;
9392 }
9493
9594 private String preprocessString (final Object o ) {
96- String s ;
97- if (o == null ) {
98- return null ;
99- } else {
100- s = o .toString ();
101- s = s .replace ("\\ " , "\\ \\ " );
102- s = s .replace ("\" " , "\\ \" " );
103- }
95+ if (o == null ) return null ;
96+ String s = o .toString ();
97+ s = s .replace ("\\ " , "\\ \\ " );
98+ s = s .replace ("\" " , "\\ \" " );
10499 return "\" " + s + "\" " ;
105100 }
106101
107102 private String [] preprocessCharacters (Object src ) {
108- String [] processed = new String [Array .getLength (src )];
103+ final String [] processed = new String [Array .getLength (src )];
109104 for (int i = 0 ; i < processed .length ; i ++) {
110- Object value = Array .get (src , i );
105+ final Object value = Array .get (src , i );
111106 processed [i ] = value == null ? null : value .toString ();
112107 }
113108 return preprocessStrings (processed );
114109 }
115110
116- @ SuppressWarnings ("unchecked" ) @ Override
117- public <T > T convert (Object src , Class <T > dest ) {
118- return (T ) convert (src , (Type ) dest );
111+ @ Override
112+ public <T > T convert (final Object src , final Class <T > dest ) {
113+ final Type destType = dest ;
114+ @ SuppressWarnings ("unchecked" )
115+ final T converted = (T ) convert (src , destType );
116+ return converted ;
119117 }
120118
121- @ Override public Class <String > getOutputType () {
119+ @ Override
120+ public Class <String > getOutputType () {
122121 return String .class ;
123122 }
124123
125- @ Override public Class <Object > getInputType () {
124+ @ Override
125+ public Class <Object > getInputType () {
126126 return Object .class ;
127127 }
128-
129128}
0 commit comments