diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
index dfc372a3ed7589e2c18b15a986297e123783fa2e..d2e5d9d34c0b329ab543eb9054bc81ba50ae0105 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java
@@ -411,6 +411,7 @@ public class BasePackage extends RBuiltinPackage {
         add(FastRInterop.IsExecutable.class, FastRInteropFactory.IsExecutableNodeGen::create);
         add(FastRInterop.IsExternal.class, FastRInteropFactory.IsExternalNodeGen::create);
         add(FastRInterop.JavaClass.class, FastRInteropFactory.JavaClassNodeGen::create);
+        add(FastRInterop.JavaClassName.class, FastRInteropFactory.JavaClassNameNodeGen::create);
         add(FastRInterop.IsForeignArray.class, FastRInteropFactory.IsForeignArrayNodeGen::create);
         add(FastRInterop.NewJavaArray.class, FastRInteropFactory.NewJavaArrayNodeGen::create);
         add(FastRInterop.ToJavaArray.class, FastRInteropFactory.ToJavaArrayNodeGen::create);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
index cf862e64f56335547546cf4c5c894476f8c05cbd..16a1f126f59ea7f2313610a9edb4016918203278 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
@@ -456,6 +456,35 @@ public class FastRInterop {
         }
     }
 
+    @ImportStatic({RRuntime.class})
+    @RBuiltin(name = ".fastr.java.className", visibility = ON, kind = PRIMITIVE, parameterNames = {"class"}, behavior = COMPLEX)
+    public abstract static class JavaClassName extends RBuiltinNode.Arg1 {
+
+        static {
+            Casts.noCasts(JavaClassName.class);
+        }
+
+        @Specialization(guards = {"isJavaObject(obj)"})
+        @TruffleBoundary
+        public Object javaClassName(TruffleObject obj) {
+            Object o = JavaInterop.asJavaObject(Object.class, obj);
+            if (o == null) {
+                return RNull.instance;
+            }
+            return o.getClass().getName();
+        }
+
+        protected boolean isJavaObject(TruffleObject obj) {
+            return JavaInterop.isJavaObject(obj);
+        }
+
+        @Fallback
+        public String javaClassName(@SuppressWarnings("unused") Object obj) {
+            throw error(RError.Message.GENERIC, "unsupported type");
+        }
+
+    }
+
     @ImportStatic({Message.class, RRuntime.class})
     @RBuiltin(name = ".fastr.interop.isArray", visibility = ON, kind = PRIMITIVE, parameterNames = {"obj"}, behavior = COMPLEX)
     public abstract static class IsForeignArray extends RBuiltinNode.Arg1 {
@@ -489,21 +518,22 @@ public class FastRInterop {
         @Specialization
         @TruffleBoundary
         public Object newArray(String clazz, int length) {
-            try {
-                // TODO new via ForeignAccess
-                return JavaInterop.asTruffleObject(Array.newInstance(Class.forName(clazz), length));
-            } catch (ClassNotFoundException e) {
-                throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage());
-            }
+            return JavaInterop.asTruffleObject(Array.newInstance(getClazz(clazz), length));
         }
 
         @Specialization
         @TruffleBoundary
         public Object newArray(String clazz, RAbstractIntVector dim) {
+            int[] dima = new int[dim.getLength()];
+            for (int i = 0; i < dima.length; i++) {
+                dima[i] = dim.getDataAt(i);
+            }
+            return JavaInterop.asTruffleObject(Array.newInstance(getClazz(clazz), dima));
+        }
+
+        private Class<?> getClazz(String className) throws RError {
             try {
-                int[] dima = new int[dim.getLength()];
-                // TODO new via ForeignAccess
-                return JavaInterop.asTruffleObject(Array.newInstance(Class.forName(clazz), dima));
+                return classForName(className);
             } catch (ClassNotFoundException e) {
                 throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage());
             }
@@ -607,38 +637,6 @@ public class FastRInterop {
             return R2ForeignNodeGen.create();
         }
 
-        private Class<?> getClazz(String className) throws RError {
-            if (className.equals(Byte.TYPE.getName())) {
-                return Byte.TYPE;
-            }
-            if (className.equals(Boolean.TYPE.getName())) {
-                return Boolean.TYPE;
-            }
-            if (className.equals(Character.TYPE.getName())) {
-                return Character.TYPE;
-            }
-            if (className.equals(Double.TYPE.getName())) {
-                return Double.TYPE;
-            }
-            if (className.equals(Float.TYPE.getName())) {
-                return Float.TYPE;
-            }
-            if (className.equals(Integer.TYPE.getName())) {
-                return Integer.TYPE;
-            }
-            if (className.equals(Long.TYPE.getName())) {
-                return Long.TYPE;
-            }
-            if (className.equals(Short.TYPE.getName())) {
-                return Short.TYPE;
-            }
-            try {
-                return Class.forName(className);
-            } catch (ClassNotFoundException e) {
-                throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage());
-            }
-        }
-
         private static int[] getDim(boolean flat, RAbstractVector vec) {
             int[] dims;
             if (flat) {
@@ -673,7 +671,7 @@ public class FastRInterop {
         @TruffleBoundary
         public Object toArray(TruffleObject obj, @SuppressWarnings("unused") RMissing missing, @SuppressWarnings("unused") boolean flat,
                         @Cached("WRITE.createNode()") Node write) {
-            if (JavaInterop.isJavaObject(Object.class, obj)) {
+            if (JavaInterop.isJavaObject(obj)) {
                 if (JavaInterop.isArray(obj)) {
                     // TODO should return copy?
                     return obj;
@@ -698,6 +696,14 @@ public class FastRInterop {
             throw error(RError.Message.GENERIC, "unsupported type");
         }
 
+        private Class<?> getClazz(String className) throws RError {
+            try {
+                return classForName(className);
+            } catch (ClassNotFoundException e) {
+                throw error(RError.Message.GENERIC, "error while accessing Java class: " + e.getMessage());
+            }
+        }
+
     }
 
     @ImportStatic({Message.class, RRuntime.class})
@@ -793,4 +799,32 @@ public class FastRInterop {
             return RRuntime.LOGICAL_FALSE;
         }
     }
+
+    private static Class<?> classForName(String className) throws ClassNotFoundException {
+        if (className.equals(Byte.TYPE.getName())) {
+            return Byte.TYPE;
+        }
+        if (className.equals(Boolean.TYPE.getName())) {
+            return Boolean.TYPE;
+        }
+        if (className.equals(Character.TYPE.getName())) {
+            return Character.TYPE;
+        }
+        if (className.equals(Double.TYPE.getName())) {
+            return Double.TYPE;
+        }
+        if (className.equals(Float.TYPE.getName())) {
+            return Float.TYPE;
+        }
+        if (className.equals(Integer.TYPE.getName())) {
+            return Integer.TYPE;
+        }
+        if (className.equals(Long.TYPE.getName())) {
+            return Long.TYPE;
+        }
+        if (className.equals(Short.TYPE.getName())) {
+            return Short.TYPE;
+        }
+        return Class.forName(className);
+    }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index c92d40e833503d3bcc33aac8b09e65cb5267d05f..855f7a4f5b1b688cad7304c617382f06ae0fed96 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -132679,6 +132679,22 @@ NULL
 NULL
 
 
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 'com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass' } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));.fastr.java.className(to) }
+[1] "com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.java.className(1) : unsupported type', '<<<NEWLINE>>>') } else { .fastr.java.className(1) }
+Error in .fastr.java.className(1) : unsupported type
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.java.className(NULL) : unsupported type', '<<<NEWLINE>>>') } else { .fastr.java.className(NULL) }
+Error in .fastr.java.className(NULL) : unsupported type
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testGetClass#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { cat('Error in .fastr.java.className(to$methodReturnsNull()) : unsupported type', '<<<NEWLINE>>>') } else { to <- .fastr.interop.new(.fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'));.fastr.java.className(to$methodReturnsNull()) }
+Error in .fastr.java.className(to$methodReturnsNull()) : unsupported type
+
 ##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testIdentical#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { FALSE } else { b1 <- .fastr.interop.toByte(1); b2 <- .fastr.interop.toByte(1); identical(b1, b2) }
 [1] FALSE
@@ -133189,6 +133205,510 @@ NULL
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { c('staticField', 'staticMethod') } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestNamesClass'); sort(names(tc)) }
 [1] "staticField"  "staticMethod"
 
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[B' } else { a <- .fastr.java.newArray('byte', 10L); .fastr.java.className(a); }
+[1] "[B"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[C' } else { a <- .fastr.java.newArray('char', 10L); .fastr.java.className(a); }
+[1] "[C"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[D' } else { a <- .fastr.java.newArray('double', 10L); .fastr.java.className(a); }
+[1] "[D"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[F' } else { a <- .fastr.java.newArray('float', 10L); .fastr.java.className(a); }
+[1] "[F"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[I' } else { a <- .fastr.java.newArray('int', 10L); .fastr.java.className(a); }
+[1] "[I"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[J' } else { a <- .fastr.java.newArray('long', 10L); .fastr.java.className(a); }
+[1] "[J"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;' } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', 10L); .fastr.java.className(a); }
+[1] "[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Boolean;' } else { a <- .fastr.java.newArray('java.lang.Boolean', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Boolean;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Byte;' } else { a <- .fastr.java.newArray('java.lang.Byte', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Byte;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Character;' } else { a <- .fastr.java.newArray('java.lang.Character', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Character;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Double;' } else { a <- .fastr.java.newArray('java.lang.Double', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Double;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Float;' } else { a <- .fastr.java.newArray('java.lang.Float', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Float;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Integer;' } else { a <- .fastr.java.newArray('java.lang.Integer', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Integer;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Long;' } else { a <- .fastr.java.newArray('java.lang.Long', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Long;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.Short;' } else { a <- .fastr.java.newArray('java.lang.Short', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.Short;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Ljava.lang.String;' } else { a <- .fastr.java.newArray('java.lang.String', 10L); .fastr.java.className(a); }
+[1] "[Ljava.lang.String;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[S' } else { a <- .fastr.java.newArray('short', 10L); .fastr.java.className(a); }
+[1] "[S"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[Z' } else { a <- .fastr.java.newArray('boolean', 10L); .fastr.java.className(a); }
+[1] "[Z"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[B' } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[B"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[C' } else { a <- .fastr.java.newArray('char', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[C"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[D' } else { a <- .fastr.java.newArray('double', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[D"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[F' } else { a <- .fastr.java.newArray('float', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[F"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[I' } else { a <- .fastr.java.newArray('int', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[I"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[J' } else { a <- .fastr.java.newArray('long', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[J"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;' } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Lcom.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Boolean;' } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Boolean;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Byte;' } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Byte;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Character;' } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Character;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Double;' } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Double;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Float;' } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Float;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Integer;' } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Integer;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Long;' } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Long;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.Short;' } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.Short;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Ljava.lang.String;' } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Ljava.lang.String;"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[S' } else { a <- .fastr.java.newArray('short', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[S"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { '[[Z' } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); .fastr.java.className(a); }
+[1] "[[Z"
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('boolean', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('byte', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('char', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('double', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('float', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('int', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Boolean', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Byte', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Character', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Double', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Float', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Integer', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Long', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.Short', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('java.lang.String', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('long', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 10L } else { a <- .fastr.java.newArray('short', 10L); length(a); }
+[1] 10
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('char', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('double', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('float', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('int', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('long', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 2L } else { a <- .fastr.java.newArray('short', c(2L, 3L)); length(a); }
+[1] 2
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('char', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('double', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('float', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('int', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('long', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { 3L } else { a <- .fastr.java.newArray('short', c(2L, 3L)); length(a[1]); }
+[1] 3
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('boolean', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('boolean', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('byte', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('byte', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('char', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('char', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('double', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('double', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('float', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('float', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('int', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('int', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Boolean', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Boolean', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Byte', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Byte', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Character', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Character', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Double', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Double', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Float', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Float', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Integer', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Integer', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Long', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Long', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Short', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.Short', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.String', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('java.lang.String', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('long', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('long', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('short', 10L); .fastr.interop.isArray(a); }
+[1] TRUE
+
+##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewArray#
+#if (length(grep("FastR", R.Version()$version.string)) != 1) { TRUE } else { a <- .fastr.java.newArray('short', c(2L, 3L)); .fastr.interop.isArray(a); }
+[1] TRUE
+
 ##com.oracle.truffle.r.test.library.fastr.TestJavaInterop.testNewWithJavaClass#
 #if (length(grep("FastR", R.Version()$version.string)) != 1) { 2147483647 } else { tc <- .fastr.java.class('com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'); to <- new(tc); to$fieldInteger }
 [1] 2147483647
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
index 9dcd1dcb7a2b132989bac30db739fa627e2e5de9..07314e25fe1a8a2d7c6ea2bbe74895decffbee4e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
@@ -176,6 +176,50 @@ public class TestJavaInterop extends TestBase {
         assertEvalFastR(Ignored.Unimplemented, "a <- .fastr.java.toArray(1L,,F); a;", getRValue(new int[]{1}));
     }
 
+    @Test
+    public void testNewArray() {
+        testNewArray("java.lang.Boolean");
+        testNewArray("java.lang.Byte");
+        testNewArray("java.lang.Character");
+        testNewArray("java.lang.Double");
+        testNewArray("java.lang.Float");
+        testNewArray("java.lang.Integer");
+        testNewArray("java.lang.Long");
+        testNewArray("java.lang.Short");
+        testNewArray("java.lang.String");
+
+        testNewArray("boolean");
+        testNewArray("byte");
+        testNewArray("char");
+        testNewArray("double");
+        testNewArray("float");
+        testNewArray("int");
+        testNewArray("long");
+        testNewArray("short");
+
+        testNewArray("com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass");
+    }
+
+    public void testNewArray(String className) {
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', 10L); .fastr.interop.isArray(a);", "TRUE");
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', 10L); length(a);", "10L");
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', 10L); .fastr.java.className(a);", toArrayClassName(className, 1));
+
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); .fastr.interop.isArray(a);", "TRUE");
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); length(a);", "2L");
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); length(a[1]);", "3L");
+        assertEvalFastR("a <- .fastr.java.newArray('" + className + "', c(2L, 3L)); .fastr.java.className(a);", toArrayClassName(className, 2));
+    }
+
+    @Test
+    public void testGetClass() {
+        assertEvalFastR(CREATE_TRUFFLE_OBJECT + ".fastr.java.className(to)", "'com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass'");
+
+        assertEvalFastR(CREATE_TRUFFLE_OBJECT + ".fastr.java.className(to$methodReturnsNull())", "cat('Error in .fastr.java.className(to$methodReturnsNull()) : unsupported type', '\n')");
+        assertEvalFastR(".fastr.java.className(NULL)", "cat('Error in .fastr.java.className(NULL) : unsupported type', '\n')");
+        assertEvalFastR(".fastr.java.className(1)", "cat('Error in .fastr.java.className(1) : unsupported type', '\n')");
+    }
+
     @Test
     public void testFromArray() {
         testFromArray("fieldStaticBooleanArray", "logical");
@@ -764,6 +808,46 @@ public class TestJavaInterop extends TestBase {
         return "";
     }
 
+    private String toArrayClassName(String className, int dims) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("'");
+        for (int i = 0; i < dims; i++) {
+            sb.append("[");
+        }
+        switch (className) {
+            case "boolean":
+                sb.append("Z");
+                break;
+            case "byte":
+                sb.append("B");
+                break;
+            case "char":
+                sb.append("C");
+                break;
+            case "double":
+                sb.append("D");
+                break;
+            case "float":
+                sb.append("F");
+                break;
+            case "int":
+                sb.append("I");
+                break;
+            case "long":
+                sb.append("J");
+                break;
+            case "short":
+                sb.append("S");
+                break;
+            default:
+                sb.append('L');
+                sb.append(className);
+                sb.append(';');
+        }
+        sb.append('\'');
+        return sb.toString();
+    }
+
     public static class TestNamesClass {
         public Object field;
         public static Object staticField;