Skip to content

Commit 312103a

Browse files
committed
Round 2
1 parent 4bd50a6 commit 312103a

File tree

3 files changed

+67
-41
lines changed

3 files changed

+67
-41
lines changed

src/main/java/ch/njol/skript/test/runner/StructTestSubValidators.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
import org.jetbrains.annotations.Nullable;
1212
import org.skriptlang.skript.lang.entry.EntryContainer;
1313
import org.skriptlang.skript.lang.entry.EntryValidator;
14-
import org.skriptlang.skript.lang.entry.EntryValidator.EntryValidatorBuilder;
14+
import org.skriptlang.skript.lang.entry.EntryValidator.SubContainerBuilder;
15+
import org.skriptlang.skript.lang.entry.SubContainerEntryData;
1516
import org.skriptlang.skript.lang.script.Script;
1617
import org.skriptlang.skript.lang.structure.Structure;
1718

@@ -23,11 +24,17 @@ public class StructTestSubValidators extends Structure {
2324
if (TestMode.ENABLED)
2425
Skript.registerStructure(StructTestSubValidators.class,
2526
EntryValidator.builder()
26-
.addEntryData(new EntryValidatorBuilder("sub validator 1", false)
27-
.addSection("sub section", false))
28-
.addEntryData(new EntryValidatorBuilder("sub validator 2", false)
29-
.addEntryData(new EntryValidatorBuilder("sub sub validator", false)
30-
.addSection("sub sub section", false)))
27+
.addEntryData(new SubContainerEntryData("sub validator 1", false,
28+
new SubContainerBuilder()
29+
.addSection("sub section", false)
30+
))
31+
.addEntryData(new SubContainerEntryData("sub validator 2", false,
32+
new SubContainerBuilder()
33+
.addEntryData(new SubContainerEntryData("sub sub validator", false,
34+
new SubContainerBuilder()
35+
.addSection("sub sub section", false)
36+
))
37+
))
3138
.build(),
3239
"test sub validators"
3340
);

src/main/java/org/skriptlang/skript/lang/entry/EntryValidator.java

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ public List<EntryData<?>> getEntryData() {
8585
while (iterator.hasNext()) {
8686
EntryData<?> data = iterator.next();
8787
if (data.canCreateWith(node)) { // Determine if it's a match
88-
if (data instanceof EntryValidatorBuilder subValidator) {
89-
if (!subValidator.validate((SectionNode) node)) {
88+
if (data instanceof SubContainerEntryData subContainer) {
89+
if (!subContainer.validate((SectionNode) node)) {
9090
ok = false;
9191
continue;
9292
}
@@ -124,20 +124,14 @@ public List<EntryData<?>> getEntryData() {
124124
* A utility builder for creating an entry validator that can be used to parse and validate a {@link SectionNode}.
125125
* @see EntryValidator#builder()
126126
*/
127-
public static class EntryValidatorBuilder extends EntryData<EntryContainer> {
127+
public static class EntryValidatorBuilder {
128128

129129
/**
130130
* The default separator used for all {@link KeyValueEntryData}.
131131
*/
132132
public static final String DEFAULT_ENTRY_SEPARATOR = ": ";
133133

134-
private EntryValidatorBuilder() {
135-
super("", null, false);
136-
}
137-
138-
public EntryValidatorBuilder(String key, boolean optional) {
139-
super(key, null, optional);
140-
}
134+
private EntryValidatorBuilder() { }
141135

142136
private final List<EntryData<?>> entryData = new ArrayList<>();
143137
private String entrySeparator = DEFAULT_ENTRY_SEPARATOR;
@@ -235,8 +229,6 @@ public EntryValidatorBuilder addSection(String key, boolean optional) {
235229
* @return The builder instance.
236230
*/
237231
public EntryValidatorBuilder addEntryData(EntryData<?> entryData) {
238-
if (entryData == this)
239-
throw new IllegalArgumentException("Cannot add EntryValidatorBuilder to itself.");
240232
this.entryData.add(entryData);
241233
return this;
242234
}
@@ -250,31 +242,12 @@ public EntryValidator build() {
250242
);
251243
}
252244

253-
private EntryContainer entryContainer = null;
254-
255-
private boolean validate(SectionNode sectionNode) {
256-
EntryValidator validator = new EntryValidator(
257-
entryData, unexpectedNodeTester, unexpectedEntryMessage, missingRequiredEntryMessage
258-
);
259-
EntryContainer container = validator.validate(sectionNode);
260-
entryContainer = container;
261-
return container != null;
262-
}
245+
}
263246

264-
@Override
265-
public @Nullable EntryContainer getValue(Node node) {
266-
return entryContainer;
267-
}
247+
public static class SubContainerBuilder extends EntryValidatorBuilder {
268248

269-
@Override
270-
public boolean canCreateWith(Node node) {
271-
if (!(node instanceof SectionNode))
272-
return false;
273-
String key = node.getKey();
274-
if (key == null)
275-
return false;
276-
key = ScriptLoader.replaceOptions(key);
277-
return getKey().equalsIgnoreCase(key);
249+
public SubContainerBuilder() {
250+
super();
278251
}
279252

280253
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.skriptlang.skript.lang.entry;
2+
3+
import ch.njol.skript.ScriptLoader;
4+
import ch.njol.skript.config.Node;
5+
import ch.njol.skript.config.SectionNode;
6+
import org.jetbrains.annotations.Nullable;
7+
import org.skriptlang.skript.lang.entry.EntryValidator.EntryValidatorBuilder;
8+
9+
public class SubContainerEntryData extends EntryData<EntryContainer> {
10+
11+
private final EntryValidator entryValidator;
12+
private EntryContainer entryContainer;
13+
14+
public SubContainerEntryData(String key, boolean optional, EntryValidator entryValidator) {
15+
super(key, null, optional);
16+
this.entryValidator = entryValidator;
17+
}
18+
19+
public SubContainerEntryData(String key, boolean optional, EntryValidatorBuilder validatorBuilder) {
20+
super(key, null, optional);
21+
this.entryValidator = validatorBuilder.build();
22+
}
23+
24+
public boolean validate(SectionNode sectionNode) {
25+
EntryContainer container = entryValidator.validate(sectionNode);
26+
entryContainer = container;
27+
return container != null;
28+
}
29+
30+
@Override
31+
public @Nullable EntryContainer getValue(Node node) {
32+
return entryContainer;
33+
}
34+
35+
@Override
36+
public boolean canCreateWith(Node node) {
37+
if (!(node instanceof SectionNode))
38+
return false;
39+
String key = node.getKey();
40+
if (key == null)
41+
return false;
42+
key = ScriptLoader.replaceOptions(key);
43+
return getKey().equalsIgnoreCase(key);
44+
}
45+
46+
}

0 commit comments

Comments
 (0)