- Fixed issue #546: "ANXStatusComparer: params ignored"

This commit is contained in:
SND\AstrorEnales_cp 2011-12-27 11:57:11 +00:00
parent ad4fc131de
commit 5e5d7497d7
2 changed files with 211 additions and 2 deletions

View File

@ -65,6 +65,7 @@ namespace ANXStatusComparer.Data
Handle = method;
}
#region IsCorrect
public override bool IsCorrect(BaseObjectElement otherElement)
{
ConstructorElement other = otherElement as ConstructorElement;
@ -80,6 +81,78 @@ namespace ANXStatusComparer.Data
isCorrect = false;
}
ParameterInfo[] parameters = Handle.GetParameters();
ParameterInfo[] otherParameters = other.Handle.GetParameters();
if (parameters.Length != otherParameters.Length)
{
isCorrect = false;
}
else
{
for (int index = 0; index < parameters.Length; index++)
{
ParameterInfo thisParam = parameters[index];
ParameterInfo otherParam = otherParameters[index];
if (thisParam.IsIn != otherParam.IsIn)
{
isCorrect = false;
}
if (thisParam.IsOptional != otherParam.IsOptional)
{
isCorrect = false;
}
if (thisParam.IsOut != otherParam.IsOut)
{
isCorrect = false;
}
#region Check custom attributes
object[] thisAttributes = thisParam.GetCustomAttributes(false);
object[] otherAttributes = otherParam.GetCustomAttributes(false);
Dictionary<Type, int> thisAttribDict = new Dictionary<Type, int>();
Dictionary<Type, int> otherAttribDict = new Dictionary<Type, int>();
if (thisAttributes.Length != otherAttributes.Length)
{
isCorrect = false;
}
else
{
for (int attribIndex = 0; attribIndex < thisAttributes.Length; attribIndex++)
{
Type thisType = thisAttributes[attribIndex].GetType();
if (thisAttribDict.ContainsKey(thisType) == false)
{
thisAttribDict.Add(thisType, 0);
}
thisAttribDict[thisType]++;
Type otherType = otherAttributes[attribIndex].GetType();
if (otherAttribDict.ContainsKey(otherType) == false)
{
otherAttribDict.Add(otherType, 0);
}
otherAttribDict[otherType]++;
}
}
foreach (Type thisType in thisAttribDict.Keys)
{
if (otherAttribDict.ContainsKey(thisType) == false)
{
isCorrect = false;
break;
}
if (thisAttribDict[thisType] != otherAttribDict[thisType])
{
isCorrect = false;
break;
}
}
#endregion
}
}
if (Handle.IsFamily != other.Handle.IsFamily)
{
isCorrect = false;
@ -87,12 +160,43 @@ namespace ANXStatusComparer.Data
return isCorrect;
}
#endregion
public override string GetDescription()
{
return (Handle.IsPublic ? "PUBLIC " : "") +
string result = (Handle.IsPublic ? "PUBLIC " : "") +
(Handle.IsFamily ? "PROTECTED " : "") +
Handle.ToString();
#region Add attributes
ParameterInfo[] parameters = Handle.GetParameters();
result += " (Attributes: ";
for (int index = 0; index < parameters.Length; index++)
{
ParameterInfo thisParam = parameters[index];
object[] attributes = thisParam.GetCustomAttributes(false);
if (attributes.Length == 0)
{
continue;
}
result += thisParam.Position + ": ";
foreach (object attrib in attributes)
{
result += "[" + attrib.GetType().Name + "] ";
}
result += ", ";
}
result += ")";
if (result.EndsWith(" (Attributes: )"))
{
result = result.Substring(0, result.Length - 14);
}
#endregion
return result;
}
}
}

View File

@ -65,6 +65,7 @@ namespace ANXStatusComparer.Data
Handle = method;
}
#region IsCorrect
public override bool IsCorrect(BaseObjectElement otherElement)
{
MethodElement other = otherElement as MethodElement;
@ -80,6 +81,79 @@ namespace ANXStatusComparer.Data
isCorrect = false;
}
ParameterInfo[] parameters = Handle.GetParameters();
ParameterInfo[] otherParameters = other.Handle.GetParameters();
if (parameters.Length != otherParameters.Length)
{
isCorrect = false;
}
else
{
for (int index = 0; index < parameters.Length; index++)
{
ParameterInfo thisParam = parameters[index];
ParameterInfo otherParam = otherParameters[index];
if (thisParam.IsIn != otherParam.IsIn)
{
isCorrect = false;
}
if (thisParam.IsOptional != otherParam.IsOptional)
{
isCorrect = false;
}
if (thisParam.IsOut != otherParam.IsOut)
{
isCorrect = false;
}
#region Check custom attributes
object[] thisAttributes = thisParam.GetCustomAttributes(false);
object[] otherAttributes = otherParam.GetCustomAttributes(false);
Dictionary<Type, int> thisAttribDict = new Dictionary<Type, int>();
Dictionary<Type, int> otherAttribDict = new Dictionary<Type, int>();
if (thisAttributes.Length != otherAttributes.Length)
{
isCorrect = false;
}
else
{
for (int attribIndex = 0; attribIndex < thisAttributes.Length; attribIndex++)
{
Type thisType = thisAttributes[attribIndex].GetType();
if (thisAttribDict.ContainsKey(thisType) == false)
{
thisAttribDict.Add(thisType, 0);
}
thisAttribDict[thisType]++;
Type otherType = otherAttributes[attribIndex].GetType();
if (otherAttribDict.ContainsKey(otherType) == false)
{
otherAttribDict.Add(otherType, 0);
}
otherAttribDict[otherType]++;
}
}
foreach (Type thisType in thisAttribDict.Keys)
{
if (otherAttribDict.ContainsKey(thisType) == false)
{
isCorrect = false;
break;
}
if (thisAttribDict[thisType] != otherAttribDict[thisType])
{
isCorrect = false;
break;
}
}
#endregion
}
}
if (Handle.IsFamily != other.Handle.IsFamily)
{
isCorrect = false;
@ -87,12 +161,43 @@ namespace ANXStatusComparer.Data
return isCorrect;
}
#endregion
public override string GetDescription()
{
return (Handle.IsPublic ? "PUBLIC " : "") +
string result = (Handle.IsPublic ? "PUBLIC " : "") +
(Handle.IsFamily ? "PROTECTED " : "") +
Handle.ToString();
#region Add attributes
ParameterInfo[] parameters = Handle.GetParameters();
result += " (Attributes: ";
for (int index = 0; index < parameters.Length; index++)
{
ParameterInfo thisParam = parameters[index];
object[] attributes = thisParam.GetCustomAttributes(false);
if (attributes.Length == 0)
{
continue;
}
result += thisParam.Position + ": ";
foreach (object attrib in attributes)
{
result += "[" + attrib.GetType().Name + "] ";
}
result += ", ";
}
result += ")";
if (result.EndsWith(" (Attributes: )"))
{
result = result.Substring(0, result.Length - 14);
}
#endregion
return result;
}
}
}