Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e18b3c8

Browse files
committed
move to actual API pt 2
1 parent a6e7f55 commit e18b3c8

File tree

9 files changed

+78
-30
lines changed

9 files changed

+78
-30
lines changed

src/main/java/ch/njol/skript/lang/function/Function.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
/**
1717
* Functions can be called using arguments.
1818
*/
19-
public abstract class Function<T> {
19+
public abstract class Function<T> implements org.skriptlang.skript.common.function.Function<T> {
2020

2121
/**
2222
* Execute functions even when some parameters are not present.
@@ -38,6 +38,11 @@ public Signature<T> getSignature() {
3838
return sign;
3939
}
4040

41+
@Override
42+
public org.skriptlang.skript.common.function.@NotNull Signature<T> signature() {
43+
return sign;
44+
}
45+
4146
public String getName() {
4247
return sign.getName();
4348
}

src/main/java/ch/njol/skript/lang/function/Functions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ public static DefaultFunction<?> register(DefaultFunction<?> function) {
6868
if (!name.matches(functionNamePattern))
6969
throw new SkriptAPIException("Invalid function name '%s'".formatted(name));
7070

71-
javaNamespace.addSignature(function.signature());
72-
javaNamespace.addFunction(function);
71+
javaNamespace.addSignature((Signature<?>) function.signature());
72+
javaNamespace.addFunction((Function<?>) function);
7373
globalFunctions.put(function.name(), javaNamespace);
7474

75-
FunctionRegistry.getRegistry().register(null, function);
75+
FunctionRegistry.getRegistry().register(null, (Function<?>) function);
7676

7777
return function;
7878
}

src/main/java/ch/njol/skript/lang/function/Signature.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
/**
1616
* Function signature: name, parameter types and a return type.
1717
*/
18-
public class Signature<T> {
19-
18+
public class Signature<T> implements org.skriptlang.skript.common.function.Signature<T> {
19+
2020
/**
2121
* Name of the script that the function is inside.
2222
*/
2323
final @Nullable String script;
24-
24+
2525
/**
2626
* Name of function this refers to.
2727
*/
2828
final String name; // Stored for hashCode
29-
29+
3030
/**
3131
* Parameters taken by this function, in order.
3232
*/
@@ -43,13 +43,13 @@ public class Signature<T> {
4343
* to Skript's type system.
4444
*/
4545
final @Nullable ClassInfo<T> returnType;
46-
46+
4747
/**
4848
* Whether this function returns a single value, or multiple ones.
4949
* Unspecified and unused when {@link #returnType} is null.
5050
*/
5151
final boolean single;
52-
52+
5353
/**
5454
* References (function calls) to function with this signature.
5555
*/
@@ -160,12 +160,12 @@ public Signature(String script, String name, Parameter<?>[] parameters, boolean
160160
public String getName() {
161161
return name;
162162
}
163-
163+
164164
@SuppressWarnings("null")
165165
public Parameter<?> getParameter(int index) {
166166
return parameters[index];
167167
}
168-
168+
169169
public Parameter<?>[] getParameters() {
170170
return parameters;
171171
}
@@ -177,7 +177,7 @@ public boolean isLocal() {
177177
public @Nullable ClassInfo<T> getReturnType() {
178178
return returnType;
179179
}
180-
180+
181181
public boolean isSingle() {
182182
return single;
183183
}
@@ -202,7 +202,7 @@ public String getOriginClassPath() {
202202
public int getMaxParameters() {
203203
return parameters.length;
204204
}
205-
205+
206206
/**
207207
* Gets minimum number of parameters that the function described by this
208208
* signature is able to take. Parameters that have default values and do
@@ -216,7 +216,7 @@ public int getMinParameters() {
216216
}
217217
return 0; // No-args function
218218
}
219-
219+
220220
@Override
221221
public int hashCode() {
222222
return name.hashCode();

src/main/java/org/skriptlang/skript/common/function/DefaultFunction.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import org.skriptlang.skript.addon.SkriptAddon;
88
import org.skriptlang.skript.common.function.Parameter.Modifier;
99

10-
import java.util.function.Function;
11-
1210
/**
1311
* A function that has been implemented in Java, instead of in Skript.
1412
* <p>
@@ -34,7 +32,8 @@
3432
* @param <T> The return type.
3533
* @see #builder(SkriptAddon, String, Class)
3634
*/
37-
public sealed interface DefaultFunction<T> extends Documentable
35+
public sealed interface DefaultFunction<T>
36+
extends Function<T>, Documentable
3837
permits DefaultFunctionImpl {
3938

4039
/**
@@ -135,7 +134,7 @@ interface Builder<T> {
135134
* @param execute The code to execute.
136135
* @return The final function.
137136
*/
138-
DefaultFunction<T> build(@NotNull Function<FunctionArguments, T> execute);
137+
DefaultFunction<T> build(@NotNull java.util.function.Function<FunctionArguments, T> execute);
139138

140139
}
141140

src/main/java/org/skriptlang/skript/common/function/DefaultFunctionImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ public boolean resetReturnValue() {
131131
return source;
132132
}
133133

134+
@Override
135+
public org.skriptlang.skript.common.function.@NotNull Signature<T> signature() {
136+
return getSignature();
137+
}
138+
134139
static class BuilderImpl<T> implements DefaultFunctionImpl.Builder<T> {
135140

136141
private final SkriptAddon source;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.skriptlang.skript.common.function;
2+
3+
import org.jetbrains.annotations.ApiStatus.NonExtendable;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
/**
7+
* Represents a function implementation.
8+
*
9+
* <h2>This interface should only be extended by {@link DefaultFunction} and {@link ch.njol.skript.lang.function.Function}</h2>
10+
* <p>It will contain methods when Function has been properly reworked.</p>
11+
*/
12+
@NonExtendable
13+
public interface Function<T> {
14+
15+
/**
16+
* @return The signature belonging to this function.
17+
*/
18+
@NotNull Signature<T> signature();
19+
20+
}

src/main/java/org/skriptlang/skript/common/function/FunctionArguments.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ public sealed interface FunctionArguments
7878
*
7979
* @return All argument names.
8080
*/
81-
@Unmodifiable
82-
@NotNull Set<String> names();
81+
@Unmodifiable @NotNull Set<String> names();
8382

8483
/**
8584
* Checks whether the argument is present.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.skriptlang.skript.common.function;
2+
3+
import org.jetbrains.annotations.ApiStatus.NonExtendable;
4+
5+
/**
6+
* Represents a function signature.
7+
*
8+
* <h2>This interface should only be extended by {@link ch.njol.skript.lang.function.Signature}.</h2>
9+
* <p>It will contain methods when Signature has been properly reworked.</p>
10+
*/
11+
@NonExtendable
12+
public interface Signature<T> {
13+
14+
}

src/test/java/org/skriptlang/skript/common/function/DefaultFunctionTest.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import ch.njol.skript.Skript;
44
import ch.njol.skript.classes.ClassInfo;
5+
import ch.njol.skript.lang.function.FunctionEvent;
6+
import ch.njol.skript.lang.function.Signature;
57
import ch.njol.skript.registrations.Classes;
68
import ch.njol.util.StringUtils;
79
import org.junit.Test;
@@ -29,14 +31,16 @@ public void testStrings() {
2931
return StringUtils.join(xes, ",");
3032
});
3133

32-
assertEquals("test", built.getName());
33-
assertEquals(String.class, built.getReturnType().getC());
34-
assertTrue(built.isSingle());
34+
Signature<?> signature = (Signature<?>) built.signature();
35+
36+
assertEquals("test", signature.getName());
37+
assertEquals(String.class, signature.getReturnType().getC());
38+
assertTrue(signature.isSingle());
3539
assertArrayEquals(new String[]{}, built.description().toArray(new String[0]));
3640
assertArrayEquals(new String[]{}, built.since().toArray(new String[0]));
3741
assertArrayEquals(new String[]{}, built.keywords().toArray(new String[0]));
3842

39-
Parameter<?>[] parameters = built.getParameters();
43+
Parameter<?>[] parameters = signature.getParameters();
4044

4145
assertEquals(new ch.njol.skript.lang.function.Parameter<>("x", getClassInfo(String[].class), false, null, false, true), parameters[0]);
4246
}
@@ -51,19 +55,21 @@ public void testObjectArrays() {
5155
.parameter("y", Boolean.class)
5256
.build(args -> new Object[]{true, 1});
5357

54-
assertEquals("test", built.getName());
55-
assertEquals(Object.class, built.getReturnType().getC());
56-
assertFalse(built.isSingle());
58+
Signature<?> signature = (Signature<?>) built.signature();
59+
60+
assertEquals("test", signature.getName());
61+
assertEquals(Object.class, signature.getReturnType().getC());
62+
assertFalse(signature.isSingle());
5763
assertArrayEquals(new String[]{"x", "y"}, built.description().toArray(new String[0]));
5864
assertArrayEquals(new String[]{"1", "2"}, built.since().toArray(new String[0]));
5965
assertArrayEquals(new String[]{"x", "y"}, built.keywords().toArray(new String[0]));
6066

61-
Parameter<?>[] parameters = built.getParameters();
67+
Parameter<?>[] parameters = signature.getParameters();
6268

6369
assertEquals(new ch.njol.skript.lang.function.Parameter<>("x", getClassInfo(Object[].class), false, null, false, true), parameters[0]);
6470
assertEquals(new ch.njol.skript.lang.function.Parameter<>("y", getClassInfo(Boolean.class), true, null), parameters[1]);
6571

66-
Object[] execute = built.execute(consign(new Object[]{1, 2, 3}, new Boolean[]{true}));
72+
Object[] execute = built.execute(new FunctionEvent<>(built), consign(new Object[]{1, 2, 3}, new Boolean[]{true}));
6773

6874
assertArrayEquals(new Object[]{true, 1}, execute);
6975

0 commit comments

Comments
 (0)