public IMemberDefinition Compose(ContributedConflictGroup group, MethodAttributes accessSpecifier)
        {
            Group = group;
              if (group.ImplementedMember != null) {
            return group.ImplementedMember;
              }
              if (group.DontImplement) {
            return null;
              }

              if (group.IsSuperceded) {
            // the superceding member in the class is the implementing member for the role member
            return group.ImplementedMember = AdjustSupercedingMember(group.Supercede, group.ResolveOverridingMembers());
              }

              if (group.IsBaseMethod) {
            ImplementBaseMethod(group.Members[0], group.ResolveOverridingMembers()); // any member will do, they all point to the same base method
            // TODO: use the ImplementedMember here?
            return null;
              }

              // the resolved member implements all the other members in the group by calling its implementing member
              var resolvedMember = group.ResolvedMember;

              if (resolvedMember == null) {
            // this member does not get composed (it will be aliased by another member)
            return null;
              }

              var implementedMember = ImplementMember(
            resolvedMember.Definition.Name,
            resolvedMember.ResolveImplementingMember(),
            group.ResolveOverridingMembers(),
            accessSpecifier);
              if (implementedMember == null) {
            // this member was not implemented (it was provided by a base class)
            return null;
              }
              if (group.ReuseSlot) {
            ((MethodDefinition)implementedMember).IsNewSlot = false;
              }
              return group.ImplementedMember = implementedMember;
        }