Skip to content

Commit 0c09441

Browse files
authored
Merge pull request cabaletta#4324 from ZacSharp/pr/1.19.4/setting/fixRecursiveParserType
Fix recursive setting parsers
2 parents 69d3bc0 + 848b7c6 commit 0c09441

File tree

1 file changed

+22
-35
lines changed

1 file changed

+22
-35
lines changed

src/api/java/baritone/api/utils/SettingsUtil.java

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public static <T> String settingValueToString(Settings.Setting<T> setting, T val
149149
throw new IllegalStateException("Missing " + setting.getValueClass() + " " + setting.getName());
150150
}
151151

152-
return io.toString(new ParserContext(setting), value);
152+
return io.toString(setting.getType(), value);
153153
}
154154

155155
public static String settingValueToString(Settings.Setting setting) throws IllegalArgumentException {
@@ -196,7 +196,7 @@ public static void parseAndApply(Settings settings, String settingName, String s
196196
}
197197
Class intendedType = setting.getValueClass();
198198
ISettingParser ioMethod = Parser.getParser(setting.getType());
199-
Object parsed = ioMethod.parse(new ParserContext(setting), settingValue);
199+
Object parsed = ioMethod.parse(setting.getType(), settingValue);
200200
if (!intendedType.isInstance(parsed)) {
201201
throw new IllegalStateException(ioMethod + " parser returned incorrect type, expected " + intendedType + " got " + parsed + " which is " + parsed.getClass());
202202
}
@@ -205,26 +205,13 @@ public static void parseAndApply(Settings settings, String settingName, String s
205205

206206
private interface ISettingParser<T> {
207207

208-
T parse(ParserContext context, String raw);
208+
T parse(Type type, String raw);
209209

210-
String toString(ParserContext context, T value);
210+
String toString(Type type, T value);
211211

212212
boolean accepts(Type type);
213213
}
214214

215-
private static class ParserContext {
216-
217-
private final Settings.Setting<?> setting;
218-
219-
private ParserContext(Settings.Setting<?> setting) {
220-
this.setting = setting;
221-
}
222-
223-
private Settings.Setting<?> getSetting() {
224-
return this.setting;
225-
}
226-
}
227-
228215
private enum Parser implements ISettingParser {
229216

230217
DOUBLE(Double.class, Double::parseDouble),
@@ -256,21 +243,21 @@ private enum Parser implements ISettingParser {
256243
),
257244
LIST() {
258245
@Override
259-
public Object parse(ParserContext context, String raw) {
260-
Type type = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0];
261-
Parser parser = Parser.getParser(type);
246+
public Object parse(Type type, String raw) {
247+
Type elementType = ((ParameterizedType) type).getActualTypeArguments()[0];
248+
Parser parser = Parser.getParser(elementType);
262249
return Stream.of(raw.split(","))
263-
.map(s -> parser.parse(context, s))
250+
.map(s -> parser.parse(elementType, s))
264251
.collect(Collectors.toList());
265252
}
266253

267254
@Override
268-
public String toString(ParserContext context, Object value) {
269-
Type type = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0];
270-
Parser parser = Parser.getParser(type);
255+
public String toString(Type type, Object value) {
256+
Type elementType = ((ParameterizedType) type).getActualTypeArguments()[0];
257+
Parser parser = Parser.getParser(elementType);
271258

272259
return ((List<?>) value).stream()
273-
.map(o -> parser.toString(context, o))
260+
.map(o -> parser.toString(elementType, o))
274261
.collect(Collectors.joining(","));
275262
}
276263

@@ -281,26 +268,26 @@ public boolean accepts(Type type) {
281268
},
282269
MAPPING() {
283270
@Override
284-
public Object parse(ParserContext context, String raw) {
285-
Type keyType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0];
286-
Type valueType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[1];
271+
public Object parse(Type type, String raw) {
272+
Type keyType = ((ParameterizedType) type).getActualTypeArguments()[0];
273+
Type valueType = ((ParameterizedType) type).getActualTypeArguments()[1];
287274
Parser keyParser = Parser.getParser(keyType);
288275
Parser valueParser = Parser.getParser(valueType);
289276

290277
return Stream.of(raw.split(",(?=[^,]*->)"))
291278
.map(s -> s.split("->"))
292-
.collect(Collectors.toMap(s -> keyParser.parse(context, s[0]), s -> valueParser.parse(context, s[1])));
279+
.collect(Collectors.toMap(s -> keyParser.parse(keyType, s[0]), s -> valueParser.parse(valueType, s[1])));
293280
}
294281

295282
@Override
296-
public String toString(ParserContext context, Object value) {
297-
Type keyType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[0];
298-
Type valueType = ((ParameterizedType) context.getSetting().getType()).getActualTypeArguments()[1];
283+
public String toString(Type type, Object value) {
284+
Type keyType = ((ParameterizedType) type).getActualTypeArguments()[0];
285+
Type valueType = ((ParameterizedType) type).getActualTypeArguments()[1];
299286
Parser keyParser = Parser.getParser(keyType);
300287
Parser valueParser = Parser.getParser(valueType);
301288

302289
return ((Map<?, ?>) value).entrySet().stream()
303-
.map(o -> keyParser.toString(context, o.getKey()) + "->" + valueParser.toString(context, o.getValue()))
290+
.map(o -> keyParser.toString(keyType, o.getKey()) + "->" + valueParser.toString(valueType, o.getValue()))
304291
.collect(Collectors.joining(","));
305292
}
306293

@@ -331,14 +318,14 @@ <T> Parser(Class<T> cla$$, Function<String, T> parser, Function<T, String> toStr
331318
}
332319

333320
@Override
334-
public Object parse(ParserContext context, String raw) {
321+
public Object parse(Type type, String raw) {
335322
Object parsed = this.parser.apply(raw);
336323
Objects.requireNonNull(parsed);
337324
return parsed;
338325
}
339326

340327
@Override
341-
public String toString(ParserContext context, Object value) {
328+
public String toString(Type type, Object value) {
342329
return this.toString.apply(value);
343330
}
344331

0 commit comments

Comments
 (0)