Skip to content

Commit ccc9d51

Browse files
Transform define constants - doesn't handle DefineTrace and DefineDebug
1 parent 33e39cb commit ccc9d51

File tree

6 files changed

+35
-5
lines changed

6 files changed

+35
-5
lines changed

ICSharpCode.CodeConverter/CSharp/VBToCSConversion.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,21 @@ public SyntaxNode GetSurroundedNode(IEnumerable<SyntaxNode> descendantNodes,
5858
};
5959
}
6060

61+
public string PostTransformProjectFile(string s)
62+
{
63+
// TODO Find API to, or parse project file sections to remove "<DefineDebug>true</DefineDebug>" + "<DefineTrace>true</DefineTrace>"
64+
// Then add them to the define constants in the same section, or create one if necessary.
65+
66+
var defineConstantsStart = s.IndexOf("<DefineConstants>");
67+
var defineConstantsEnd = s.IndexOf("</DefineConstants>");
68+
if (defineConstantsStart == -1 || defineConstantsEnd == -1)
69+
return s;
70+
71+
return s.Substring(0, defineConstantsStart) +
72+
s.Substring(defineConstantsStart, defineConstantsEnd - defineConstantsStart).Replace(",", ";") +
73+
s.Substring(defineConstantsEnd);
74+
}
75+
6176
public string TargetLanguage { get; } = LanguageNames.CSharp;
6277

6378
public bool CanBeContainedByMethod(SyntaxNode node)

ICSharpCode.CodeConverter/ILanguageConversion.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ SyntaxNode GetSurroundedNode(IEnumerable<SyntaxNode> descendantNodes,
2323
IEnumerable<(string, string)> GetProjectFileReplacementRegexes();
2424
string TargetLanguage { get; }
2525
void Initialize(Compilation convertedCompilation);
26+
string PostTransformProjectFile(string s);
2627
}
2728
}

ICSharpCode.CodeConverter/Shared/SolutionConverter.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private IEnumerable<ConversionResult> ConvertProject(IEnumerable<(string, string
5959
var replacements = _projectReferenceReplacements.Concat(projectFileReplacementRegexes).ToArray();
6060
_progress.Report($"Converting {project.Name}, this may take a some time...");
6161
return ProjectConversion.ConvertProjectContents(project, _languageConversion).Concat(new[]
62-
{ConversionResultFromReplacements(project.FilePath, replacements)}
62+
{ConversionResultFromReplacements(project.FilePath, replacements, s => _languageConversion.PostTransformProjectFile(s))}
6363
);
6464
}
6565

@@ -100,11 +100,12 @@ private ConversionResult ConvertSolutionFile()
100100
};
101101
}
102102

103-
private static ConversionResult ConversionResultFromReplacements(string filePath, IEnumerable<(string, string)> replacements)
103+
private static ConversionResult ConversionResultFromReplacements(string filePath, IEnumerable<(string, string)> replacements, Func<string, string> postReplacementTransform = null)
104104
{
105+
postReplacementTransform = postReplacementTransform ?? (s => s);
105106
var newProjectText = File.ReadAllText(filePath);
106107
newProjectText = ApplyReplacements(newProjectText, replacements);
107-
return new ConversionResult(newProjectText) {SourcePathOrNull = filePath};
108+
return new ConversionResult(postReplacementTransform(newProjectText)) {SourcePathOrNull = filePath};
108109
}
109110

110111
private static string ApplyReplacements(string originalText, IEnumerable<(string, string)> replacements)

ICSharpCode.CodeConverter/VB/CSToVBConversion.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ public SyntaxNode GetSurroundedNode(IEnumerable<SyntaxNode> descendantNodes,
5757
(".cs<", ".vb<")
5858
};
5959
}
60+
public string PostTransformProjectFile(string s)
61+
{
62+
var startTag = "<DefineConstants>";
63+
var endTag = "</DefineConstants>";
64+
var defineConstantsStart = s.IndexOf(startTag);
65+
var defineConstantsEnd = s.IndexOf(endTag);
66+
if (defineConstantsStart == -1 || defineConstantsEnd == -1)
67+
return s;
68+
69+
return s.Substring(0, defineConstantsStart) +
70+
s.Substring(defineConstantsStart, defineConstantsEnd - defineConstantsStart).Replace(";", ",") +
71+
s.Substring(defineConstantsEnd);
72+
}
6073

6174
public string TargetLanguage { get; } = LanguageNames.VisualBasic;
6275

TestData/CSToVBConversion/ConvertSingleProject/ConsoleApp2/CSharpConsoleApp.vbproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<DebugType>full</DebugType>
1919
<Optimize>false</Optimize>
2020
<OutputPath>bin\Debug\</OutputPath>
21-
<DefineConstants>DEBUG;TRACE</DefineConstants>
21+
<DefineConstants>DEBUG,TRACE</DefineConstants>
2222
<ErrorReport>prompt</ErrorReport>
2323
<WarningLevel>4</WarningLevel>
2424
</PropertyGroup>

TestData/CSToVBConversion/ConvertSolution/ConsoleApp2/CSharpConsoleApp.vbproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<DebugType>full</DebugType>
1919
<Optimize>false</Optimize>
2020
<OutputPath>bin\Debug\</OutputPath>
21-
<DefineConstants>DEBUG;TRACE</DefineConstants>
21+
<DefineConstants>DEBUG,TRACE</DefineConstants>
2222
<ErrorReport>prompt</ErrorReport>
2323
<WarningLevel>4</WarningLevel>
2424
</PropertyGroup>

0 commit comments

Comments
 (0)