in src/Refasmer/Importer/SimpleImports.cs [76:104]
private MemberReferenceHandle Import( MemberReferenceHandle srcHandle ) =>
ImportEntity(srcHandle, _memberReferenceCache, _reader.GetMemberReference,
src => _builder.AddMemberReference(Import(src.Parent), ImportValue(src.Name),
ImportSignatureWithHeader(src.Signature)),
_reader.ToString, IsNil);
//---------
private THandle ImportEntity<TEntity, THandle>( THandle srcHandle, IDictionary<THandle, THandle> cache,
Func<THandle, TEntity> getEntity, Func<TEntity, THandle> import, Func<THandle, string> toString, Func<THandle, bool> isNil )
{
if (cache.TryGetValue(srcHandle, out var dstHandle))
return dstHandle;
dstHandle = import(getEntity(srcHandle));
if (isNil(dstHandle))
{
Trace?.Invoke($"Not imported {toString(srcHandle)}");
return dstHandle;
}
cache.Add(srcHandle, dstHandle);
Trace?.Invoke($"Imported {toString(srcHandle)} -> {RowId(dstHandle!)}");
return dstHandle;
}