Skip to content

Commit e2deaa8

Browse files
authored
Ensure wildcard imports work against JRE classes (#5117)
Also updates our classgraph build, in case we were affected by Java 17 issues. Fixes #4994
1 parent e4d69fd commit e2deaa8

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

engine/table/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ dependencies {
3333
// TODO(deephaven-core#3204): t-digest 3.3 appears to have higher errors than 3.2
3434
implementation 'com.tdunning:t-digest:3.2'
3535
implementation 'com.squareup:javapoet:1.13.0'
36-
implementation 'io.github.classgraph:classgraph:4.8.154'
36+
implementation 'io.github.classgraph:classgraph:4.8.165'
3737

3838
implementation project(':plugin')
3939
implementation depCommonsLang3

engine/table/src/main/java/io/deephaven/engine/util/GroovyDeephavenSession.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,8 @@ private Optional<GroovyImport> createClassImport(boolean isWildcard, String body
557557
}
558558

559559
private static boolean packageIsVisibleToClassGraph(String packageImport) {
560-
try (ScanResult scanResult = new ClassGraph().enableClassInfo().acceptPackages(packageImport).scan()) {
560+
try (ScanResult scanResult =
561+
new ClassGraph().enableClassInfo().enableSystemJarsAndModules().acceptPackages(packageImport).scan()) {
561562
final Optional<ClassInfo> firstClassFound = scanResult.getAllClasses().stream().findFirst();
562563
// force load the class so that the jvm is aware of the package
563564
firstClassFound.ifPresent(ClassInfo::loadClass);

engine/table/src/test/java/io/deephaven/engine/util/scripts/TestGroovyDeephavenSession.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.IOException;
2828
import java.util.Arrays;
2929
import java.util.Optional;
30+
import java.util.Set;
3031

3132
import static org.junit.Assert.assertArrayEquals;
3233
import static org.junit.Assert.assertEquals;
@@ -130,13 +131,14 @@ public void testScriptResultOrder() {
130131

131132
@Test
132133
public void testUnloadedWildcardPackageImport() {
133-
// it's unlikely we have loaded anything from this groovy package
134-
final String packageString = "groovy.time";
135-
136-
if (this.getClass().getClassLoader().getDefinedPackage(packageString) != null) {
137-
Assert.fail("Package '" + packageString + "' is already loaded, test with a more obscure package.");
134+
// Pick three packages we won't have loaded directly - a JRE package, a third party package (from a jar), and a
135+
// package in the current source set
136+
for (String packageString : Set.of("java.util", "groovy.time", "io.deephaven.engine.util.scripts.wontbeused")) {
137+
if (this.getClass().getClassLoader().getDefinedPackage(packageString) != null) {
138+
Assert.fail("Package '" + packageString + "' is already loaded, test with a more obscure package.");
139+
}
140+
session.evaluateScript("import " + packageString + ".*").throwIfError();
138141
}
139-
session.evaluateScript("import " + packageString + ".*").throwIfError();
140142
}
141143

142144
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**
2+
* Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending
3+
*/
4+
package io.deephaven.engine.util.scripts.wontbeused;
5+
6+
/**
7+
* Deliberately unused class so that we have a package that can be tested by
8+
* {@link io.deephaven.engine.util.scripts.TestGroovyDeephavenSession}.
9+
*/
10+
public class WontBeUsed {
11+
}

0 commit comments

Comments
 (0)