Skip to content

Commit 16a5d4a

Browse files
author
Marek Linka
committed
Add support for reflecting internal fields from argument types
1 parent fd01602 commit 16a5d4a

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

src/Microsoft.ML.Core/EntryPoints/EntryPointUtils.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System;
66
using System.Linq;
7+
using System.Reflection;
78
using Microsoft.ML.CommandLine;
89
using Microsoft.ML.Data;
910
using Microsoft.ML.Internal.Utilities;
@@ -42,15 +43,15 @@ public static bool IsValueWithinRange(this TlcModule.RangeAttribute range, objec
4243
}
4344

4445
/// <summary>
45-
/// Performs checks on an EntryPoint input class equivilent to the checks that are done
46+
/// Performs checks on an EntryPoint input class equivalent to the checks that are done
4647
/// when parsing a JSON EntryPoint graph.
4748
///
4849
/// Call this method from EntryPoint methods to ensure that range and required checks are performed
4950
/// in a consistent manner when EntryPoints are created directly from code.
5051
/// </summary>
5152
public static void CheckInputArgs(IExceptionContext ectx, object args)
5253
{
53-
foreach (var fieldInfo in args.GetType().GetFields())
54+
foreach (var fieldInfo in args.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
5455
{
5556
var attr = fieldInfo.GetCustomAttributes(typeof(ArgumentAttribute), false).FirstOrDefault()
5657
as ArgumentAttribute;

src/Microsoft.ML.EntryPoints/JsonUtils/JsonManifestUtils.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ private static JArray BuildInputManifest(IExceptionContext ectx, Type inputType,
154154
var defaults = Activator.CreateInstance(inputType);
155155

156156
var inputs = new List<KeyValuePair<Double, JObject>>();
157-
foreach (var fieldInfo in inputType.GetFields())
157+
foreach (var fieldInfo in inputType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
158158
{
159159
var inputAttr = fieldInfo.GetCustomAttributes(typeof(ArgumentAttribute), false).FirstOrDefault() as ArgumentAttribute;
160160
if (inputAttr == null || inputAttr.Visibility == ArgumentAttribute.VisibilityType.CmdLineOnly)
@@ -276,7 +276,7 @@ private static JArray BuildOutputManifest(IExceptionContext ectx, Type outputTyp
276276
if (outputType.IsGenericType && outputType.GetGenericTypeDefinition() == typeof(CommonOutputs.MacroOutput<>))
277277
outputType = outputType.GetGenericArguments()[0];
278278

279-
foreach (var fieldInfo in outputType.GetFields())
279+
foreach (var fieldInfo in outputType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
280280
{
281281
var outputAttr = fieldInfo.GetCustomAttributes(typeof(TlcModule.OutputAttribute), false)
282282
.FirstOrDefault() as TlcModule.OutputAttribute;
@@ -476,7 +476,7 @@ private static JToken BuildComponentToken(IExceptionContext ectx, IComponentFact
476476
// Iterate over all fields of the factory object, and compare the values with the defaults.
477477
// If the value differs, insert it into the settings object.
478478
bool anyValue = false;
479-
foreach (var fieldInfo in type.GetFields())
479+
foreach (var fieldInfo in type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
480480
{
481481
var attr = fieldInfo.GetCustomAttributes(typeof(ArgumentAttribute), false).FirstOrDefault()
482482
as ArgumentAttribute;

0 commit comments

Comments
 (0)