Browse Source

Fixed SD2-963: Incorrect VB to C# convertion for public structure variables

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1648 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
c0d3486c47
  1. 18
      src/Libraries/NRefactory/Project/Src/Visitors/VBNetConstructsConvertVisitor.cs
  2. 7
      src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs

18
src/Libraries/NRefactory/Project/Src/Visitors/VBNetConstructsConvertVisitor.cs

@ -34,6 +34,7 @@ namespace ICSharpCode.NRefactory.Visitors @@ -34,6 +34,7 @@ namespace ICSharpCode.NRefactory.Visitors
Dictionary<string, string> usings;
List<UsingDeclaration> addedUsings;
bool isInStructure;
public override object VisitCompilationUnit(CompilationUnit compilationUnit, object data)
{
@ -62,11 +63,20 @@ namespace ICSharpCode.NRefactory.Visitors @@ -62,11 +63,20 @@ namespace ICSharpCode.NRefactory.Visitors
return base.VisitUsing(@using, data);
}
public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data)
{
bool oldIsInStructure = isInStructure;
isInStructure = typeDeclaration.Type == ClassType.Struct;
base.VisitTypeDeclaration(typeDeclaration, data);
isInStructure = oldIsInStructure;
return null;
}
public override object VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, object data)
{
// make constructor public if visiblity is not set (unless constructor is static)
if ((constructorDeclaration.Modifier & (Modifiers.Visibility | Modifiers.Static)) == 0)
constructorDeclaration.Modifier = Modifiers.Public;
constructorDeclaration.Modifier |= Modifiers.Public;
// MyBase.New() and MyClass.New() calls inside the constructor are converted to :base() and :this()
BlockStatement body = constructorDeclaration.Body;
@ -269,13 +279,17 @@ namespace ICSharpCode.NRefactory.Visitors @@ -269,13 +279,17 @@ namespace ICSharpCode.NRefactory.Visitors
public override object VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data)
{
fieldDeclaration.Modifier &= ~Modifiers.Dim; // remove "Dim" flag
if (isInStructure) {
if ((fieldDeclaration.Modifier & Modifiers.Visibility) == 0)
fieldDeclaration.Modifier |= Modifiers.Public;
}
return base.VisitFieldDeclaration(fieldDeclaration, data);
}
public override object VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, object data)
{
if ((propertyDeclaration.Modifier & Modifiers.Visibility) == 0)
propertyDeclaration.Modifier = Modifiers.Public;
propertyDeclaration.Modifier |= Modifiers.Public;
if (propertyDeclaration.HasSetRegion) {
string from = "Value";

7
src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs

@ -511,5 +511,12 @@ static int static_Test2_j = 0;"); @@ -511,5 +511,12 @@ static int static_Test2_j = 0;");
"End With",
"{\n\tEjes.AddLine(p1, p2);\n}");
}
[Test]
public void StructureWithImplicitPublicField()
{
TestMember("Public Structure Example \n Dim x As Object \n End Structure",
"public struct Example\n{\n\tpublic object x;\n}");
}
}
}

Loading…
Cancel
Save