Skip to content

Commit

Permalink
[corcompare] Show extension argument changes. Make parameter name dif…
Browse files Browse the repository at this point in the history
…ference breaking change.
  • Loading branch information
marek-safar committed Aug 25, 2016
1 parent 6d1a78e commit 01038e7
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
13 changes: 10 additions & 3 deletions mcs/tools/corcompare/mono-api-info.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1089,9 +1089,12 @@ protected override void AddExtraData (MemberReference memberDefenition)
if (!(memberDefenition is MethodDefinition))
return;

MethodDefinition mbase = (MethodDefinition) memberDefenition;
MethodDefinition mbase = (MethodDefinition)memberDefenition;

ParameterData parms = new ParameterData (writer, mbase.Parameters) {
HasExtensionParameter = mbase.CustomAttributes.Any (l => l.AttributeType.FullName == "System.Runtime.CompilerServices.ExtensionAttribute")
};

ParameterData parms = new ParameterData (writer, mbase.Parameters);
parms.DoOutput ();

MemberData.OutputGenericParameters (writer, mbase);
Expand Down Expand Up @@ -1137,16 +1140,20 @@ public ParameterData (XmlWriter writer, IList<ParameterDefinition> parameters)
this.parameters = parameters;
}

public bool HasExtensionParameter { get; set; }

public override void DoOutput ()
{
bool first = true;
writer.WriteStartElement ("parameters");
foreach (ParameterDefinition parameter in parameters) {
writer.WriteStartElement ("parameter");
AddAttribute ("name", parameter.Name);
AddAttribute ("position", parameter.Method.Parameters.IndexOf(parameter).ToString(CultureInfo.InvariantCulture));
AddAttribute ("attrib", ((int) parameter.Attributes).ToString());

string direction = "in";
string direction = first && HasExtensionParameter ? "this" : "in";
first = false;

if (parameter.ParameterType is ByReferenceType)
direction = parameter.IsOut ? "out" : "ref";
Expand Down
21 changes: 18 additions & 3 deletions mcs/tools/mono-api-html/MemberComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -342,25 +342,40 @@ protected void RenderParameters (XElement source, XElement target, ApiChange cha
if (i > 0)
change.Append (", ");

string mods_tgt = tgt [i].GetAttribute ("direction") ?? "";
string mods_src = src [i].GetAttribute ("direction") ?? "";

if (mods_tgt.Length > 0)
mods_tgt = mods_tgt + " ";

if (mods_src.Length > 0)
mods_src = mods_src + " ";

if (i >= srcCount) {
change.AppendAdded (tgt [i].GetTypeName ("type") + " " + tgt [i].GetAttribute ("name"), true);
change.AppendAdded (mods_tgt + tgt [i].GetTypeName ("type") + " " + tgt [i].GetAttribute ("name"), true);
} else if (i >= tgtCount) {
change.AppendRemoved (src [i].GetTypeName ("type") + " " + src [i].GetAttribute ("name"), true);
change.AppendRemoved (mods_src + src [i].GetTypeName ("type") + " " + src [i].GetAttribute ("name"), true);
} else {
var paramSourceType = src [i].GetTypeName ("type");
var paramTargetType = tgt [i].GetTypeName ("type");

var paramSourceName = src [i].GetAttribute ("name");
var paramTargetName = tgt [i].GetAttribute ("name");

if (mods_src != mods_tgt) {
change.AppendModified (mods_src, mods_tgt, true);
} else {
change.Append (mods_src);
}

if (paramSourceType != paramTargetType) {
change.AppendModified (paramSourceType, paramTargetType, true);
} else {
change.Append (paramSourceType);
}
change.Append (" ");
if (paramSourceName != paramTargetName) {
change.AppendModified (paramSourceName, paramTargetName, false);
change.AppendModified (paramSourceName, paramTargetName, true);
} else {
change.Append (paramSourceName);
}
Expand Down

0 comments on commit 01038e7

Please sign in to comment.