فهرست منبع

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 سال پیش
والد
کامیت
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: