in Sharpmake/Resolver.cs [111:162]
public TypeWrapper(Type type)
{
if (!type.IsDefined(typeof(Resolvable), true))
return;
MemberInfo[] memberInfos = type.GetMembers();
foreach (MemberInfo memberInfo in memberInfos)
{
if (memberInfo.MemberType != MemberTypes.Field && memberInfo.MemberType != MemberTypes.Property)
continue;
if (memberInfo.IsDefined(typeof(SkipResolveOnMember), false))
continue;
Type memberType = null;
if (memberInfo.MemberType == MemberTypes.Field)
{
FieldInfo fieldInfo = memberInfo as FieldInfo;
Type fieldType = fieldInfo.FieldType;
if (fieldType.IsClass ||
(CanWriteFieldValue(fieldInfo) &&
(fieldType == typeof(string) ||
fieldType == typeof(Strings) ||
fieldType.IsAssignableFrom(typeof(IList<string>)))))
{
memberType = fieldInfo.FieldType;
}
}
else if (memberInfo.MemberType == MemberTypes.Property)
{
PropertyInfo propertyInfo = memberInfo as PropertyInfo;
Type propertyType = propertyInfo.PropertyType;
if (propertyInfo.CanRead &&
(propertyType.IsClass ||
propertyType == typeof(Strings) ||
(propertyType == typeof(string) && propertyInfo.CanWrite) ||
propertyType.IsAssignableFrom(typeof(IList<string>))))
{
memberType = propertyType;
}
}
if (memberType != null)
{
if (MemberInfos == null)
{
MemberInfos = new List<MemberInfo>(memberInfos.Length);
}
MemberInfos.Add(memberInfo);
}
}
}