Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Package libraries Java code as Java Modules #10714

Draft
wants to merge 97 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
9c149b9
Must specify --repl to enable debug server
JaroslavTulach Jul 29, 2024
76070ba
Use --repl to enable REPL changelog note
JaroslavTulach Jul 29, 2024
873c418
Towards a ClassPath per Package
JaroslavTulach Jul 30, 2024
3b1bc98
One ClassLoader per each Package
JaroslavTulach Jul 30, 2024
45f62cf
Define ModuleLayer for each Package
JaroslavTulach Jul 30, 2024
8700cc8
Load classes via ModuleLayer
JaroslavTulach Jul 30, 2024
74f8111
Turning std-base and std-aws into Java modules
JaroslavTulach Jul 30, 2024
7e865ce
Turn common-polyglot-core-utils into JPMS module
Akirathan Jul 30, 2024
3a6c335
Add depedencies to org.enso.std.base JPMS module
Akirathan Jul 30, 2024
b23be3d
Turn std-database into JPMS module
Akirathan Jul 30, 2024
f0dd3f7
Add depedencies to org.enso.std.aws JPMS module
Akirathan Jul 30, 2024
c4c1842
Using module-info to register SPI services
JaroslavTulach Jul 31, 2024
149dc7e
Removing another no longer needed dependency on NetBeans Lookup API
JaroslavTulach Jul 31, 2024
48b29c7
Removing add to class path concept
JaroslavTulach Jul 31, 2024
dd5723e
Turn std-table into JPMS module
Akirathan Jul 31, 2024
74fa9e1
Move tests that need internal access to Standard.Base into test/Base_…
JaroslavTulach Jul 31, 2024
1e48979
Resolving merge conficts
JaroslavTulach Jul 31, 2024
bbe754c
No more of Polyglot.Java
JaroslavTulach Aug 1, 2024
1514ad2
Nicer formatting with var
JaroslavTulach Aug 1, 2024
09c6946
Allow Standard.Table to depend on modules from Standard.Base
JaroslavTulach Aug 1, 2024
3148976
language-server/test compiles again
JaroslavTulach Aug 1, 2024
ae64b8a
Host Files values group_builder
JaroslavTulach Aug 5, 2024
c5e41ab
Merging in develop branch
JaroslavTulach Aug 5, 2024
6fdd11c
Merge with most recent develop branch that includes many JPMS
JaroslavTulach Sep 26, 2024
cfdda7b
Using moduleDependencies and internalModuleDependencies for standard …
JaroslavTulach Sep 26, 2024
d50f006
There can be Enso sources without associated package
JaroslavTulach Sep 26, 2024
202b1d8
Merging with develop
JaroslavTulach Oct 1, 2024
b04ce5c
Avoid duplicated modules. Use the one from boot layer.
JaroslavTulach Oct 1, 2024
d94a44d
Load all library Java modules with a single class loader
JaroslavTulach Oct 1, 2024
c71183c
Opening std-table.jar for reflection from Enso code
JaroslavTulach Oct 1, 2024
9bc7a3a
Visualization_Tests run and yield just nine errors
JaroslavTulach Oct 1, 2024
16b82c3
Standard.Test loads classes from Standard.Base
JaroslavTulach Oct 1, 2024
405e88d
Always prefer modules from parent layers
JaroslavTulach Oct 1, 2024
57e64e0
AWS requires access to Standard.Base and Standard.Database JARs
JaroslavTulach Oct 1, 2024
efda30f
Opening up std-table JAR, so Enso can access all Java classes
JaroslavTulach Oct 1, 2024
e9a0456
Less functional boilerplate
JaroslavTulach Oct 2, 2024
c0359e2
Merge remote-tracking branch 'origin/develop' into wip/jtulach/ClassP…
JaroslavTulach Oct 2, 2024
5b14f89
Special Lookup class and registration via a property to allow searchi…
JaroslavTulach Oct 2, 2024
841de5f
Turning Standard.Image into Java module
JaroslavTulach Oct 2, 2024
e6e5c09
Making test/Image_Tests pass OK
JaroslavTulach Oct 2, 2024
3194f6d
Avoid DriverManager. Directly talk to Driver instances.
JaroslavTulach Oct 2, 2024
cbe625f
Register SQLServerConnectionDetailsSPI in std-bits/microsoft/*/module…
JaroslavTulach Oct 3, 2024
c72ab8e
No polyglot symbol for org.enso.base.encoding.NewlineDetector in Tabl…
JaroslavTulach Oct 3, 2024
062b26e
No polyglot symbol for org.enso.table.data.table.Table in Table_Tests
JaroslavTulach Oct 3, 2024
e4cc4b4
No polyglot symbol for org.enso.table.data.table.join.between.SortedL…
JaroslavTulach Oct 3, 2024
9c86f7a
Using for loop
JaroslavTulach Oct 3, 2024
6992103
Make enso-test-java-helpers available to Table_Tests
JaroslavTulach Oct 3, 2024
98eeb64
No need to generate .bindings index to run benchmarks
JaroslavTulach Oct 3, 2024
60b4277
BenchProcessor puts runtime.jar into own layer. Use that one as bootL…
JaroslavTulach Oct 3, 2024
f482b72
test/Benchmarks need access to org.enso.table.data.index.OrderedMulti…
JaroslavTulach Oct 4, 2024
3112158
Introducing AWS wrapper module
JaroslavTulach Oct 7, 2024
e51eb3e
Placeholders for exported packages
JaroslavTulach Oct 7, 2024
a263449
Remove placeholders
Akirathan Oct 7, 2024
d161f9e
Remove aws-wrapper/Compile/moduleDependencies.
Akirathan Oct 7, 2024
c03825c
javaModuleName is the first setting
Akirathan Oct 7, 2024
3ec8ed0
Fix typo in cbor library dependency
Akirathan Oct 7, 2024
41fd4c1
Typo in module name.
Akirathan Oct 7, 2024
4bec7d9
Fix compilation of aws-wrapper
Akirathan Oct 7, 2024
88aaa76
Remove empty settings from std-aws
Akirathan Oct 7, 2024
be66f1b
Fix typo in module name
Akirathan Oct 7, 2024
c97ec77
aws-wrapper-assembly.jar gets into component directory.
Akirathan Oct 7, 2024
4a6e55c
Remove signature from aws-wrapper-assembly jar
Akirathan Oct 7, 2024
011494e
aws-wrapper dependency of std-aws is "provided".
Akirathan Oct 7, 2024
92bc7b4
Ensure aws-wrapper-assembly.jar gets into AWS/polyglot/java directory
Akirathan Oct 7, 2024
06ca5ce
Fix NoSuchElementException in JPMSUtils
Akirathan Oct 7, 2024
34dda82
Revert "aws-wrapper-assembly.jar gets into component directory."
Akirathan Oct 7, 2024
e788644
org.enso.std.aws exports org.enso.aws package
Akirathan Oct 7, 2024
644357d
slf4j is module dependency of aws-wrapper
Akirathan Oct 7, 2024
6c33fef
aws-wrapper depends on org.reactivestreams
Akirathan Oct 7, 2024
4c98a58
aws-wrapper uses its own service.
Akirathan Oct 7, 2024
e81e27c
Add some dependencies to aws-wrapper
Akirathan Oct 7, 2024
686f24d
Add necessary exports
Akirathan Oct 7, 2024
c5b1959
fmt
Akirathan Oct 7, 2024
2bd96d4
FileSystemSPI uses Lookup instead of ServiceLoader
Akirathan Oct 7, 2024
cf605cd
org.enso.std.aws provides DataLinkSPI.
Akirathan Oct 7, 2024
12ebe80
Better error message on duplicated service providers
Akirathan Oct 7, 2024
a31fb9c
Duplicate provider is just a warning
Akirathan Oct 7, 2024
77dc8de
List is easier to == than Array
JaroslavTulach Oct 8, 2024
6388881
runtime-integration-tests are loading classes with empty EnsoClassPath
JaroslavTulach Oct 8, 2024
00b47b4
Java.lookup_class has been removed
JaroslavTulach Oct 8, 2024
4173822
Using List() at the right places
JaroslavTulach Oct 8, 2024
f0c2ae4
std.table module isn't present in NI enso build
JaroslavTulach Oct 8, 2024
f11a26a
Use Lookup to lookup DatabaseConnectionDetailsSPI
JaroslavTulach Oct 8, 2024
b7f6542
An unexpected panic was thrown: (No_Such_Method.Error org.enso.base.n…
JaroslavTulach Oct 8, 2024
baeff36
Initialize ModuleLayer for a library sooner than a class is loaded fr…
JaroslavTulach Oct 8, 2024
a9bc32f
There is no runtime-fat-jar anymore
JaroslavTulach Oct 8, 2024
ec03e10
Add JDK_MODULES to small JDK of engine-runner native image
Akirathan Oct 8, 2024
1d4b172
Catch also ResolutionException
JaroslavTulach Oct 8, 2024
2bf4df1
Always add at least boot layer as parent
JaroslavTulach Oct 9, 2024
e8c220b
Make Tableau_Tests pass
JaroslavTulach Oct 9, 2024
bad898c
Bringing up-to-date with most recent develop
JaroslavTulach Oct 18, 2024
ee79b07
SQLServerDataLinkSPI is registered in module-info
JaroslavTulach Oct 18, 2024
6b1d504
Merge remote-tracking branch 'origin/develop' into wip/jtulach/ClassP…
JaroslavTulach Oct 21, 2024
4c46657
Backing out ec03e1080fbe19f7b7363206e876e72298bbc0f2
JaroslavTulach Oct 21, 2024
208d05d
Include chrome and DAP debugging tools in the enso executable
JaroslavTulach Oct 21, 2024
6d80539
Merge remote-tracking branch 'origin/develop' into wip/jtulach/ClassP…
JaroslavTulach Nov 22, 2024
986fb62
uses/provides instead of @ServiceProvider
JaroslavTulach Nov 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
- [Enforce conversion method return type][10468]
- [Renaming launcher executable to ensoup][10535]
- [Space-precedence does not apply to value-level operators][10597]
- [Must specify `--repl` to enable debug server][10709]

[10468]: https://github.com/enso-org/enso/pull/10468
[10535]: https://github.com/enso-org/enso/pull/10535
[10597]: https://github.com/enso-org/enso/pull/10597
[10709]: https://github.com/enso-org/enso/pull/10709

#### Enso IDE

Expand Down
139 changes: 121 additions & 18 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -3263,6 +3263,7 @@ val `std-snowflake-polyglot-root` =

lazy val `std-base` = project
.in(file("std-bits") / "base")
.enablePlugins(JPMSPlugin)
.settings(
frgaalJavaCompilerSetting,
autoScalaLibrary := false,
Expand All @@ -3272,10 +3273,30 @@ lazy val `std-base` = project
Compile / packageBin / artifactPath :=
`base-polyglot-root` / "std-base.jar",
libraryDependencies ++= Seq(
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion,
"org.netbeans.api" % "org-openide-util-lookup" % netbeansApiVersion % "provided",
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion,
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion
),
modulePath := {
val updateReport = (Compile / update).value
val requiredModIds = Seq(
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion,
"org.graalvm.sdk" % "collections" % graalMavenPackagesVersion,
"com.ibm.icu" % "icu4j" % icuVersion,
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-annotations" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-core" % jacksonVersion
)
val externalRequiredMods = JPMSUtils.filterModulesFromUpdate(
updateReport,
requiredModIds,
streams.value.log,
shouldContainAll = true
)
val ourRequiredMods =
(`common-polyglot-core-utils` / Compile / exportedProducts).value
.map(_.data)
externalRequiredMods ++ ourRequiredMods
},
Compile / packageBin := Def.task {
val result = (Compile / packageBin).value
val _ensureCoreIsCompiled =
Expand All @@ -3294,6 +3315,7 @@ lazy val `std-base` = project

lazy val `common-polyglot-core-utils` = project
.in(file("lib/scala/common-polyglot-core-utils"))
.enablePlugins(JPMSPlugin)
.settings(
frgaalJavaCompilerSetting,
autoScalaLibrary := false,
Expand All @@ -3302,7 +3324,17 @@ lazy val `common-polyglot-core-utils` = project
libraryDependencies ++= Seq(
"com.ibm.icu" % "icu4j" % icuVersion,
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion % "provided"
)
),
modulePath := {
JPMSUtils.filterModulesFromUpdate(
(Compile / update).value,
Seq(
"com.ibm.icu" % "icu4j" % icuVersion
),
streams.value.log,
shouldContainAll = true
)
}
)

lazy val `enso-test-java-helpers` = project
Expand Down Expand Up @@ -3373,6 +3405,7 @@ lazy val `benchmark-java-helpers` = project
lazy val `std-table` = project
.in(file("std-bits") / "table")
.enablePlugins(Antlr4Plugin)
.enablePlugins(JPMSPlugin)
.settings(
frgaalJavaCompilerSetting,
autoScalaLibrary := false,
Expand All @@ -3397,6 +3430,33 @@ lazy val `std-table` = project
"org.antlr" % "antlr4-runtime" % antlrVersion,
"org.apache.logging.log4j" % "log4j-to-slf4j" % "2.18.0" // org.apache.poi uses log4j
),
modulePath := {
val updateReport = (Compile / update).value
val requiredModIds = Seq(
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion,
"org.antlr" % "antlr4-runtime" % antlrVersion,
"com.univocity" % "univocity-parsers" % univocityParsersVersion,
"org.apache.poi" % "poi" % poiOoxmlVersion,
"org.apache.poi" % "poi-ooxml" % poiOoxmlVersion,
"org.apache.poi" % "poi-ooxml-lite" % poiOoxmlVersion,
"org.apache.xmlbeans" % "xmlbeans" % xmlbeansVersion,
"org.graalvm.sdk" % "collections" % graalMavenPackagesVersion,
"com.ibm.icu" % "icu4j" % icuVersion,
"org.netbeans.api" % "org-openide-util-lookup" % netbeansApiVersion
)
val externalRequiredMods = JPMSUtils.filterModulesFromUpdate(
updateReport,
requiredModIds,
streams.value.log,
shouldContainAll = true
)
val ourRequiredMods =
(`common-polyglot-core-utils` / Compile / exportedProducts).value
.map(_.data) ++
(`std-base` / Compile / exportedProducts).value
.map(_.data)
externalRequiredMods ++ ourRequiredMods
},
Compile / packageBin := Def.task {
val result = (Compile / packageBin).value
val _ = StdBits
Expand Down Expand Up @@ -3470,6 +3530,7 @@ lazy val `std-google-api` = project

lazy val `std-database` = project
.in(file("std-bits") / "database")
.enablePlugins(JPMSPlugin)
.settings(
frgaalJavaCompilerSetting,
autoScalaLibrary := false,
Expand All @@ -3479,11 +3540,29 @@ lazy val `std-database` = project
Compile / packageBin / artifactPath :=
`database-polyglot-root` / "std-database.jar",
libraryDependencies ++= Seq(
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion % "provided",
"org.netbeans.api" % "org-openide-util-lookup" % netbeansApiVersion % "provided",
"org.xerial" % "sqlite-jdbc" % sqliteVersion,
"org.postgresql" % "postgresql" % "42.4.0"
"org.graalvm.polyglot" % "polyglot" % graalMavenPackagesVersion % "provided",
"org.xerial" % "sqlite-jdbc" % sqliteVersion,
"org.postgresql" % "postgresql" % "42.4.0"
),
modulePath := {
val externalModIds = libraryDependencies.value ++ Seq(
"org.graalvm.sdk" % "collections" % graalMavenPackagesVersion,
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-annotations" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-core" % jacksonVersion
)
val externalMods = JPMSUtils.filterModulesFromUpdate(
(Compile / update).value,
externalModIds,
streams.value.log,
shouldContainAll = true
)
val ourMods =
(`std-base` / Compile / exportedProducts).value.map(_.data) ++
(`common-polyglot-core-utils` / Compile / exportedProducts).value
.map(_.data)
externalMods ++ ourMods
},
Compile / packageBin := Def.task {
val result = (Compile / packageBin).value
val _ = StdBits
Expand All @@ -3501,6 +3580,7 @@ lazy val `std-database` = project

lazy val `std-aws` = project
.in(file("std-bits") / "aws")
.enablePlugins(JPMSPlugin)
.settings(
frgaalJavaCompilerSetting,
autoScalaLibrary := false,
Expand All @@ -3510,17 +3590,40 @@ lazy val `std-aws` = project
Compile / packageBin / artifactPath :=
`std-aws-polyglot-root` / "std-aws.jar",
libraryDependencies ++= Seq(
"org.netbeans.api" % "org-openide-util-lookup" % netbeansApiVersion % "provided",
"com.amazon.redshift" % "redshift-jdbc42" % redshiftVersion,
"com.amazonaws" % "aws-java-sdk-core" % awsJavaSdkV1Version,
"com.amazonaws" % "aws-java-sdk-redshift" % awsJavaSdkV1Version,
"com.amazonaws" % "aws-java-sdk-sts" % awsJavaSdkV1Version,
"software.amazon.awssdk" % "auth" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "bom" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "s3" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "sso" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "ssooidc" % awsJavaSdkV2Version
"com.amazon.redshift" % "redshift-jdbc42" % redshiftVersion,
"com.amazonaws" % "aws-java-sdk-core" % awsJavaSdkV1Version,
"com.amazonaws" % "aws-java-sdk-redshift" % awsJavaSdkV1Version,
"com.amazonaws" % "aws-java-sdk-sts" % awsJavaSdkV1Version,
"software.amazon.awssdk" % "auth" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "bom" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "s3" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "sso" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "ssooidc" % awsJavaSdkV2Version
),
modulePath := {
val externalModIds = Seq(
"com.amazon.redshift" % "redshift-jdbc42" % redshiftVersion,
"software.amazon.awssdk" % "auth" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "s3" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "sso" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "ssooidc" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "http-client-spi" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "regions" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "sdk-core" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "profiles" % awsJavaSdkV2Version,
"software.amazon.awssdk" % "aws-core" % awsJavaSdkV2Version
)
val externalMods = JPMSUtils.filterModulesFromUpdate(
(Compile / update).value,
externalModIds,
streams.value.log,
shouldContainAll = true
)
val ourMods =
(`std-base` / Compile / exportedProducts).value.map(_.data) ++
(`std-database` / Compile / exportedProducts).value.map(_.data)
externalMods ++ ourMods
},
Compile / packageBin := Def.task {
val result = (Compile / packageBin).value
val _ = StdBits
Expand Down
3 changes: 3 additions & 0 deletions build/build/src/enso.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ impl BuiltEnso {
// This flag enables assertions in the JVM. Some of our stdlib tests had in the past
// failed on Graal/Truffle assertions, so we want to have them triggered.
.set_env(JAVA_OPTS, &ide_ci::programs::java::Option::EnableAssertions.as_ref())?;
if test_path.as_str().contains("_Internal_") {
command.arg("--disable-private-check");
}
Ok(command)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ private
polyglot java import java.io.PrintStream

# needed by Util_Spec
polyglot java import org.enso.base.text.CaseFoldedString
polyglot java import org.enso.base.text.CaseFoldedString as JCaseFoldedString
polyglot java import org.enso.base.text.CaseFoldedString.Grapheme

# needed by Comparator_Spec:
polyglot java import org.enso.base.ObjectComparator
polyglot java import org.enso.base.Text_Utils as JText_Utils
polyglot java import com.ibm.icu.text.BreakIterator as JBreakIterator

# often used in tests
polyglot java import java.util.ArrayList
Expand All @@ -26,6 +25,21 @@ polyglot java import java.math.BigInteger
polyglot java import java.time.LocalDate
polyglot java import java.time.LocalDateTime
polyglot java import java.util.function.Function
polyglot java import java.lang.Exception as JException
polyglot java import java.lang.Thread
polyglot java import java.lang.Thread.State
polyglot java import java.lang.Float

polyglot java import org.enso.base.Stream_Utils as JStream_Utils
polyglot java import org.enso.base.file_system.File_Utils as JFile_Utils
polyglot java import org.enso.base.CompareException as JCompareException
polyglot java import org.enso.base.ObjectComparator as JObjectComparator

Stream_Utils=JStream_Utils
File_Utils=JFile_Utils
CompareException=JCompareException
ObjectComparator=JObjectComparator
CaseFoldedString=JCaseFoldedString
Text_Utils=JText_Utils
BreakIterator=JBreakIterator
Exception=JException
3 changes: 1 addition & 2 deletions distribution/lib/Standard/Base/0.0.0-dev/src/Meta.enso
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import project.Error.Error as Base_Error
import project.Errors.Common.Not_Found
import project.Function.Function
import project.Nothing.Nothing
import project.Polyglot.Java
from project.Data.Boolean import Boolean, False, True
from project.Runtime.Managed_Resource import Managed_Resource

Expand Down Expand Up @@ -445,7 +444,7 @@ is_a value typ = @Builtin_Method "Meta.is_a"
java_instance_check value typ =
val_java = get_polyglot_language value == "java"
typ_java = get_polyglot_language typ == "java"
val_java && typ_java && Java.is_instance value typ
val_java && typ_java && typ.class.isInstance value

## PRIVATE
ADVANCED
Expand Down
47 changes: 0 additions & 47 deletions distribution/lib/Standard/Base/0.0.0-dev/src/Polyglot.enso
Original file line number Diff line number Diff line change
Expand Up @@ -132,50 +132,3 @@ type Polyglot
Returns the executable name of a polyglot object.
get_executable_name : Any -> Text
get_executable_name value = @Builtin_Method "Polyglot.get_executable_name"

## Utilities for working with Java polyglot objects.
type Java
## PRIVATE
ADVANCED
Adds the provided entry to the host class path.

Arguments:
- path: The java classpath entry to add.

Use of the actual polyglot imports system should be preferred to use of
this method.

> Example
Adding Random to the classpath.

Java.add_to_class_path "java.util.Random"
add_to_class_path : Text -> Nothing
add_to_class_path path = @Builtin_Method "Java.add_to_class_path"

## PRIVATE
ADVANCED
Looks up a java symbol on the classpath by name.

Arguments:
- name: The name of the java symbol to look up.

Use of the actual polyglot imports system should be preferred to use of
this method.

> Example
Look up java's Random class.

Java.lookup_class "java.util.Random"
lookup_class : Text -> Any
lookup_class name = @Builtin_Method "Java.lookup_class"

## PRIVATE
Checks whether an object is an instance of a given class.

Arguments:
- object: The object to check for class membership.
- class: The java class to check for membership in.
is_instance : Any -> Any -> Boolean
is_instance object class =
class_object = class.class
class_object.isInstance object
Loading