Skip to content

Commit e8aeb6e

Browse files
committed
Merge branch 'alias-arrays'
Closes #243.
2 parents 0ce6c58 + 0372d6a commit e8aeb6e

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

src/main/java/org/scijava/script/DefaultScriptService.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,12 @@ public void addAlias(final String alias, final Class<?> type) {
254254
public synchronized Class<?> lookupClass(final String alias)
255255
throws ScriptException
256256
{
257-
final Class<?> type = aliasMap().get(alias);
258-
if (type != null) return type;
257+
final String componentAlias = stripArrayNotation(alias);
258+
final Class<?> type = aliasMap().get(componentAlias);
259+
if (type != null) {
260+
final int arrayDim = (alias.length() - componentAlias.length()) / 2;
261+
return makeArrayType(type, arrayDim);
262+
}
259263

260264
try {
261265
final Class<?> c = ClassUtils.loadClass(alias, false);
@@ -473,4 +477,16 @@ private Future<ScriptModule> cast(final Future<Module> future) {
473477
return (Future) future;
474478
}
475479

480+
// -- Helper methods - aliases --
481+
482+
private String stripArrayNotation(final String alias) {
483+
if (!alias.endsWith("[]")) return alias;
484+
return stripArrayNotation(alias.substring(0, alias.length() - 2));
485+
}
486+
487+
private Class<?> makeArrayType(final Class<?> type, final int arrayDim) {
488+
if (arrayDim <= 0) return type;
489+
return makeArrayType(ClassUtils.getArrayClass(type), arrayDim - 1);
490+
}
491+
476492
}

src/test/java/org/scijava/script/ScriptServiceTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@
3232
package org.scijava.script;
3333

3434
import static org.junit.Assert.assertEquals;
35+
import static org.junit.Assert.assertSame;
3536

3637
import java.io.File;
3738
import java.util.List;
3839

40+
import javax.script.ScriptException;
41+
3942
import org.junit.Test;
4043
import org.scijava.Context;
4144
import org.scijava.util.AppUtils;
@@ -72,4 +75,33 @@ public void testSystemProperty() {
7275
assertEquals(dir2, scriptDirs.get(2).getAbsolutePath());
7376
}
7477

78+
@Test
79+
public void testArrayAliases() throws ScriptException {
80+
final Context ctx = new Context(ScriptService.class);
81+
final ScriptService ss = ctx.service(ScriptService.class);
82+
83+
final Class<?> pInt2D = ss.lookupClass("int[][]");
84+
assertSame(int[][].class, pInt2D);
85+
final Class<?> pInt1D = ss.lookupClass("int[]");
86+
assertSame(int[].class, pInt1D);
87+
final Class<?> pInt = ss.lookupClass("int");
88+
assertSame(int.class, pInt);
89+
90+
final Class<?> oInt2D = ss.lookupClass("Integer[][]");
91+
assertSame(Integer[][].class, oInt2D);
92+
final Class<?> oInt1D = ss.lookupClass("Integer[]");
93+
assertSame(Integer[].class, oInt1D);
94+
final Class<?> oInt = ss.lookupClass("Integer");
95+
assertSame(Integer.class, oInt);
96+
97+
final Class<?> str2D = ss.lookupClass("String[][]");
98+
assertSame(String[][].class, str2D);
99+
final Class<?> str1D = ss.lookupClass("String[]");
100+
assertSame(String[].class, str1D);
101+
final Class<?> str = ss.lookupClass("String");
102+
assertSame(String.class, str);
103+
104+
ctx.dispose();
105+
}
106+
75107
}

0 commit comments

Comments
 (0)