Skip to content

Commit 283a169

Browse files
Improve return types for ExprExpression and ExprChangeValue (#157)
* Improve return types for ExprExpression, ExprChangeValue * nevermind it's more complicated
1 parent 5eb024b commit 283a169

3 files changed

Lines changed: 59 additions & 279 deletions

File tree

Lines changed: 27 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,36 @@
11
package com.btk5h.skriptmirror.skript.custom;
22

33
import ch.njol.skript.Skript;
4-
import ch.njol.skript.classes.Changer;
54
import ch.njol.skript.lang.Expression;
65
import ch.njol.skript.lang.ExpressionType;
7-
import ch.njol.skript.lang.SkriptParser;
6+
import ch.njol.skript.lang.SkriptParser.ParseResult;
87
import ch.njol.skript.lang.util.SimpleExpression;
9-
import ch.njol.skript.log.ErrorQuality;
108
import ch.njol.skript.util.Utils;
11-
import ch.njol.util.Checker;
129
import ch.njol.util.Kleenean;
13-
import ch.njol.util.coll.iterator.ArrayIterator;
1410
import org.jetbrains.annotations.Nullable;
1511
import org.skriptlang.reflect.syntax.condition.ConditionCheckEvent;
1612
import org.skriptlang.reflect.syntax.effect.EffectTriggerEvent;
1713
import org.skriptlang.reflect.syntax.event.EventTriggerEvent;
1814
import org.skriptlang.reflect.syntax.expression.ExpressionChangeEvent;
1915
import org.skriptlang.reflect.syntax.expression.ExpressionGetEvent;
20-
import com.btk5h.skriptmirror.util.JavaUtil;
2116
import org.bukkit.event.Event;
22-
import org.skriptlang.skript.lang.converter.Converters;
2317

24-
import java.util.Iterator;
25-
import java.util.function.Predicate;
18+
import java.lang.reflect.Array;
19+
import java.util.Arrays;
20+
21+
public class ExprExpression extends SimpleExpression<Object> {
2622

27-
public class ExprExpression<T> implements Expression<T> {
2823
static {
29-
//noinspection unchecked
3024
Skript.registerExpression(ExprExpression.class, Object.class, ExpressionType.SIMPLE,
31-
"[the] expr[ession][(1¦s)](-| )<\\d+>");
25+
"[the] expr[ession][plural:s](-| )<\\d+>");
3226
}
3327

3428
private int index;
35-
private boolean plural;
36-
37-
private final ExprExpression<?> source;
38-
private final Class<? extends T>[] types;
39-
private final Class<T> superType;
40-
41-
@SuppressWarnings("unchecked")
42-
public ExprExpression() {
43-
this(null, ((Class<? extends T>) Object.class));
44-
}
45-
46-
@SuppressWarnings("unchecked")
47-
@SafeVarargs
48-
private ExprExpression(ExprExpression<?> source, Class<? extends T>... types) {
49-
if (source != null) {
50-
index = source.index;
51-
plural = source.plural;
52-
}
53-
54-
this.source = source;
55-
this.types = types;
56-
this.superType = (Class<T>) Utils.getSuperType(types);
57-
}
29+
private boolean isPlural;
30+
private Class<?> returnType;
5831

5932
@Override
60-
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed,
61-
SkriptParser.ParseResult parseResult) {
33+
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
6234
if (!getParser().isCurrentEvent(
6335
SyntaxParseEvent.class,
6436
ConditionCheckEvent.class,
@@ -67,51 +39,38 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
6739
ExpressionChangeEvent.class,
6840
ExpressionGetEvent.class
6941
)) {
70-
Skript.error("The expression 'expression' may only be used in a custom syntax.",
71-
ErrorQuality.SEMANTIC_ERROR);
42+
Skript.error("The expression 'expression' may only be used in a custom syntax structure");
7243
return false;
7344
}
7445

75-
index = Utils.parseInt(parseResult.regexes.get(0).group(0));
46+
index = Utils.parseInt(parseResult.regexes.getFirst().group(0));
7647
if (index <= 0) {
77-
Skript.error("The expression index must be a natural number.", ErrorQuality.SEMANTIC_ERROR);
48+
Skript.error("The expression index must be a natural number");
7849
return false;
7950
}
8051
index--;
8152

82-
plural = parseResult.mark == 1;
53+
isPlural = parseResult.hasTag("plural");
8354

84-
return true;
85-
}
86-
87-
@Override
88-
public T getSingle(Event e) {
89-
T[] all = getAll(e);
90-
if (all.length == 0) {
91-
return null;
92-
}
93-
return all[0];
94-
}
55+
// TODO better return types
56+
returnType = Object.class;
9557

96-
@Override
97-
public T[] getArray(Event e) {
98-
return getAll(e);
58+
return true;
9959
}
10060

10161
@Override
102-
public T[] getAll(Event e) {
103-
Expression<?> expr = getExpression(e);
104-
62+
protected Object @Nullable [] get(Event event) {
63+
Expression<?> expr = getExpression(event);
10564
if (expr == null) {
106-
return JavaUtil.newArray(superType, 0);
65+
return (Object[]) Array.newInstance(getReturnType(), 0);
10766
}
108-
109-
return Converters.convert(expr.getAll(e), types, superType);
67+
Object[] values = expr.getAll(event);
68+
return Arrays.copyOf(values, values.length, (Class<? extends Object[]>) getReturnType().arrayType());
11069
}
11170

11271
@Nullable
113-
Expression<?> getExpression(Event e) {
114-
Expression<?>[] expressions = ((CustomSyntaxEvent) e).getExpressions();
72+
Expression<?> getExpression(Event event) {
73+
Expression<?>[] expressions = ((CustomSyntaxEvent) event).getExpressions();
11574
if (index < expressions.length) {
11675
return expressions[index];
11776
}
@@ -120,87 +79,17 @@ Expression<?> getExpression(Event e) {
12079

12180
@Override
12281
public boolean isSingle() {
123-
return !plural;
124-
}
125-
126-
@Override
127-
public boolean check(Event e, Predicate<? super T> c, boolean negated) {
128-
return SimpleExpression.check(getAll(e), c, negated, getAnd());
129-
}
130-
131-
@Override
132-
public boolean check(Event e, Predicate<? super T> c) {
133-
return SimpleExpression.check(getAll(e), c, false, getAnd());
134-
}
135-
136-
@Override
137-
public <R> Expression<? extends R> getConvertedExpression(Class<R>[] to) {
138-
return new ExprExpression<>(this, to);
139-
}
140-
141-
@Override
142-
public Class<? extends T> getReturnType() {
143-
return superType;
144-
}
145-
146-
@Override
147-
public boolean getAnd() {
148-
return true;
149-
}
150-
151-
@Override
152-
public boolean setTime(int time) {
153-
return false;
154-
}
155-
156-
@Override
157-
public int getTime() {
158-
return 0;
159-
}
160-
161-
@Override
162-
public boolean isDefault() {
163-
return false;
82+
return !isPlural;
16483
}
16584

16685
@Override
167-
public Iterator<? extends T> iterator(Event e) {
168-
return new ArrayIterator<>(getAll(e));
86+
public Class<?> getReturnType() {
87+
return returnType;
16988
}
17089

17190
@Override
172-
public boolean isLoopOf(String s) {
173-
return s.equalsIgnoreCase("expression");
174-
}
175-
176-
@Override
177-
public Expression<?> getSource() {
178-
return source == null ? this : source;
179-
}
180-
181-
@Override
182-
public Expression<? extends T> simplify() {
183-
return this;
184-
}
185-
186-
@Override
187-
public Class<?>[] acceptChange(Changer.ChangeMode mode) {
188-
return null;
189-
}
190-
191-
@Override
192-
public void change(Event e, Object[] delta, Changer.ChangeMode mode) {
193-
throw new UnsupportedOperationException();
194-
}
195-
196-
@Override
197-
public String toString(Event e, boolean debug) {
91+
public String toString(Event event, boolean debug) {
19892
return "expression " + (index + 1);
19993
}
20094

201-
@Override
202-
public String toString() {
203-
return toString(null, false);
204-
}
205-
20695
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
3434
@Override
3535
protected Expression<?>[] get(Event event) {
3636
Expression<?> expr = this.expr;
37-
if (expr instanceof ExprExpression<?> exprExpr && event instanceof CustomSyntaxEvent) {
37+
if (expr instanceof ExprExpression exprExpr && event instanceof CustomSyntaxEvent) {
3838
expr = exprExpr.getExpression(event);
3939
if (expr == null)
4040
return null;
@@ -50,15 +50,15 @@ public Class<?>[] acceptChange(ChangeMode changeMode) {
5050

5151
@Override
5252
public void change(Event event, Object[] delta, ChangeMode changeMode) {
53-
if (!(expr instanceof ExprExpression && event instanceof CustomSyntaxEvent))
53+
if (!(expr instanceof ExprExpression exprExpression && event instanceof CustomSyntaxEvent customEvent))
5454
return;
5555

56-
Expression<?> expr = ((ExprExpression<?>) this.expr).getExpression(event);
56+
Expression<?> expr = exprExpression.getExpression(event);
5757
if (expr == null)
5858
return;
5959
Expression<?> source = expr.getSource();
6060

61-
Event unwrappedEvent = ((WrappedEvent) event).getDirectEvent();
61+
Event unwrappedEvent = customEvent.getDirectEvent();
6262
// Ensure acceptChange has been called before change
6363
try {
6464
source.acceptChange(changeMode);

0 commit comments

Comments
 (0)