diff --git a/com.oracle.truffle.r.pkgs/rJava/NAMESPACE b/com.oracle.truffle.r.pkgs/rJava/NAMESPACE index 20c27039014d4fc3a4125f92e4f5960410723234..1e1eb30c84f13ea28d8ff269af6bff007c690969 100644 --- a/com.oracle.truffle.r.pkgs/rJava/NAMESPACE +++ b/com.oracle.truffle.r.pkgs/rJava/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +export(.jaddClassPath) export(.jarray) export(.jbyte) export(.jcall) @@ -12,5 +13,7 @@ export(.jinit) export(.jlong) export(.jnew) export(.jnull) +export(.jpackage) export(.jshort) export(.jsimplify) +export(J) diff --git a/com.oracle.truffle.r.pkgs/rJava/R/rj.R b/com.oracle.truffle.r.pkgs/rJava/R/rj.R index eb18a8713c1f47f2d7739a9fd41cf8bbbc28590d..3d3b8a59d271ed2576bceda40d2541cfa2b66490 100644 --- a/com.oracle.truffle.r.pkgs/rJava/R/rj.R +++ b/com.oracle.truffle.r.pkgs/rJava/R/rj.R @@ -24,6 +24,7 @@ simplify = FALSE, use.true.class = FALSE) { if(is.character(obj)) { + obj <- gsub("/", ".", as.character(obj)) co <- .fastr.java.class(obj) r <- co[method](...) } else { @@ -91,6 +92,18 @@ invisible(x) } +#' @export +J <- function (class, method, ...) +{ + class <- gsub("/", ".", as.character(class)) + javaClass <- .fastr.java.class(class) + if (nargs() == 1L && missing(method)) { + javaClass + } else { + .jcall(javaClass, ,method, ...) + } +} + # # noop stubs # @@ -117,3 +130,31 @@ { # do nothing } + +#' @export +.jpackage <- function (name, jars='*', morePaths='', nativeLibrary=FALSE, lib.loc=NULL) +{ + javalibs <- system.file("java", package = name, lib.loc = lib.loc) + if(javalibs == "") { + javalibs = paste0("library/", name, "/java") + } + cat(paste0("********************************************************\n", + "*** WARNING!!!\n", + "*** .jpackage is not yet implemented.\n", + "*** Please ensure that all java libraries from:\n", + "*** ", javalibs, "\n", + "*** are on FastR classpath\n", + "********************************************************\n")) +} + +#' @export +.jaddClassPath <- function (path) +{ + cat(paste0("********************************************************\n", + "*** WARNING!!!\n", + "*** .jaddClasPath is not yet implemented.\n", + "*** Please ensure that \n", + "*** ", path, "\n", + "*** is on FastR classpath\n", + "********************************************************\n")) +} \ No newline at end of file diff --git a/com.oracle.truffle.r.pkgs/rJava/tests/testthat/testJ.R b/com.oracle.truffle.r.pkgs/rJava/tests/testthat/testJ.R new file mode 100644 index 0000000000000000000000000000000000000000..92de8cc5060f4d7047173dea91bbf681c56d0590 --- /dev/null +++ b/com.oracle.truffle.r.pkgs/rJava/tests/testthat/testJ.R @@ -0,0 +1,20 @@ +# prerequisites: +# - 'testthat' package has to be installed: install.packages("testthat") +# - FastR`s rJava package has to be installed: bin/r CMD INSTALL com.oracle.truffle.r.pkgs/rjava +# - mxbuild/dists/fastr-unit-tests.jar has to be on FastR classpath + +library(testthat) +library(rJava) + +testName <- "test J function" +test_that(testName, { + cat(paste0(testName, "\n")) + tc <- J("com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass") + expect_equal(2147483647L, tc$fieldStaticInteger) + + tc <- J("com/oracle/truffle/r/test/library/fastr/TestJavaInterop$TestClass") + expect_equal(2147483647L, tc$fieldStaticInteger) + + expect_equal(2147483647L, J("com.oracle.truffle.r.test.library.fastr.TestJavaInterop$TestClass", "methodStaticInteger")) + expect_equal(2147483647L, J("com/oracle/truffle/r/test/library/fastr/TestJavaInterop$TestClass", "methodStaticInteger")) +}) 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 f3f274fc6ee0030cf7941ecaafe8fe718f730dc6..f9852832d2f60e5024c9e54cda373f4d034e6794 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 @@ -445,24 +445,24 @@ public class TestJavaInterop extends TestBase { public static class TestClass { - public static boolean fieldStaticBoolean; - public static byte fieldStaticByte; - public static char fieldStaticChar; - public static short fieldStaticShort; - public static int fieldStaticInteger; - public static long fieldStaticLong; - public static double fieldStaticDouble; - public static float fieldStaticFloat; - - public static Boolean fieldStaticBooleanObject; - public static Byte fieldStaticByteObject; - public static Character fieldStaticCharObject; - public static Short fieldStaticShortObject; - public static Integer fieldStaticIntegerObject; - public static Long fieldStaticLongObject; - public static Double fieldStaticDoubleObject; - public static Float fieldStaticFloatObject; - public static String fieldStaticStringObject; + public static boolean fieldStaticBoolean = true; + public static byte fieldStaticByte = Byte.MAX_VALUE; + public static char fieldStaticChar = 'a'; + public static short fieldStaticShort = Short.MAX_VALUE; + public static int fieldStaticInteger = Integer.MAX_VALUE; + public static long fieldStaticLong = Long.MAX_VALUE; + public static double fieldStaticDouble = Double.MAX_VALUE; + public static float fieldStaticFloat = Float.MAX_VALUE; + + public static Boolean fieldStaticBooleanObject = fieldStaticBoolean; + public static Byte fieldStaticByteObject = fieldStaticByte; + public static Character fieldStaticCharObject = fieldStaticChar; + public static Short fieldStaticShortObject = fieldStaticShort; + public static Integer fieldStaticIntegerObject = fieldStaticInteger; + public static Long fieldStaticLongObject = fieldStaticLong; + public static Double fieldStaticDoubleObject = fieldStaticDouble; + public static Float fieldStaticFloatObject = fieldStaticFloat; + public static String fieldStaticStringObject = "a string"; public boolean fieldBoolean; public byte fieldByte;