You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2018/05/17 12:11:27 UTC
svn commit: r1831770 - in /felix/trunk/gogo/runtime/src:
main/java/org/apache/felix/gogo/runtime/Expander.java
test/java/org/apache/felix/gogo/runtime/ExpanderTest.java
Author: gnodet
Date: Thu May 17 12:11:27 2018
New Revision: 1831770
URL: http://svn.apache.org/viewvc?rev=1831770&view=rev
Log:
[FELIX-5855] Support array subscript in expander
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/ExpanderTest.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=1831770&r1=1831769&r2=1831770&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 Thu May 17 12:11:27 2018
@@ -19,12 +19,14 @@
package org.apache.felix.gogo.runtime;
import java.io.IOException;
+import java.lang.reflect.Array;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
+import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -1480,6 +1482,33 @@ public class Expander extends BaseTokeni
val = list.get(nLeft ? list.size() - 1 - iLeft : iLeft);
}
}
+ else if (val != null && val.getClass().isArray())
+ {
+ if (sLeft.equals("@") || sLeft.equals("*"))
+ {
+ Object array = val;
+ List<Object> l = new AbstractList<Object>()
+ {
+ @Override
+ public Object get(int index)
+ {
+ return Array.get(array, index);
+ }
+ @Override
+ public int size()
+ {
+ return Array.getLength(array);
+ }
+ };
+ val = new ArgList(l);
+ }
+ else
+ {
+ int iLeft = Integer.parseInt(sLeft);
+ Object array = val;
+ val = Array.get(array, iLeft);
+ }
+ }
else if (val != null)
{
if (sLeft.equals("@") || sLeft.equals("*"))
Modified: felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/ExpanderTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/ExpanderTest.java?rev=1831770&r1=1831769&r2=1831770&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/ExpanderTest.java (original)
+++ felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/ExpanderTest.java Thu May 17 12:11:27 2018
@@ -33,6 +33,44 @@ import static org.junit.Assert.assertNot
public class ExpanderTest {
@Test
+ public void testSubscriptOnArrays() throws Exception {
+ Evaluate evaluate = new Evaluate() {
+ @Override
+ public Object eval(Token t) {
+ return null;
+ }
+ @Override
+ public Object get(String key) {
+ switch (key) {
+ case "a":
+ return new Object[] { 1, 3 };
+ case "b":
+ return new int[] { 1, 3 };
+ case "c":
+ return Arrays.asList(1, 3);
+ }
+ return null;
+ }
+ @Override
+ public Object put(String key, Object value) {
+ return null;
+ }
+ @Override
+ public Object expr(Token t) {
+ return null;
+ }
+ @Override
+ public Path currentDir() {
+ return null;
+ }
+ };
+
+ assertEquals(3, Expander.expand("${a[1]}", evaluate));
+ assertEquals(3, Expander.expand("${b[1]}", evaluate));
+ assertEquals(3, Expander.expand("${c[1]}", evaluate));
+ }
+
+ @Test
public void testOctalAndHex() throws Exception {
Evaluate evaluate = new Evaluate() {
@Override