Skip to content

Commit 4e76813

Browse files
committed
Revert "Update the parser for migration"
This reverts commit a260324.
1 parent d637adf commit 4e76813

File tree

1 file changed

+32
-97
lines changed

1 file changed

+32
-97
lines changed

Packages/com.unity.inputsystem/InputSystem/Actions/InputActionAsset.cs

Lines changed: 32 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Reflection;
6-
using System.Globalization;
6+
using UnityEngine.InputSystem.Editor;
77
using UnityEngine.InputSystem.Utilities;
88

99
////TODO: make the FindAction logic available on any IEnumerable<InputAction> and IInputActionCollection via extension methods
@@ -1014,125 +1014,60 @@ internal void MigrateJson(ref ReadFileJson parsedJson)
10141014
{
10151015
if (parsedJson.version >= JsonVersion.Version1)
10161016
return;
1017-
1018-
if (parsedJson.maps == null || parsedJson.maps.Length == 0)
1019-
{
1020-
parsedJson.version = JsonVersion.Version1;
1021-
return;
1022-
}
1023-
1024-
for (var mi = 0; mi < parsedJson.maps.Length; ++mi)
1017+
if ((parsedJson.maps?.Length ?? 0) > 0 && (parsedJson.version) < JsonVersion.Version1)
10251018
{
1026-
var mapJson = parsedJson.maps[mi];
1027-
if (mapJson.actions == null || mapJson.actions.Length == 0)
1028-
continue;
1029-
1030-
for (var ai = 0; ai < mapJson.actions.Length; ++ai)
1019+
for (var mi = 0; mi < parsedJson.maps.Length; ++mi)
10311020
{
1032-
var actionJson = mapJson.actions[ai];
1033-
var raw = actionJson.processors;
1034-
if (string.IsNullOrEmpty(raw))
1035-
continue;
1036-
1037-
var parts = System.Text.RegularExpressions.Regex.Split(raw, @"\s*([,;])\s*");
1038-
if (parts.Length == 0)
1039-
continue;
1040-
1041-
var tokens = new List<string>();
1042-
for (int i = 0; i < parts.Length; i += 2)
1043-
if (!string.IsNullOrEmpty(parts[i]))
1044-
tokens.Add(parts[i]);
1045-
1046-
if (tokens.Count == 0)
1047-
continue;
1048-
1049-
var parsed = new List<NameAndParameters>(tokens.Count);
1050-
foreach (var t in tokens)
1051-
parsed.Add(NameAndParameters.Parse(t));
1052-
1053-
var rebuiltTokens = new List<string>(tokens.Count);
1054-
var anyProcessorChanged = false;
1055-
1056-
for (int pi = 0; pi < parsed.Count; pi++)
1021+
var mapJson = parsedJson.maps[mi];
1022+
for (var ai = 0; ai < mapJson.actions.Length; ++ai)
10571023
{
1058-
var nap = parsed[pi];
1059-
1060-
var procType = InputSystem.TryGetProcessor(nap.name);
1061-
if (procType == null || nap.parameters.Count == 0)
1062-
{
1063-
rebuiltTokens.Add(tokens[pi]);
1024+
var actionJson = mapJson.actions[ai];
1025+
var raw = actionJson.processors;
1026+
if (string.IsNullOrEmpty(raw))
10641027
continue;
1065-
}
1066-
1067-
var dict = new Dictionary<string, string>(nap.parameters.Count, System.StringComparer.OrdinalIgnoreCase);
1068-
foreach (var p in nap.parameters)
1069-
dict[p.name] = p.value.ToString();
1070-
1071-
var changedThisProcessor = false;
10721028

1073-
foreach (var field in procType.GetFields(BindingFlags.Public | BindingFlags.Instance))
1029+
var list = NameAndParameters.ParseMultiple(raw).ToList();
1030+
var rebuilt = new List<string>(list.Count);
1031+
foreach (var nap in list)
10741032
{
1075-
if (!field.FieldType.IsEnum)
1076-
continue;
1077-
1078-
if (!dict.TryGetValue(field.Name, out var rawVal))
1033+
var procType = InputSystem.TryGetProcessor(nap.name);
1034+
if (nap.parameters.Count == 0 || procType == null)
1035+
{
1036+
rebuilt.Add(nap.ToString());
10791037
continue;
1038+
}
10801039

1081-
if (int.TryParse(rawVal, NumberStyles.Integer, CultureInfo.InvariantCulture, out var n))
1040+
var dict = nap.parameters.ToDictionary(p => p.name, p => p.value.ToString());
1041+
var anyChanged = false;
1042+
foreach (var field in procType.GetFields(BindingFlags.Public | BindingFlags.Instance).Where(f => f.FieldType.IsEnum))
10821043
{
1083-
var values = System.Enum.GetValues(field.FieldType);
1084-
var looksLikeOrdinal = n >= 0 && n < values.Length && !System.Enum.IsDefined(field.FieldType, n);
1085-
if (looksLikeOrdinal)
1044+
if (dict.TryGetValue(field.Name, out var ordS) && int.TryParse(ordS, out var ord))
10861045
{
1087-
var underlying = Convert.ToInt32(values.GetValue(n));
1088-
if (underlying != n)
1046+
var values = Enum.GetValues(field.FieldType).Cast<object>().ToArray();
1047+
if (ord >= 0 && ord < values.Length)
10891048
{
1090-
dict[field.Name] = underlying.ToString(CultureInfo.InvariantCulture);
1091-
changedThisProcessor = true;
1049+
dict[field.Name] = Convert.ToInt32(values[ord]).ToString();
1050+
anyChanged = true;
10921051
}
10931052
}
10941053
}
1095-
}
1096-
1097-
if (!changedThisProcessor)
1098-
{
1099-
rebuiltTokens.Add(tokens[pi]);
1100-
}
1101-
else
1102-
{
1103-
var ordered = nap.parameters.Select(p =>
1104-
{
1105-
var v = dict.TryGetValue(p.name, out var nv) ? nv : p.value.ToString();
1106-
return $"{p.name}={v}";
1107-
});
1108-
1109-
var migrated = $"{nap.name}({string.Join(",", ordered)})";
1110-
rebuiltTokens.Add(migrated);
1111-
anyProcessorChanged = true;
1112-
}
1113-
}
11141054

1115-
if (anyProcessorChanged)
1116-
{
1117-
var sb = new System.Text.StringBuilder(raw.Length + 16);
1118-
int tokenIndex = 0;
1119-
for (int partIndex = 0; partIndex < parts.Length; ++partIndex)
1120-
{
1121-
if ((partIndex % 2) == 0)
1055+
if (!anyChanged)
11221056
{
1123-
if (tokenIndex < rebuiltTokens.Count)
1124-
sb.Append(rebuiltTokens[tokenIndex++]);
1057+
rebuilt.Add(nap.ToString());
11251058
}
11261059
else
11271060
{
1128-
sb.Append(parts[partIndex]);
1061+
var paramText = string.Join(",", dict.Select(kv => $"{kv.Key}={kv.Value}"));
1062+
rebuilt.Add($"{nap.name}({paramText})");
11291063
}
11301064
}
1131-
actionJson.processors = sb.ToString();
1065+
1066+
actionJson.processors = string.Join(";", rebuilt);
1067+
mapJson.actions[ai] = actionJson;
11321068
}
1133-
mapJson.actions[ai] = actionJson;
1069+
parsedJson.maps[mi] = mapJson;
11341070
}
1135-
parsedJson.maps[mi] = mapJson;
11361071
}
11371072
// Bump the version so we never re-migrate
11381073
parsedJson.version = JsonVersion.Version1;

0 commit comments

Comments
 (0)