Просмотр исходного кода

Wrap InlineField handling that throws an exception while parsing constructor code in a try/catch.

This happens on some classes that don't declare a constructor or any inline assignments, and prevents the rest of the assembly from being parsed. The class in question is still correctly parsed with this change, and so are other classes.
Matt Benic 9 лет назад
Родитель
Сommit
8206dfa5df
1 измененных файлов с 17 добавлено и 10 удалено
  1. 17 10
      Script/AtomicNET/AtomicNETService/CSComponentInspector.cs

+ 17 - 10
Script/AtomicNET/AtomicNETService/CSComponentInspector.cs

@@ -441,21 +441,28 @@ namespace AtomicTools
 
                             var fieldDef = metaReader.GetFieldDefinition(fieldHandle);
 
-                            var fieldName = metaReader.GetString(fieldDef.Name);
-
-                            if (opCode.ToString() == "stfld")
+                            // No way to predetermine if fieldDef.Name is valid
+                            try
                             {
+                                var fieldName = metaReader.GetString(fieldDef.Name);
 
-                                InspectorField inspectorField;
-
-                                if (_inspectorComponent.Fields.TryGetValue(fieldName, out inspectorField))
+                                if (opCode.ToString() == "stfld")
                                 {
-                                    inspectorField.DefaultValue = String.Join(" ", loadedValues.ToArray());
-                                }
 
-                            }
+                                    InspectorField inspectorField;
 
-                            loadedValues.Clear();
+                                    if (_inspectorComponent.Fields.TryGetValue(fieldName, out inspectorField))
+                                    {
+                                        inspectorField.DefaultValue = String.Join(" ", loadedValues.ToArray());
+                                    }
+
+                                }
+                            }
+                            catch (Exception) { break; }
+                            finally
+                            {
+                                loadedValues.Clear();
+                            }
 
                             break;
                         case OperandType.InlineMethod: