diff --git a/processor/src/main/java/apoc/processor/ExtensionClassWriter.java b/processor/src/main/java/apoc/processor/ExtensionClassWriter.java index 6802e0837..03e963198 100644 --- a/processor/src/main/java/apoc/processor/ExtensionClassWriter.java +++ b/processor/src/main/java/apoc/processor/ExtensionClassWriter.java @@ -8,7 +8,10 @@ import com.squareup.javapoet.TypeSpec; import javax.annotation.processing.Filer; +import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; +import javax.tools.FileObject; +import javax.tools.StandardLocation; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +28,10 @@ public void write(List procedureSignatures, List userFunctionSignatures) { try { - JavaFile.builder("apoc", defineClass(procedureSignatures, userFunctionSignatures)) + String suffix = isExtendedProject() ? "Extended" : ""; + final TypeSpec typeSpec = defineClass(procedureSignatures, userFunctionSignatures, suffix); + + JavaFile.builder("apoc", typeSpec) .build() .writeTo(filer); } catch (IOException e) { @@ -33,8 +39,17 @@ public void write(List procedureSignatures, } } - private TypeSpec defineClass(List procedureSignatures, List userFunctionSignatures) { - return TypeSpec.classBuilder("ApocSignatures") + private boolean isExtendedProject() throws IOException { + // create and delete a file to retrieve the current project path (e.g `ROOT/../core/build/generated/.../tmp`) + FileObject resource = filer.createResource(StandardLocation.SOURCE_OUTPUT, "", "tmp", (Element[]) null); + String projectPath = resource.getName(); + resource.delete(); + + return projectPath.contains("extended/build/generated"); + } + + private TypeSpec defineClass(List procedureSignatures, List userFunctionSignatures, String suffix) { + return TypeSpec.classBuilder("ApocSignatures" + suffix) .addModifiers(Modifier.PUBLIC) .addField(signatureListField("PROCEDURES", procedureSignatures)) .addField(signatureListField("FUNCTIONS", userFunctionSignatures)) @@ -57,4 +72,4 @@ private String placeholders(List signatures) { // FIXME: find a way to manage the indentation automatically return signatures.stream().map((ignored) -> "$S").collect(Collectors.joining(",\n\t\t")); } -} +} \ No newline at end of file diff --git a/test-utils/src/main/java/apoc/util/TestContainerUtil.java b/test-utils/src/main/java/apoc/util/TestContainerUtil.java index 0e7107ac6..6f7880d27 100644 --- a/test-utils/src/main/java/apoc/util/TestContainerUtil.java +++ b/test-utils/src/main/java/apoc/util/TestContainerUtil.java @@ -3,6 +3,7 @@ import com.github.dockerjava.api.exception.NotFoundException; import java.time.Duration; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.filefilter.WildcardFileFilter; import org.apache.commons.lang3.exception.ExceptionUtils; import org.gradle.tooling.BuildLauncher; @@ -46,9 +47,10 @@ public enum ApocPackage { private TestContainerUtil() {} - private static File baseDir = Paths.get("..").toFile(); + public static File baseDir = Paths.get("..").toFile(); + public static File pluginsFolder = new File(baseDir, "build/plugins"); private static File coreDir = new File(baseDir, System.getProperty("coreDir")); - private static File extendedDir = new File(baseDir, "extended"); + public static File extendedDir = new File(baseDir, "extended"); public static String dockerImageForNeo4j(Neo4jVersion version) { if (version == Neo4jVersion.COMMUNITY) @@ -84,7 +86,6 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap dockerImage = neo4jCommunityDockerImageVersion; } - File pluginsFolder = new File(baseDir, "build/plugins"); try { FileUtils.deleteDirectory( pluginsFolder ); } catch (IOException e) { @@ -113,14 +114,7 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap executeGradleTasks(projectDir, "shadowJar"); - Collection files = FileUtils.listFiles(new File(projectDir, "build/libs"), new WildcardFileFilter(Arrays.asList("*-extended.jar", "*-core.jar")), null); - for (File file: files) { - try { - FileUtils.copyFileToDirectory(file, pluginsFolder); - } catch (IOException e) { - throw new RuntimeException(e); - } - } + copyFilesToPlugin(new File(projectDir, "build/libs"), new WildcardFileFilter(Arrays.asList("*-extended.jar", "*-core.jar")), pluginsFolder); } System.out.println("neo4jDockerImageVersion = " + dockerImage); @@ -165,6 +159,17 @@ private static Neo4jContainerExtension createNeo4jContainer(List ap return neo4jContainer.withWaitForNeo4jDatabaseReady(password, version); } + public static void copyFilesToPlugin(File directory, IOFileFilter instance, File pluginsFolder) { + Collection files = FileUtils.listFiles(directory, instance, null); + for (File file: files) { + try { + FileUtils.copyFileToDirectory(file, pluginsFolder); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + public static void executeGradleTasks(File baseDir, String... tasks) { try (ProjectConnection connection = GradleConnector.newConnector() .forProjectDirectory(baseDir)