Skip to content

Commit bcf6a4d

Browse files
authored
Registration API Compatibility (#130)
1 parent b62ccaa commit bcf6a4d

31 files changed

+322
-196
lines changed

.github/workflows/gradle.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- name: Set up JDK 11
1616
uses: actions/setup-java@v1
1717
with:
18-
java-version: 11
18+
java-version: 17
1919
- name: Grant execute permission for gradlew
2020
run: chmod +x gradlew
2121
- name: Build with Gradle
@@ -36,7 +36,7 @@ jobs:
3636
path: extra-plugins/
3737
merge-multiple: true
3838
- name: Run tests
39-
uses: SkriptLang/skript-test-action@v1.1
39+
uses: SkriptLang/skript-test-action@v1.2
4040
with:
4141
test_script_directory: src/test/scripts
4242
extra_plugins_directory: extra-plugins/

build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ processResources {
2828
}
2929

3030
compileJava {
31-
sourceCompatibility = '11'
32-
targetCompatibility = '11'
31+
sourceCompatibility = '17'
32+
targetCompatibility = '17'
3333
options.encoding = 'UTF-8'
3434
}
3535

3636
dependencies {
3737
implementation 'org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT'
38-
implementation 'com.github.SkriptLang:Skript:2.9.0'
38+
implementation 'com.github.SkriptLang:Skript:2.10.0'
3939
implementation 'org.eclipse.jdt:org.eclipse.jdt.annotation:1.1.0'
4040
}

src/main/java/com/btk5h/skriptmirror/ParseOrderWorkarounds.java

+39-11
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,25 @@
22

33
import ch.njol.skript.Skript;
44
import ch.njol.skript.effects.EffReturn;
5-
import ch.njol.util.Checker;
5+
import org.skriptlang.reflect.syntax.CustomSyntaxStructure;
66
import org.skriptlang.reflect.syntax.condition.elements.CustomCondition;
7+
import org.skriptlang.reflect.syntax.condition.elements.StructCustomCondition;
78
import org.skriptlang.reflect.syntax.effect.elements.CustomEffect;
9+
import org.skriptlang.reflect.syntax.effect.elements.StructCustomEffect;
810
import org.skriptlang.reflect.syntax.expression.elements.CustomExpression;
911
import com.btk5h.skriptmirror.skript.EffExpressionStatement;
1012
import com.btk5h.skriptmirror.skript.custom.ExprMatchedPattern;
1113
import com.btk5h.skriptmirror.util.SkriptReflection;
14+
import org.skriptlang.reflect.syntax.expression.elements.StructCustomExpression;
15+
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
16+
import org.skriptlang.skript.registration.SyntaxInfo;
17+
import org.skriptlang.skript.registration.SyntaxRegistry;
18+
import org.skriptlang.skript.util.Priority;
1219

20+
import javax.naming.ServiceUnavailableException;
1321
import java.util.Collection;
1422
import java.util.Optional;
23+
import java.util.function.Predicate;
1524

1625
/**
1726
* Explicitly declares the relative parse orders of different statement types. Classes at the start of the list should
@@ -20,7 +29,11 @@
2029
* This class should only be used to guarantee that skript-mirror's syntax is parsed before other addons. It cannot
2130
* guarantee that another addon's syntax will be parsed before skript-reflect.
2231
*/
32+
@SuppressWarnings("UnstableApiUsage")
2333
public class ParseOrderWorkarounds {
34+
35+
private static final Priority POSITION = Priority.before(SyntaxInfo.PATTERN_MATCHES_EVERYTHING);
36+
2437
private static final String[] PARSE_ORDER = {
2538
EffExpressionStatement.class.getCanonicalName(),
2639
CustomEffect.class.getCanonicalName(),
@@ -38,22 +51,37 @@ public class ParseOrderWorkarounds {
3851

3952
public static void reorderSyntax() {
4053
for (String c : PARSE_ORDER) {
41-
ensureLast(Skript.getStatements(), o -> o.getElementClass().getName().equals(c));
42-
ensureLast(Skript.getConditions(), o -> o.getElementClass().getName().equals(c));
43-
ensureLast(Skript.getEffects(), o -> o.getElementClass().toString().equals(c));
44-
ensureLast(SkriptReflection.getExpressions(), o -> o.getElementClass().getName().equals(c));
45-
ensureLast(Skript.getEvents(), o -> o.getElementClass().getName().equals(c));
54+
ensureLast(SyntaxRegistry.CONDITION, o -> o.type().getName().equals(c));
55+
ensureLast(SyntaxRegistry.EFFECT, o -> o.type().getName().equals(c));
56+
ensureLast(SyntaxRegistry.EXPRESSION, o -> o.type().getName().equals(c));
57+
ensureLast(BukkitRegistryKeys.EVENT, o -> o.type().getName().equals(c));
58+
ensureLast(SyntaxRegistry.STRUCTURE, o -> o.type().getName().equals(c));
4659
}
4760
}
4861

49-
private static <E> void ensureLast(Collection<E> elements, Checker<E> checker) {
50-
Optional<E> optionalE = elements.stream()
51-
.filter(checker::check)
62+
private static <T> void ensureLast(SyntaxRegistry.Key<? extends SyntaxInfo<? extends T>> elementKey, Predicate<SyntaxInfo<? extends T>> checker) {
63+
SyntaxRegistry syntaxRegistry = SkriptMirror.getAddonInstance().syntaxRegistry();
64+
Optional<? extends SyntaxInfo<? extends T>> optionalE = syntaxRegistry.syntaxes(elementKey).stream()
65+
.filter(checker)
5266
.findFirst();
5367

5468
optionalE.ifPresent(value -> {
55-
elements.remove(value);
56-
elements.add(value);
69+
syntaxRegistry.unregister((SyntaxRegistry.Key) elementKey, value);
70+
var newInfo = value.toBuilder().priority(POSITION).build();
71+
syntaxRegistry.register((SyntaxRegistry.Key) elementKey, newInfo);
72+
73+
// need to update custom syntax references
74+
CustomSyntaxStructure.DataTracker<?> tracker = null;
75+
if (elementKey == (SyntaxRegistry.Key) SyntaxRegistry.EFFECT) {
76+
tracker = StructCustomEffect.dataTracker;
77+
} else if (elementKey == (SyntaxRegistry.Key) SyntaxRegistry.CONDITION) {
78+
tracker = StructCustomCondition.dataTracker;
79+
} else if (elementKey == (SyntaxRegistry.Key) SyntaxRegistry.EXPRESSION) {
80+
tracker = StructCustomExpression.dataTracker;
81+
}
82+
if (tracker != null && tracker.getInfo() == value) {
83+
tracker.setInfo(newInfo);
84+
}
5785
});
5886
}
5987

src/main/java/com/btk5h/skriptmirror/skript/ExprArrayAccess.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.lang.reflect.Array;
1919
import java.util.Iterator;
20+
import java.util.function.Predicate;
2021

2122
public class ExprArrayAccess<T> implements Expression<T> {
2223

@@ -106,12 +107,12 @@ public boolean isSingle() {
106107
}
107108

108109
@Override
109-
public boolean check(Event e, Checker<? super T> c, boolean negated) {
110+
public boolean check(Event e, Predicate<? super T> c, boolean negated) {
110111
return SimpleExpression.check(getAll(e), c, negated, getAnd());
111112
}
112113

113114
@Override
114-
public boolean check(Event e, Checker<? super T> c) {
115+
public boolean check(Event e, Predicate<? super T> c) {
115116
return SimpleExpression.check(getAll(e), c, false, getAnd());
116117
}
117118

src/main/java/com/btk5h/skriptmirror/skript/ExprPlugin.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import ch.njol.skript.expressions.base.SimplePropertyExpression;
55
import ch.njol.skript.lang.Expression;
66
import ch.njol.skript.lang.ExpressionType;
7+
import ch.njol.skript.lang.Literal;
78
import ch.njol.skript.lang.SkriptParser;
89
import ch.njol.util.Kleenean;
910
import com.btk5h.skriptmirror.JavaType;
@@ -22,15 +23,19 @@ public class ExprPlugin extends SimplePropertyExpression<Object, ObjectWrapper>
2223

2324
@Override
2425
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
25-
super.init(exprs, matchedPattern, isDelayed, parseResult);
26+
if (!super.init(exprs, matchedPattern, isDelayed, parseResult)) {
27+
return false;
28+
}
2629

27-
if (exprs[0] instanceof StructImport.ImportHandler) {
28-
JavaType javaType = ((StructImport.ImportHandler) exprs[0]).getJavaType();
29-
Class<?> clazz = javaType.getJavaClass();
30+
if (getExpr() instanceof Literal<?> literal) {
31+
Object literalValue = literal.getSingle();
32+
if (literalValue instanceof JavaType javaType) {
33+
Class<?> clazz = javaType.getJavaClass();
3034

31-
if (!JavaPlugin.class.isAssignableFrom(clazz) || JavaPlugin.class.equals(clazz)) {
32-
Skript.error("The class " + clazz.getSimpleName() + " is not a plugin class");
33-
return false;
35+
if (!JavaPlugin.class.isAssignableFrom(clazz) || JavaPlugin.class.equals(clazz)) {
36+
Skript.error("The class " + clazz.getSimpleName() + " is not a plugin class");
37+
return false;
38+
}
3439
}
3540
}
3641

@@ -39,8 +44,7 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
3944

4045
@Override
4146
public ObjectWrapper convert(Object plugin) {
42-
if (plugin instanceof String) {
43-
String pluginName = (String) plugin;
47+
if (plugin instanceof String pluginName) {
4448
for (Plugin pluginInstance : Bukkit.getPluginManager().getPlugins()) {
4549
if (pluginInstance.getName().equalsIgnoreCase(pluginName)) {
4650
return ObjectWrapper.create(pluginInstance);

src/main/java/com/btk5h/skriptmirror/skript/ExprSpread.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Collection;
2121
import java.util.Iterator;
2222
import java.util.List;
23+
import java.util.function.Predicate;
2324
import java.util.stream.Stream;
2425

2526
public class ExprSpread<T> implements Expression<T> {
@@ -97,12 +98,12 @@ public boolean isSingle() {
9798
}
9899

99100
@Override
100-
public boolean check(Event e, Checker<? super T> c, boolean negated) {
101+
public boolean check(Event e, Predicate<? super T> c, boolean negated) {
101102
return SimpleExpression.check(getAll(e), c, negated, getAnd());
102103
}
103104

104105
@Override
105-
public boolean check(Event e, Checker<? super T> c) {
106+
public boolean check(Event e, Predicate<? super T> c) {
106107
return SimpleExpression.check(getAll(e), c, false, getAnd());
107108
}
108109

src/main/java/com/btk5h/skriptmirror/skript/Types.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ public JavaType parse(String s, ParseContext context) {
6363

6464
@Override
6565
public boolean canParse(ParseContext context) {
66-
// default context handled in StructImport$ImportHandler
67-
return context != ParseContext.DEFAULT;
66+
return true;
6867
}
6968

7069
@Override

src/main/java/com/btk5h/skriptmirror/skript/custom/ExprExpression.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.skriptlang.skript.lang.converter.Converters;
2323

2424
import java.util.Iterator;
25+
import java.util.function.Predicate;
2526

2627
public class ExprExpression<T> implements Expression<T> {
2728
static {
@@ -123,12 +124,12 @@ public boolean isSingle() {
123124
}
124125

125126
@Override
126-
public boolean check(Event e, Checker<? super T> c, boolean negated) {
127+
public boolean check(Event e, Predicate<? super T> c, boolean negated) {
127128
return SimpleExpression.check(getAll(e), c, negated, getAnd());
128129
}
129130

130131
@Override
131-
public boolean check(Event e, Checker<? super T> c) {
132+
public boolean check(Event e, Predicate<? super T> c) {
132133
return SimpleExpression.check(getAll(e), c, false, getAnd());
133134
}
134135

src/main/java/com/btk5h/skriptmirror/skript/custom/ExprRawExpression.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
public class ExprRawExpression extends SimpleExpression<Expression> {
1616
static {
1717
Skript.registerExpression(ExprRawExpression.class, Expression.class, ExpressionType.COMBINED,
18-
"[the] raw %objects%");
18+
"[the] raw [expression] %objects%");
1919
}
2020

2121
private Expression<?> expr;

src/main/java/com/btk5h/skriptmirror/skript/reflect/ExprJavaCall.java

+9-10
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import ch.njol.skript.Skript;
44
import ch.njol.skript.classes.Changer;
5-
import ch.njol.skript.lang.Expression;
6-
import ch.njol.skript.lang.ExpressionList;
7-
import ch.njol.skript.lang.ExpressionType;
8-
import ch.njol.skript.lang.SkriptParser;
5+
import ch.njol.skript.lang.*;
96
import ch.njol.skript.lang.util.SimpleExpression;
107
import ch.njol.skript.registrations.Classes;
118
import ch.njol.skript.util.Utils;
@@ -49,6 +46,7 @@
4946
import java.util.List;
5047
import java.util.Objects;
5148
import java.util.Optional;
49+
import java.util.function.Predicate;
5250
import java.util.stream.Collectors;
5351
import java.util.stream.Stream;
5452

@@ -165,10 +163,11 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
165163
}
166164

167165
if (staticDescriptor.getJavaClass() == null
168-
&& rawTarget instanceof StructImport.ImportHandler) {
169-
staticDescriptor = staticDescriptor.orDefaultClass(
170-
((StructImport.ImportHandler) rawTarget).getJavaType().getJavaClass()
171-
);
166+
&& rawTarget instanceof Literal<?> literal) {
167+
Object rawTargetValue = literal.getSingle();
168+
if (rawTargetValue instanceof JavaType) {
169+
staticDescriptor = staticDescriptor.orDefaultClass(((JavaType) rawTargetValue).getJavaClass());
170+
}
172171
}
173172

174173
if (staticDescriptor.getParameterTypes() != null && type.equals(CallType.FIELD)) {
@@ -253,12 +252,12 @@ public boolean isSingle() {
253252
}
254253

255254
@Override
256-
public boolean check(Event e, Checker<? super T> c, boolean negated) {
255+
public boolean check(Event e, Predicate<? super T> c, boolean negated) {
257256
return SimpleExpression.check(getAll(e), c, negated, getAnd());
258257
}
259258

260259
@Override
261-
public boolean check(Event e, Checker<? super T> c) {
260+
public boolean check(Event e, Predicate<? super T> c) {
262261
return SimpleExpression.check(getAll(e), c, false, getAnd());
263262
}
264263

0 commit comments

Comments
 (0)