Author: gnodet
Date: Mon Mar 21 16:58:05 2016
New Revision: 1736041

URL: http://svn.apache.org/viewvc?rev=1736041&view=rev
Log:
Support for java array expansion

Modified:
    
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Expander.java
    
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestTokenizer.java

Modified: 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Expander.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Expander.java?rev=1736041&r1=1736040&r2=1736041&view=diff
==============================================================================
--- 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Expander.java
 (original)
+++ 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Expander.java
 Mon Mar 21 16:58:05 2016
@@ -1030,13 +1030,17 @@ public class Expander extends BaseTokeni
             // Map to List conversion
             boolean _flagk = flagk;
             boolean _flagv = flagv;
-            Function<Object, Object> mapToList = v -> v instanceof Map ? 
toList(asMap(v), _flagk, _flagv) : v;
+            Function<Object, Object> toCollection = v -> v instanceof Map
+                    ? toList(asMap(v), _flagk, _flagv)
+                    : v != null && v.getClass().isArray()
+                        ? Arrays.asList((Object[]) v)
+                        : v;
 
             //
             // String transformations
             //
             BiFunction<Function<String, String>, Object, Object> stringApplyer 
= (func, v) -> {
-                v = mapToList.apply(v);
+                v = toCollection.apply(v);
                 if (v instanceof Collection) {
                     return asCollection(v).stream()
                             .map(String::valueOf)
@@ -1139,7 +1143,7 @@ public class Expander extends BaseTokeni
                                 r = "";
                             }
                             String m = op.charAt(0) == '#' ? "^" + p : 
op.charAt(0) == '%' ? p + "$" : p;
-                            val1 = mapToList.apply(val1);
+                            val1 = toCollection.apply(val1);
                             if (val1 instanceof Collection) {
                                 List<String> l = new ArrayList<>();
                                 for (Object o : ((Collection) val1)) {
@@ -1287,7 +1291,7 @@ public class Expander extends BaseTokeni
             // Double quote joining
             boolean joined = false;
             if (inQuote && !computeLength && !flagExpand) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (val instanceof Collection) {
                     String j = flagj != null ? flagj : " ";
                     val = asCollection(val).stream()
@@ -1320,7 +1324,7 @@ public class Expander extends BaseTokeni
 
             // Forced joining
             if (flagj != null || flags != null && !joined) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (val instanceof Collection) {
                     String j = flagj != null ? flagj : " ";
                     val = asCollection(val).stream()
@@ -1332,7 +1336,7 @@ public class Expander extends BaseTokeni
             // Simple word splitting
             if (flags != null) {
                 String _flags = flags;
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (!(val instanceof Collection)) {
                     val = Collections.singletonList(val);
                 }
@@ -1370,7 +1374,7 @@ public class Expander extends BaseTokeni
 
             // Uniqueness
             if (flagu) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (val instanceof Collection) {
                     val = new ArrayList<>(new HashSet<>(asCollection(val)));
                 }
@@ -1378,7 +1382,7 @@ public class Expander extends BaseTokeni
 
             // Ordering
             if (flaga || flagi || flagn || flago || flagO) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (val instanceof Collection) {
                     List<Object> list;
                     if (flagn) {
@@ -1405,7 +1409,7 @@ public class Expander extends BaseTokeni
 
             // Semantic joining
             if (semanticJoin) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (val instanceof Collection) {
                     val = asCollection(val).stream()
                             .map(String::valueOf)
@@ -1421,7 +1425,7 @@ public class Expander extends BaseTokeni
             }
 
             if (asPattern && !inQuote && !flagPattern) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 Stream<Object> stream = val instanceof Collection ? 
asCollection(val).stream() : Stream.of(val);
                 List<String> patterns = stream.map(String::valueOf)
                         .map(s -> quote(s, 2))
@@ -1430,7 +1434,7 @@ public class Expander extends BaseTokeni
             }
 
             if (inQuote) {
-                val = mapToList.apply(val);
+                val = toCollection.apply(val);
                 if (val instanceof Collection) {
                     List<Object> l = new ArrayList<>(asCollection(val));
                     if (flagExpand) {

Modified: 
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestTokenizer.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestTokenizer.java?rev=1736041&r1=1736040&r2=1736041&view=diff
==============================================================================
--- 
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestTokenizer.java
 (original)
+++ 
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestTokenizer.java
 Mon Mar 21 16:58:05 2016
@@ -183,6 +183,14 @@ public class TestTokenizer
     }
 
     @Test
+    public void testJavaArray() throws Exception
+    {
+        vars.put("a", new Object[] { "b", "c"});
+
+        assertEquals(Arrays.asList("B", "C"), expand("${(U)a}"));
+    }
+
+    @Test
     public void testRawVariable() throws Exception
     {
         vars.put("a1", Arrays.asList("a", 1));


Reply via email to