/// <summary> /// Gets the members defined in this type. /// </summary> /// <returns>The list of <see cref="MemberMapper"/> representing the members.</returns> public IEnumerable <MemberMapper> GetMembers() { if (_members == null) { _members = new Dictionary <ISymbol, MemberMapper>(Settings.EqualityComparer); AddOrCreateMappers(Left, ElementSide.Left); if (Right.Length == 1) { AddOrCreateMappers(Right[0], ElementSide.Right); } else { for (int i = 0; i < Right.Length; i++) { AddOrCreateMappers(Right[i], ElementSide.Right, i); } } void AddOrCreateMappers(ITypeSymbol symbol, ElementSide side, int setIndex = 0) { if (symbol == null) { return; } foreach (ISymbol member in symbol.GetMembers()) { // when running without references Roslyn doesn't filter out the special value__ field emitted // for enums. The reason why we should filter it out, is because we could have a case // where one side was loaded with references and one that was loaded without, if that is the case // we would compare __value vs null and emit some warnings. if (Settings.Filter.Include(member) && member is not ITypeSymbol && !IsSpecialEnumField(member)) { if (!_members.TryGetValue(member, out MemberMapper mapper)) { mapper = new MemberMapper(Settings, this, Right.Length); _members.Add(member, mapper); } mapper.AddElement(member, side, setIndex); } } } } return(_members.Values); }
/// <summary> /// Gets the members defined in this type. /// </summary> /// <returns>The list of <see cref="MemberMapper"/> representing the members.</returns> public IEnumerable <MemberMapper> GetMembers() { if (_members == null) { _members = new Dictionary <ISymbol, MemberMapper>(Settings.EqualityComparer); AddOrCreateMappers(Left, ElementSide.Left); if (Right.Length == 1) { AddOrCreateMappers(Right[0], ElementSide.Right); } else { for (int i = 0; i < Right.Length; i++) { AddOrCreateMappers(Right[i], ElementSide.Right, i); } } void AddOrCreateMappers(ITypeSymbol symbol, ElementSide side, int setIndex = 0) { if (symbol == null) { return; } foreach (ISymbol member in symbol.GetMembers()) { if (Settings.Filter.Include(member) && member is not ITypeSymbol) { if (!_members.TryGetValue(member, out MemberMapper mapper)) { mapper = new MemberMapper(Settings, this, Right.Length); _members.Add(member, mapper); } mapper.AddElement(member, side, setIndex); } } } } return(_members.Values); }
public virtual void Run(MemberMapper mapper, List <CompatDifference> differences) { }
/// <summary> /// Visits the <see cref="MemberMapper"/>. /// </summary> /// <param name="mapper">The <see cref="MemberMapper"/> to visit.</param> public virtual void Visit(MemberMapper mapper) { }