Browse Source

Fix missing array type when converting VB.NET multiple fields on a single line to Python.

4.0
Matt Ward 14 years ago
parent
commit
fdd4223116
  1. 22
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/NRefactoryToPythonConverter.cs
  2. 20
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MultipleFieldsOnSameLineTests.cs

22
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/NRefactoryToPythonConverter.cs

@ -1729,9 +1729,13 @@ namespace ICSharpCode.PythonBinding @@ -1729,9 +1729,13 @@ namespace ICSharpCode.PythonBinding
/// </summary>
void CreateFieldInitialization(FieldDeclaration field)
{
foreach (VariableDeclaration variable in field.Fields) {
for (int i = 0; i < field.Fields.Count; ++i) {
VariableDeclaration variable = field.Fields[i];
// Ignore field if it has no initializer.
if (FieldHasInitialValue(variable)) {
AddTypeToArrayInitializerIfMissing(variable);
string oldVariableName = variable.Name;
variable.Name = "self._" + variable.Name;
VisitVariableDeclaration(variable, null);
@ -1740,6 +1744,22 @@ namespace ICSharpCode.PythonBinding @@ -1740,6 +1744,22 @@ namespace ICSharpCode.PythonBinding
}
}
void AddTypeToArrayInitializerIfMissing(VariableDeclaration variable)
{
ArrayCreateExpression arrayCreate = variable.Initializer as ArrayCreateExpression;
if (IsArrayMissingTypeToCreate(arrayCreate)) {
arrayCreate.CreateType = variable.TypeReference;
}
}
bool IsArrayMissingTypeToCreate(ArrayCreateExpression arrayCreate)
{
if (arrayCreate != null) {
return String.IsNullOrEmpty(arrayCreate.CreateType.Type);
}
return false;
}
/// <summary>
/// Adds the method or constructor parameters.
/// </summary>

20
src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/MultipleFieldsOnSameLineTests.cs

@ -82,5 +82,25 @@ namespace PythonBinding.Tests.Converter @@ -82,5 +82,25 @@ namespace PythonBinding.Tests.Converter
Assert.AreEqual(expectedPython, python);
}
string vnetClassWithTwoArrayFieldsOnSameLine =
"class Foo\r\n" +
" Private i(10), j(20) as integer\r\n" +
"end class";
[Test]
public void ConvertVBNetClassWithTwoArrayFieldsOnSameLine()
{
NRefactoryToPythonConverter converter = new NRefactoryToPythonConverter(SupportedLanguage.VBNet);
converter.IndentString = " ";
string python = converter.Convert(vnetClassWithTwoArrayFieldsOnSameLine);
string expectedPython =
"class Foo(object):\r\n" +
" def __init__(self):\r\n" +
" self._i = Array.CreateInstance(int, 10)\r\n" +
" self._j = Array.CreateInstance(int, 20)";
Assert.AreEqual(expectedPython, python);
}
}
}

Loading…
Cancel
Save