From cc24f79d47ef260be12a4ca583186ea12907cfdc Mon Sep 17 00:00:00 2001 From: altrisi Date: Wed, 8 Mar 2023 20:26:43 +0100 Subject: [PATCH] Allow scarpet function name to be different to annotated method name --- .../java/carpet/script/annotation/AnnotationParser.java | 8 +++++--- .../java/carpet/script/annotation/ScarpetFunction.java | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/carpet/script/annotation/AnnotationParser.java b/src/main/java/carpet/script/annotation/AnnotationParser.java index 9c5b6a66..a5512d55 100644 --- a/src/main/java/carpet/script/annotation/AnnotationParser.java +++ b/src/main/java/carpet/script/annotation/AnnotationParser.java @@ -77,6 +77,7 @@ import carpet.script.value.Value; public final class AnnotationParser { static final int UNDEFINED_PARAMS = -2; + static final String USE_METHOD_NAME = "$METHOD_NAME_MARKER$"; private static final List functionList = new ArrayList<>(); /** @@ -172,7 +173,8 @@ public final class AnnotationParser private ParsedFunction(Method method, Class originClass, Supplier instance) { - this.name = method.getName(); + ScarpetFunction annotation = method.getAnnotation(ScarpetFunction.class); + this.name = annotation.functionName() == USE_METHOD_NAME ? method.getName() : annotation.functionName(); this.isMethodVarArgs = method.isVarArgs(); this.methodParamCount = method.getParameterCount(); @@ -199,7 +201,7 @@ public final class AnnotationParser int setMaxParams = this.minParams; // Unlimited == Integer.MAX_VALUE if (this.isEffectivelyVarArgs) { - setMaxParams = method.getAnnotation(ScarpetFunction.class).maxParams(); + setMaxParams = annotation.maxParams(); if (setMaxParams == UNDEFINED_PARAMS) { throw new IllegalArgumentException("No maximum number of params specified for " + name + ", use ScarpetFunction.UNLIMITED_PARAMS for unlimited. " @@ -237,7 +239,7 @@ public final class AnnotationParser } this.scarpetParamCount = this.isEffectivelyVarArgs ? -1 : this.minParams; - this.contextType = method.getAnnotation(ScarpetFunction.class).contextType(); + this.contextType = annotation.contextType(); } @Override diff --git a/src/main/java/carpet/script/annotation/ScarpetFunction.java b/src/main/java/carpet/script/annotation/ScarpetFunction.java index c4ad698f..aada5f0b 100644 --- a/src/main/java/carpet/script/annotation/ScarpetFunction.java +++ b/src/main/java/carpet/script/annotation/ScarpetFunction.java @@ -75,6 +75,15 @@ public @interface ScarpetFunction */ int maxParams() default AnnotationParser.UNDEFINED_PARAMS; + /** + *

The name of the function in Scarpet, that by default will be the method name.

+ * + *

The convention in Scarpet is to use names in snake case.

+ * + * @return The name for this function in Scarpet + */ + String functionName() default AnnotationParser.USE_METHOD_NAME; + /** *

Defines the Context Type that will be used when evaluating arguments to annotated methods.

*