Configure the expander correctly
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1736036 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Expander.java b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Expander.java
new file mode 100644
index 0000000..253a5e3
--- /dev/null
+++ b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Expander.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.gogo.jline;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+import org.apache.felix.gogo.runtime.Closure;
+import org.apache.felix.gogo.runtime.CommandSessionImpl;
+import org.apache.felix.service.command.CommandSession;
+import org.jline.reader.impl.DefaultExpander;
+
+public class Expander extends DefaultExpander {
+
+ private final CommandSession session;
+
+ public Expander(CommandSession session) {
+ this.session = session;
+ }
+
+ @Override
+ public String expandVar(String word) {
+ try {
+ Object o = org.apache.felix.gogo.runtime.Expander.expand(
+ word,
+ new Closure((CommandSessionImpl) session, null, null));
+ if (o instanceof Collection) {
+ return ((Collection<Object>) o).stream()
+ .map(String::valueOf)
+ .collect(Collectors.joining(" "));
+ }
+ else if (o != null) {
+ return o.toString();
+ }
+ } catch (Exception e) {
+ // ignore
+ }
+ return word;
+ }
+
+}
diff --git a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
index 81c612d..7e962e6 100644
--- a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
+++ b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
@@ -42,7 +42,6 @@
import org.apache.felix.gogo.runtime.Closure;
import org.apache.felix.gogo.runtime.CommandProxy;
import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.gogo.runtime.Expander;
import org.apache.felix.gogo.runtime.Job;
import org.apache.felix.gogo.runtime.Job.Status;
import org.apache.felix.gogo.runtime.Reflective;
@@ -140,7 +139,7 @@
Object prompt = session.get(name);
if (prompt != null) {
try {
- Object o = Expander.expand(
+ Object o = org.apache.felix.gogo.runtime.Expander.expand(
prompt.toString(),
new Closure((CommandSessionImpl) session, null, null));
if (o != null) {
@@ -291,6 +290,7 @@
.highlighter(new Highlighter(session))
.history(new FileHistory(new File(System.getProperty("user.home"), ".gogo.history")))
.parser(new Parser())
+ .expander(new Expander(newSession))
.build();
newSession.put(Shell.VAR_READER, reader);
newSession.put(Shell.VAR_COMPLETIONS, new HashMap());