Browse Source

Fixed SD2-1529 - Forms designer rewrites array field declarations.

Fixed NRefactory -> CodeDOM output for array types.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3833 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Christian Hornung 17 years ago
parent
commit
066ef2d4c3
  1. 40
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  2. 7
      src/Libraries/NRefactory/Project/Src/Visitors/CodeDOMOutputVisitor.cs

40
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs

@ -305,9 +305,9 @@ namespace ICSharpCode.FormsDesigner @@ -305,9 +305,9 @@ namespace ICSharpCode.FormsDesigner
static bool FieldChanged(IField oldField, CodeMemberField newField)
{
// compare types
if (oldField.ReturnType != null && oldField.ReturnType.GetUnderlyingClass() != null) { // ignore type changes to untyped VB fields
if (oldField.ReturnType.GetUnderlyingClass().DotNetName != newField.Type.BaseType) {
LoggingService.Debug("FieldChanged: "+oldField.Name+", "+oldField.ReturnType.FullyQualifiedName+" -> "+newField.Type.BaseType);
if (oldField.ReturnType != null && newField.Type != null) {
if (AreTypesDifferent(oldField.ReturnType, newField.Type)) {
LoggingService.Debug("FieldChanged (type): "+oldField.Name+", "+oldField.ReturnType.FullyQualifiedName+" -> "+newField.Type.BaseType);
return true;
}
}
@ -335,6 +335,40 @@ namespace ICSharpCode.FormsDesigner @@ -335,6 +335,40 @@ namespace ICSharpCode.FormsDesigner
return false;
}
static bool AreTypesDifferent(IReturnType oldType, CodeTypeReference newType)
{
IClass oldClass = oldType.GetUnderlyingClass();
if (oldClass == null) {
// ignore type changes to untyped VB fields
return false;
}
ArrayReturnType oldArray = oldType.IsArrayReturnType ? oldType.CastToArrayReturnType() : null;
if (oldArray == null ^ newType.ArrayRank < 1)
{
return true;
}
if (oldArray == null) {
if (oldClass.DotNetName != newType.BaseType) {
return true;
}
} else {
if (oldArray.ArrayDimensions != newType.ArrayRank) {
return true;
}
if (AreTypesDifferent(oldArray.ArrayElementType, newType.ArrayElementType)) {
return true;
}
}
return false;
}
protected void Reparse()
{
Dictionary<OpenedFile, ParseInformation> parsings = new Dictionary<OpenedFile, ParseInformation>();

7
src/Libraries/NRefactory/Project/Src/Visitors/CodeDOMOutputVisitor.cs

@ -93,7 +93,10 @@ namespace ICSharpCode.NRefactory.Visitors @@ -93,7 +93,10 @@ namespace ICSharpCode.NRefactory.Visitors
t.TypeArguments.Add(ConvType(gt));
}
if (type.IsArrayType) {
t = new CodeTypeReference(t, type.RankSpecifier.Length);
for (int i = type.RankSpecifier.Length - 1; i >= 0; --i)
{
t = new CodeTypeReference(t, type.RankSpecifier[i] + 1);
}
}
return t;
@ -1439,7 +1442,7 @@ namespace ICSharpCode.NRefactory.Visitors @@ -1439,7 +1442,7 @@ namespace ICSharpCode.NRefactory.Visitors
public override object VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data)
{
if (arrayCreateExpression.ArrayInitializer == null) {
if (arrayCreateExpression.ArrayInitializer.IsNull) {
return new CodeArrayCreateExpression(ConvType(arrayCreateExpression.CreateType),
arrayCreateExpression.Arguments[0].AcceptVisitor(this, data) as CodeExpression);
}

Loading…
Cancel
Save