Browse Source

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 years ago
parent
commit
8206dfa5df
1 changed files with 17 additions and 10 deletions
  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: