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 15:54:23 UTC
svn commit: r1831792 - in /felix/trunk/gogo:
jline/src/main/java/org/apache/felix/gogo/jline/
runtime/src/main/java/org/apache/felix/gogo/runtime/
runtime/src/main/java/org/apache/felix/service/command/
runtime/src/test/java/org/apache/felix/gogo/runti...
Author: gnodet
Date: Thu May 17 15:54:23 2018
New Revision: 1831792
URL: http://svn.apache.org/viewvc?rev=1831792&view=rev
Log:
[FELIX-5857] Provide a context classloader on the session to help with class loading
Added:
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestEvaluate.java
- copied, changed from r1831785, felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java
Modified:
felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Closure.java
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/service/command/CommandSession.java
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/ExpanderTest.java
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestTokenizer.java
felix/trunk/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Builtin.java
Modified: felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java?rev=1831792&r1=1831791&r2=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java (original)
+++ felix/trunk/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Builtin.java Thu May 17 15:54:23 2018
@@ -49,6 +49,7 @@ import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.felix.gogo.runtime.Reflective;
import org.apache.felix.service.command.Job;
import org.apache.felix.service.command.Process;
import org.apache.felix.gogo.runtime.CommandSessionImpl;
@@ -121,7 +122,7 @@ public class Builtin {
if (name instanceof Class<?>) {
clazz = (Class<?>) name;
} else {
- clazz = loadClass(name.toString());
+ clazz = loadClass(session, name.toString());
}
for (Constructor<?> c : clazz.getConstructors()) {
@@ -161,17 +162,17 @@ public class Builtin {
+ " to any of " + Arrays.asList(clazz.getConstructors()));
}
- private Class<?> loadClass(String name) throws ClassNotFoundException {
+ private Class<?> loadClass(CommandSession session, String name) throws ClassNotFoundException {
if (!name.contains(".")) {
for (String p : packages) {
String pkg = p + "." + name;
try {
- return Class.forName(pkg);
+ return Class.forName(pkg, true, session.classLoader());
} catch (ClassNotFoundException e) {
}
}
}
- return Class.forName(name);
+ return Class.forName(name, true, session.classLoader());
}
public void set(CommandSession session, String[] argv) {
Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Closure.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Closure.java?rev=1831792&r1=1831791&r2=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Closure.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Closure.java Thu May 17 15:54:23 2018
@@ -751,6 +751,11 @@ public class Closure implements Function
return isSet(CommandSession.OPTION_NO_GLOB, false) ? null : session().currentDir();
}
+ @Override
+ public ClassLoader classLoader() {
+ return session.classLoader();
+ }
+
protected boolean isSet(String name, boolean def) {
Object v = session.get(name);
if (v instanceof Boolean) {
Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java?rev=1831792&r1=1831791&r2=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java Thu May 17 15:54:23 2018
@@ -86,6 +86,7 @@ public class CommandSessionImpl implemen
private final ExecutorService executor;
private Path currentDir;
+ private ClassLoader classLoader;
protected CommandSessionImpl(CommandProcessorImpl shell, CommandSessionImpl parent)
{
@@ -141,6 +142,16 @@ public class CommandSessionImpl implemen
currentDir = path;
}
+ public ClassLoader classLoader()
+ {
+ return classLoader != null ? classLoader : getClass().getClassLoader();
+ }
+
+ public void classLoader(ClassLoader classLoader)
+ {
+ this.classLoader = classLoader;
+ }
+
public void close()
{
if (!this.closed)
@@ -468,6 +479,17 @@ public class CommandSessionImpl implemen
public Object doConvert(Class<?> desiredType, Object in)
{
+ if (desiredType == Class.class)
+ {
+ try
+ {
+ return Class.forName(in.toString(), true, classLoader());
+ }
+ catch (ClassNotFoundException e)
+ {
+ return null;
+ }
+ }
return processor.doConvert(desiredType, in);
}
Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java?rev=1831792&r1=1831791&r2=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java Thu May 17 15:54:23 2018
@@ -31,4 +31,6 @@ public interface Evaluate
Object expr(Token t);
Path currentDir();
+
+ ClassLoader classLoader();
}
Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/service/command/CommandSession.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/service/command/CommandSession.java?rev=1831792&r1=1831791&r2=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/service/command/CommandSession.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/service/command/CommandSession.java Thu May 17 15:54:23 2018
@@ -35,6 +35,10 @@ public interface CommandSession extends
void currentDir(Path path);
+ ClassLoader classLoader();
+
+ void classLoader(ClassLoader classLoader);
+
/**
* Execute a program in this session.
*
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=1831792&r1=1831791&r2=1831792&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 15:54:23 2018
@@ -34,11 +34,7 @@ public class ExpanderTest {
@Test
public void testSubscriptOnArrays() throws Exception {
- Evaluate evaluate = new Evaluate() {
- @Override
- public Object eval(Token t) {
- return null;
- }
+ Evaluate evaluate = new TestEvaluate() {
@Override
public Object get(String key) {
switch (key) {
@@ -51,18 +47,6 @@ public class ExpanderTest {
}
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));
@@ -72,38 +56,13 @@ public class ExpanderTest {
@Test
public void testOctalAndHex() throws Exception {
- Evaluate evaluate = new Evaluate() {
- @Override
- public Object eval(Token t) {
- return null;
- }
- @Override
- public Object get(String key) {
- 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;
- }
- };
+ Evaluate evaluate = new TestEvaluate();
assertEquals("\033\033", Expander.expand("$'\\033\\u001B'", evaluate));
}
@Test
public void testSortingFlags() throws Exception {
- Evaluate evaluate = new Evaluate() {
- @Override
- public Object eval(Token t) {
- return null;
- }
+ Evaluate evaluate = new TestEvaluate() {
@Override
public Object get(String key) {
switch (key) {
@@ -118,18 +77,6 @@ public class ExpanderTest {
}
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("5 3 4 2 1 3", Expander.expand("${(j: :)a}", evaluate));
@@ -146,11 +93,7 @@ public class ExpanderTest {
@Test
public void testGenerateFiles() throws IOException {
final Path testdir = Paths.get(".").toAbsolutePath().resolve("target/testdir").normalize();
- Evaluate evaluate = new Evaluate() {
- @Override
- public Object eval(Token t) {
- return null;
- }
+ Evaluate evaluate = new TestEvaluate() {
@Override
public Object get(String key) {
if ("HOME".equals(key)) {
@@ -159,14 +102,6 @@ public class ExpanderTest {
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 testdir.resolve("Users/gogo/karaf/home");
}
Copied: felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestEvaluate.java (from r1831785, felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java)
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestEvaluate.java?p2=felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestEvaluate.java&p1=felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java&r1=1831785&r2=1831792&rev=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Evaluate.java (original)
+++ felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestEvaluate.java Thu May 17 15:54:23 2018
@@ -20,15 +20,34 @@ package org.apache.felix.gogo.runtime;
import java.nio.file.Path;
-public interface Evaluate
-{
- Object eval(Token t) throws Exception;
-
- Object get(String key);
-
- Object put(String key, Object value);
+public class TestEvaluate implements Evaluate {
+ @Override
+ public Object eval(Token t) throws Exception {
+ return null;
+ }
- Object expr(Token t);
+ @Override
+ public Object get(String key) {
+ return null;
+ }
- Path currentDir();
+ @Override
+ public Object put(String key, Object value) {
+ return null;
+ }
+
+ @Override
+ public Object expr(Token t) {
+ return null;
+ }
+
+ @Override
+ public Path currentDir() {
+ return null;
+ }
+
+ @Override
+ public ClassLoader classLoader() {
+ return getClass().getClassLoader();
+ }
}
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=1831792&r1=1831791&r2=1831792&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 Thu May 17 15:54:23 2018
@@ -54,7 +54,7 @@ public class TestTokenizer
public TestTokenizer()
{
- evaluate = new Evaluate()
+ evaluate = new TestEvaluate()
{
public Object eval(Token t) {
throw new UnsupportedOperationException("eval not implemented.");
Modified: felix/trunk/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Builtin.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Builtin.java?rev=1831792&r1=1831791&r2=1831792&view=diff
==============================================================================
--- felix/trunk/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Builtin.java (original)
+++ felix/trunk/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Builtin.java Thu May 17 15:54:23 2018
@@ -83,7 +83,7 @@ public class Builtin
// FIXME: the "new" command should be provided by runtime,
// so it can leverage same argument coercion mechanism, used to invoke methods.
- public Object _new(Object name, Object[] argv) throws Exception
+ public Object _new(CommandSession session, Object name, Object[] argv) throws Exception
{
Class<?> clazz = null;
@@ -93,7 +93,7 @@ public class Builtin
}
else
{
- clazz = loadClass(name.toString());
+ clazz = loadClass(session, name.toString());
}
for (Constructor<?> c : clazz.getConstructors())
@@ -143,7 +143,7 @@ public class Builtin
+ " to any of " + Arrays.asList(clazz.getConstructors()));
}
- private Class<?> loadClass(String name) throws ClassNotFoundException
+ private Class<?> loadClass(CommandSession session, String name) throws ClassNotFoundException
{
if (!name.contains("."))
{
@@ -152,14 +152,14 @@ public class Builtin
String pkg = p + "." + name;
try
{
- return Class.forName(pkg);
+ return Class.forName(pkg, true, session.classLoader());
}
catch (ClassNotFoundException e)
{
}
}
}
- return Class.forName(name);
+ return Class.forName(name, true, session.classLoader());
}
public void set(CommandSession session, String[] argv) {