in src/Refasmer/Importer/ImportLogic.cs [326:374]
private void ImportProperty( PropertyDefinitionHandle srcHandle )
{
var src = _reader.GetPropertyDefinition(srcHandle);
var accessors = src.GetAccessors();
var getter = Import(accessors.Getter);
var setter = Import(accessors.Setter);
var others = accessors.Others
.Select(a => Tuple.Create(a, Import(a)))
.Where(a => !a.Item2.IsNil)
.ToList();
if (getter.IsNil && setter.IsNil && !others.Any())
{
Trace?.Invoke($"Not imported property {_reader.ToString(src)}");
return;
}
var dstHandle = _builder.AddProperty(src.Attributes, ImportValue(src.Name), ImportSignatureWithHeader(src.Signature));
_propertyDefinitionCache.Add(srcHandle, dstHandle);
Trace?.Invoke($"Imported property {_reader.ToString(src)} -> {RowId(dstHandle)}");
using var _ = WithLogPrefix($"[{_reader.ToString(src)}]");
if (!getter.IsNil)
{
_builder.AddMethodSemantics(dstHandle, MethodSemanticsAttributes.Getter, getter);
Trace?.Invoke($"Imported getter {_reader.ToString(accessors.Getter)} -> {RowId(getter)}");
}
if (!setter.IsNil)
{
_builder.AddMethodSemantics(dstHandle, MethodSemanticsAttributes.Setter, setter);
Trace?.Invoke($"Imported setter {_reader.ToString(accessors.Setter)} -> {RowId(setter)}");
}
foreach (var (srcAccessor, dstAccessor) in others)
{
_builder.AddMethodSemantics(dstHandle, MethodSemanticsAttributes.Other, dstAccessor);
Trace?.Invoke($"Imported other {_reader.ToString(srcAccessor)} -> {RowId(dstAccessor)}");
}
var defaultValue = src.GetDefaultValue();
if (!defaultValue.IsNil)
ImportDefaultValue(defaultValue, dstHandle);
}