2929
3030package org .scijava .convert ;
3131
32+ import java .lang .reflect .Array ;
33+ import java .lang .reflect .Type ;
34+
3235import org .scijava .Priority ;
3336import org .scijava .parse .Items ;
3437import org .scijava .parse .ParseService ;
35- import org .scijava .parsington .ExpressionParser ;
36- import org .scijava .parsington .SyntaxTree ;
3738import org .scijava .plugin .Parameter ;
3839import org .scijava .plugin .Plugin ;
3940import org .scijava .util .Types ;
4041
41- import java .lang .reflect .Array ;
42- import java .lang .reflect .Type ;
43-
4442/**
4543 * A {@link Converter} that specializes in converting {@link String}s to
4644 * n-dimensional arrays. This {@link Converter} can convert any array whose
@@ -58,8 +56,6 @@ public class StringToArrayConverter extends AbstractConverter<String, Object> {
5856 @ Parameter (required = false )
5957 private ParseService parseService ;
6058
61- private final ExpressionParser parser = new ExpressionParser ();
62-
6359 @ Override
6460 public boolean canConvert (final Class <?> src , final Class <?> dest ) {
6561 if (src == null ) return false ;
@@ -80,22 +76,22 @@ public boolean canConvert(final Object src, final Class<?> dest) {
8076 // First, ensure the base types conform
8177 if (!canConvert (src .getClass (), dest )) return false ;
8278 // Then, ensure we can parse the string
83- SyntaxTree tree ;
79+ Items tree ;
8480 try {
85- tree = parser . parseTree ((String ) src );
81+ tree = parseService . parse ((String ) src );
8682 }
87- catch (IllegalArgumentException e ) {
83+ catch (final IllegalArgumentException e ) {
8884 return false ;
8985 }
9086 // We can always convert empty arrays as we don't have to create Objects
91- if (tree .count () == 0 ) return true ;
87+ if (tree .size () == 0 ) return true ;
9288 // Finally, ensure that we can convert the elements of the array.
9389 // NB this check is merely a heuristic. In the case of a heterogeneous
9490 // array, canConvert may falsely return positive, if later elements in the
9591 // string-ified array cannot be converted into Objects. We make this
9692 // compromise in the interest of speed, however, as ensuring correctness
9793 // would require a premature conversion of the entire array.
98- Object testSrc = firstElement ( tree );
94+ Object testSrc = tree . get ( 0 ). value ( );
9995 Class <?> testDest = unitComponentType (dest );
10096 return convertService .supports (testSrc , testDest );
10197 }
@@ -111,7 +107,7 @@ public Object convert(Object src, Type dest) {
111107 parseService .parse ((String ) src ), //
112108 Types .raw (componentType ));
113109 }
114- catch (IllegalArgumentException e ) {
110+ catch (final IllegalArgumentException e ) {
115111 return null ;
116112 }
117113 }
@@ -161,20 +157,6 @@ private Object convertToArray(Items tree, final Class<?> componentType) {
161157 */
162158 private Class <?> unitComponentType (Class <?> c ) {
163159 if (!c .isArray ()) return c ;
164- return unitComponentType ( c .getComponentType () );
160+ return c .getComponentType ();
165161 }
166-
167- /**
168- * Traverses {@code tree} to find the first element
169- *
170- * @param tree the {@link SyntaxTree} containing elements
171- * @return the first {@link Object} in {@code tree}
172- */
173- private Object firstElement (SyntaxTree tree ) {
174- while (tree .count () > 0 ) {
175- tree = tree .child (0 );
176- }
177- return tree .token ();
178- }
179-
180162}
0 commit comments