From 2887da64e0da815817f0bc383d3653cb40112d4c Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Sat, 29 Mar 2025 19:44:36 +0400 Subject: [PATCH] feat: added listOf, setOf and arrayOf functions + refactor: move print & shuffleArray functions to util package --- .../function/StandardFunctionManager.java | 6 +++-- .../impl/util/ScriptFunctionArrayOf.java | 25 ++++++++++++++++++ .../impl/util/ScriptFunctionListOf.java | 25 ++++++++++++++++++ .../impl/{ => util}/ScriptFunctionPrint.java | 2 +- .../impl/util/ScriptFunctionSetOf.java | 26 +++++++++++++++++++ .../ScriptFunctionShuffleArray.java | 2 +- 6 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java create mode 100644 core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java rename core/src/main/java/com/instancify/scriptify/core/script/function/impl/{ => util}/ScriptFunctionPrint.java (92%) create mode 100644 core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java rename core/src/main/java/com/instancify/scriptify/core/script/function/impl/{ => util}/ScriptFunctionShuffleArray.java (95%) diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java index a241662..ac7bd6b 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/StandardFunctionManager.java @@ -2,8 +2,7 @@ import com.instancify.scriptify.api.script.function.ScriptFunction; import com.instancify.scriptify.api.script.function.ScriptFunctionManager; -import com.instancify.scriptify.core.script.function.impl.ScriptFunctionPrint; -import com.instancify.scriptify.core.script.function.impl.ScriptFunctionShuffleArray; +import com.instancify.scriptify.core.script.function.impl.util.*; import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionBase64Decode; import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionBase64Encode; import com.instancify.scriptify.core.script.function.impl.crypto.ScriptFunctionMD5; @@ -51,6 +50,9 @@ public StandardFunctionManager() { this.register(new ScriptFunctionExecCommand()); this.register(new ScriptFunctionEnv()); this.register(new ScriptFunctionShuffleArray()); + this.register(new ScriptFunctionListOf()); + this.register(new ScriptFunctionSetOf()); + this.register(new ScriptFunctionArrayOf()); } @Override diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java new file mode 100644 index 0000000..8cb8a84 --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionArrayOf.java @@ -0,0 +1,25 @@ +package com.instancify.scriptify.core.script.function.impl.util; + +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; + +/** + * Represents a function to create an array from the passed arguments + */ +public class ScriptFunctionArrayOf implements ScriptFunction { + + @Override + public @NotNull String getName() { + return "arrayOf"; + } + + @Override + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { + return Arrays.stream(args).map(ScriptFunctionArgument::getValue).toArray(); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java new file mode 100644 index 0000000..79b3221 --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionListOf.java @@ -0,0 +1,25 @@ +package com.instancify.scriptify.core.script.function.impl.util; + +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; + +/** + * Represents a function to create a list from the passed arguments + */ +public class ScriptFunctionListOf implements ScriptFunction { + + @Override + public @NotNull String getName() { + return "listOf"; + } + + @Override + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { + return Arrays.stream(args).map(ScriptFunctionArgument::getValue).toList(); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java similarity index 92% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java index 7da002e..a0ff55c 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionPrint.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionPrint.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.util; import com.instancify.scriptify.api.script.Script; import com.instancify.scriptify.api.script.function.ScriptFunction; diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java new file mode 100644 index 0000000..ef26939 --- /dev/null +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionSetOf.java @@ -0,0 +1,26 @@ +package com.instancify.scriptify.core.script.function.impl.util; + +import com.instancify.scriptify.api.exception.ScriptFunctionException; +import com.instancify.scriptify.api.script.Script; +import com.instancify.scriptify.api.script.function.ScriptFunction; +import com.instancify.scriptify.api.script.function.argument.ScriptFunctionArgument; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * Represents a function to create a set from the passed arguments + */ +public class ScriptFunctionSetOf implements ScriptFunction { + + @Override + public @NotNull String getName() { + return "setOf"; + } + + @Override + public Object invoke(Script script, ScriptFunctionArgument[] args) throws ScriptFunctionException { + return Arrays.stream(args).map(ScriptFunctionArgument::getValue).collect(Collectors.toUnmodifiableSet()); + } +} diff --git a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java similarity index 95% rename from core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java rename to core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java index 9a86472..6aa22bf 100644 --- a/core/src/main/java/com/instancify/scriptify/core/script/function/impl/ScriptFunctionShuffleArray.java +++ b/core/src/main/java/com/instancify/scriptify/core/script/function/impl/util/ScriptFunctionShuffleArray.java @@ -1,4 +1,4 @@ -package com.instancify.scriptify.core.script.function.impl; +package com.instancify.scriptify.core.script.function.impl.util; import com.instancify.scriptify.api.exception.ScriptFunctionArgTypeException; import com.instancify.scriptify.api.exception.ScriptFunctionArgsCountException;