From f7e3d18c5f2c20e8bfb706b60a2a999c250b1df9 Mon Sep 17 00:00:00 2001 From: Giuseppe Villani Date: Tue, 22 Aug 2023 11:39:54 +0200 Subject: [PATCH] Fixes #3640: Custom procedures declaration fails in 5.9.0 (#3647) (#3730) --- .../apoc/custom/CypherProceduresHandler.java | 2 +- .../src/main/java/apoc/custom/Signatures.java | 81 ++++--------------- 2 files changed, 18 insertions(+), 65 deletions(-) diff --git a/extended/src/main/java/apoc/custom/CypherProceduresHandler.java b/extended/src/main/java/apoc/custom/CypherProceduresHandler.java index 771835bd29..13c84ec9f0 100644 --- a/extended/src/main/java/apoc/custom/CypherProceduresHandler.java +++ b/extended/src/main/java/apoc/custom/CypherProceduresHandler.java @@ -173,13 +173,13 @@ private ProcedureDescriptor procedureDescriptor(Node node) { Mode.valueOf((String) node.getProperty(ExtendedSystemPropertyKeys.mode.name())), false, null, - new String[0], description, null, false, false, false, false, + false, false), statement); } diff --git a/extended/src/main/java/apoc/custom/Signatures.java b/extended/src/main/java/apoc/custom/Signatures.java index cc030d8735..5ef81dc637 100644 --- a/extended/src/main/java/apoc/custom/Signatures.java +++ b/extended/src/main/java/apoc/custom/Signatures.java @@ -5,7 +5,6 @@ import org.neo4j.internal.kernel.api.procs.*; import org.neo4j.procedure.Mode; -import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -85,11 +84,10 @@ public ProcedureSignature toProcedureSignature(SignatureParser.ProcedureContext List inputSignatures = signature.parameter().stream().map(p -> getInputField(name(p.name()), type(p.type()), defaultValue(p.defaultValue(), type(p.type())))).collect(Collectors.toList()); boolean admin = false; String deprecated = ""; - String[] allowed = new String[0]; String warning = null; // "todo warning"; boolean eager = false; boolean caseInsensitive = true; - return createProcedureSignature(name, inputSignatures, outputSignature, mode, admin, deprecated, allowed, description, warning, eager, caseInsensitive, false, false, false); + return createProcedureSignature(name, inputSignatures, outputSignature, mode, admin, deprecated, description, warning, eager, caseInsensitive, false, false, false, false); } public List namespace(SignatureParser.NamespaceContext namespaceContext) { @@ -237,72 +235,27 @@ public static ProcedureSignature createProcedureSignature(QualifiedName name, Mode mode, boolean admin, String deprecated, - String[] allowed, String description, String warning, boolean eager, boolean caseInsensitive, boolean systemProcedure, boolean internal, - boolean allowExpiredCredentials) { - try { - // in Neo4j 4.0.5 org.neo4j.internal.kernel.api.procs.ProcedureSignature - // changed the signature adding a boolean at the end and without leaving the old signature - // in order to maintain the backwards compatibility with version prior to 4.0.5 we use the - // reflection to create a new instance of the class - // in Neo4j 4.3 another boolean was added - final Class clazz = Class.forName("org.neo4j.internal.kernel.api.procs.ProcedureSignature"); - final Constructor[] constructors = clazz.getConstructors(); - for (int i = 0; i < constructors.length; i++) { - final Constructor constructor = constructors[i]; - switch (constructor.getParameterCount()) { - case 14: - return (ProcedureSignature) constructor.newInstance(name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - allowed, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal, - allowExpiredCredentials); - case 13: - return (ProcedureSignature) constructor.newInstance(name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - allowed, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal); - case 12: - return (ProcedureSignature) constructor.newInstance(name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - allowed, - description, - warning, - eager, - caseInsensitive, - systemProcedure); - } - } - throw new RuntimeException("Constructor of org.neo4j.internal.kernel.api.procs.ProcedureSignature not found"); - } catch (Exception e) { - throw new RuntimeException(e); - } + boolean allowExpiredCredentials, + boolean threadSafe) { + return new ProcedureSignature(name, + inputSignature, + outputSignature, + mode, + admin, + deprecated, + description, + warning, + eager, + caseInsensitive, + systemProcedure, + internal, + allowExpiredCredentials, + threadSafe); } }