fix loader

This commit is contained in:
Zoltan Haindrich 2024-06-18 15:43:35 +00:00
parent 9df6f3341a
commit e725df7110
3 changed files with 63 additions and 2 deletions

View File

@ -429,11 +429,13 @@
<type>test-jar</type> <type>test-jar</type>
<version>${project.parent.version}</version> <version>${project.parent.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.druid</groupId> <groupId>org.apache.druid.extensions</groupId>
<artifactId>druid-datasketches</artifactId> <artifactId>druid-datasketches</artifactId>
<type>test-jar</type> <type>test-jar</type>
<version>${project.parent.version}</version> <version>${project.parent.version}</version>
<scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -19,10 +19,20 @@
package org.apache.druid.quidem; package org.apache.druid.quidem;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.apache.druid.sql.calcite.util.SqlTestFramework.QueryComponentSupplier;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail; import static org.junit.jupiter.api.Assertions.fail;
@ -51,4 +61,41 @@ public class QTest extends DruidQuidemTestBase
} }
} }
} }
@Test
public void testQTest() throws Exception
{
LoadingCache<String, Set<Class<? extends QueryComponentSupplier>>> componentSupplierClassCache = CacheBuilder
.newBuilder()
.build(new CacheLoader<String, Set<Class<? extends QueryComponentSupplier>>>()
{
@Override
public Set<Class<? extends QueryComponentSupplier>> load(String pkg) throws MalformedURLException
{
return new Reflections(
new ConfigurationBuilder()
// .addUrls(ClasspathHelper.forPackage(pkg,
// getClass().getClassLoader()))
// .addClassLoaders(getClass().getClassLoader().getParent())
.setScanners(
new SubTypesScanner(true)
)
.filterInputsBy(
new FilterBuilder().includePackage(pkg).and(
s -> s.contains("ComponentSupplier")
)
)
.setUrls(org.reflections.util.ClasspathHelper.forJavaClassPath())
)
.getSubTypesOf(QueryComponentSupplier.class);
}
});
Set<Class<? extends QueryComponentSupplier>> a = componentSupplierClassCache.get("");
throw new RuntimeException("X" + a);
}
} }

View File

@ -42,7 +42,11 @@ import org.apache.http.client.utils.URLEncodedUtils;
import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ExtensionContext;
import org.reflections.Configuration;
import org.reflections.Reflections; import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -506,7 +510,15 @@ public class SqlTestFrameworkConfig
@Override @Override
public Set<Class<? extends QueryComponentSupplier>> load(String pkg) public Set<Class<? extends QueryComponentSupplier>> load(String pkg)
{ {
return new Reflections(pkg).getSubTypesOf(QueryComponentSupplier.class); Configuration cfg = new ConfigurationBuilder()
.setScanners(new SubTypesScanner(true))
.setUrls(org.reflections.util.ClasspathHelper.forJavaClassPath())
.filterInputsBy(
new FilterBuilder()
.includePackage(pkg)
.and(s -> s.contains("ComponentSupplier"))
);
return new Reflections(cfg).getSubTypesOf(QueryComponentSupplier.class);
} }
}); });