5
5
import io .github .syst3ms .skriptparser .lang .Expression ;
6
6
import io .github .syst3ms .skriptparser .lang .TriggerContext ;
7
7
import io .github .syst3ms .skriptparser .log .ErrorType ;
8
- import io .github .syst3ms .skriptparser .log .SkriptLogger ;
9
8
import io .github .syst3ms .skriptparser .parsing .ParseContext ;
10
9
import io .github .syst3ms .skriptparser .registration .PatternInfos ;
11
- import io .github .syst3ms .skriptparser .types .Type ;
12
10
import io .github .syst3ms .skriptparser .types .TypeManager ;
13
11
import io .github .syst3ms .skriptparser .types .changers .ChangeMode ;
14
- import io .github .syst3ms .skriptparser .util .ClassUtils ;
15
- import io .github .syst3ms .skriptparser .util .StringUtils ;
16
12
import org .jetbrains .annotations .Nullable ;
17
13
18
- import java .util .Optional ;
19
-
20
14
/**
21
15
* A very general effect that can change many expressions. Many expressions can only be set and/or deleted, while some can have things added to or removed from them.
22
16
*
@@ -54,31 +48,30 @@ public class EffChange extends Effect {
54
48
@ Nullable
55
49
private Expression <?> changeWith ;
56
50
private ChangeMode mode ;
57
- private boolean assignment ; // A simple flag for identifying which syntax was precisely used
58
51
59
52
@ Override
60
53
public boolean init (Expression <?>[] expressions , int matchedPattern , ParseContext parseContext ) {
61
54
ChangeMode mode = PATTERNS .getInfo (matchedPattern );
62
55
if (mode == ChangeMode .RESET || mode == ChangeMode .DELETE ) {
63
56
changed = expressions [0 ];
64
- } else if ((matchedPattern & 1 ) == 1 || mode == ChangeMode .SET ) { // Notice the difference in the order of expressions
57
+ } else if ((matchedPattern & 1 ) == 1 || mode == ChangeMode .SET ) {
58
+ // Notice the difference in the order of expressions
65
59
changed = expressions [0 ];
66
60
changeWith = expressions [1 ];
67
- assignment = (matchedPattern & 1 ) == 1 ;
68
61
} else {
69
62
changed = expressions [1 ];
70
63
changeWith = expressions [0 ];
71
64
}
72
65
this .mode = mode ;
73
- SkriptLogger logger = parseContext .getLogger ();
66
+
67
+ var logger = parseContext .getLogger ();
74
68
String changedString = changed .toString (TriggerContext .DUMMY , logger .isDebug ());
69
+
75
70
if (changeWith == null ) {
76
71
assert mode == ChangeMode .DELETE || mode == ChangeMode .RESET ;
77
72
return changed .acceptsChange (mode ).isPresent ();
78
73
} else {
79
- Class <?> changeType = changeWith .getReturnType ();
80
- Optional <Class <?>[]> acceptance = changed .acceptsChange (mode );
81
- if (acceptance .isEmpty ()) {
74
+ if (changed .acceptsChange (mode ).isEmpty ()) {
82
75
switch (mode ) {
83
76
case SET :
84
77
logger .error (changedString + " cannot be set to anything" , ErrorType .SEMANTIC_ERROR );
@@ -90,19 +83,14 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, ParseContex
90
83
case REMOVE :
91
84
logger .error ("Nothing can be removed from " + changedString , ErrorType .SEMANTIC_ERROR );
92
85
break ;
93
- case DELETE :
94
- case RESET :
86
+ default :
95
87
throw new IllegalStateException ();
96
88
}
97
89
return false ;
98
- } else if (!ClassUtils .containsSuperclass (acceptance .get (), changeType )) {
99
- boolean array = changeType .isArray ();
100
- Optional <? extends Type <?>> type = TypeManager .getByClassExact (changeType );
90
+ } else if (!changed .acceptsChange (mode , changeWith )) {
91
+ var type = TypeManager .getByClassExact (changeWith .getReturnType ());
101
92
assert type .isPresent ();
102
- String changeTypeName = StringUtils .withIndefiniteArticle (
103
- type .get ().getPluralForms ()[array ? 1 : 0 ],
104
- array
105
- );
93
+ String changeTypeName = type .get ().withIndefiniteArticle (!changeWith .isSingle ());
106
94
switch (mode ) {
107
95
case SET :
108
96
logger .error (changedString + " cannot be set to " + changeTypeName , ErrorType .SEMANTIC_ERROR );
@@ -127,12 +115,12 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, ParseContex
127
115
@ Override
128
116
public void execute (TriggerContext ctx ) {
129
117
if (changeWith == null ) {
130
- changed .change (ctx , new Object [0 ], mode );
118
+ changed .change (ctx , mode , new Object [0 ]);
131
119
} else {
132
- var values = changeWith .getValues (ctx );
120
+ var values = changeWith .getValues (ctx );
133
121
if (values .length == 0 )
134
122
return ;
135
- changed .change (ctx , values , mode );
123
+ changed .change (ctx , mode , values );
136
124
}
137
125
}
138
126
@@ -142,23 +130,11 @@ public String toString(TriggerContext ctx, boolean debug) {
142
130
String changedWithString = changeWith != null ? changeWith .toString (ctx , debug ) : "" ;
143
131
switch (mode ) {
144
132
case SET :
145
- if (assignment ) {
146
- return String .format ("%s = %s" , changedString , changedWithString );
147
- } else {
148
- return String .format ("set %s to %s" , changedString , changedWithString );
149
- }
133
+ return String .format ("set %s to %s" , changedString , changedWithString );
150
134
case ADD :
151
- if (assignment ) {
152
- return String .format ("%s += %s" , changedString , changedWithString );
153
- } else {
154
- return String .format ("add %s to %s" , changedWithString , changedString );
155
- }
135
+ return String .format ("add %s to %s" , changedWithString , changedString );
156
136
case REMOVE :
157
- if (assignment ) {
158
- return String .format ("%s -= %s" , changedString , changedWithString );
159
- } else {
160
- return String .format ("remove %s from %s" , changedWithString , changedString );
161
- }
137
+ return String .format ("remove %s from %s" , changedWithString , changedString );
162
138
case DELETE :
163
139
case RESET :
164
140
return String .format ("%s %s" , mode .name ().toLowerCase (), changedString );
0 commit comments