Skip to content

Commit 4d54391

Browse files
Add feature flagged support for showing compilation warnings after
1 parent 543bf97 commit 4d54391

7 files changed

Lines changed: 24 additions & 10 deletions

File tree

ICSharpCode.CodeConverter/CSharp/VBToCSConversion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public SyntaxNode SingleSecondPass(KeyValuePair<string, SyntaxTree> cs)
116116
return cSharpSyntaxNode;
117117
}
118118

119-
public string GetNonFatalWarningsOrNull()
119+
public string GetWarningsOrNull()
120120
{
121121
var finalCompilation = CreateCompilation(_secondPassResults);
122122
var targetErrors = GetDiagnostics(finalCompilation);

ICSharpCode.CodeConverter/ILanguageConversion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public interface ILanguageConversion
77
{
88
SyntaxTree SingleFirstPass(Compilation sourceCompilation, SyntaxTree tree);
99
SyntaxNode SingleSecondPass(KeyValuePair<string, SyntaxTree> cs);
10-
string GetNonFatalWarningsOrNull();
10+
string GetWarningsOrNull();
1111
SyntaxTree CreateTree(string text);
1212
Compilation CreateCompilationFromTree(SyntaxTree tree, IEnumerable<MetadataReference> references);
1313
List<SyntaxNode> FindSingleImportantChild(SyntaxNode annotatedNode);

ICSharpCode.CodeConverter/Shared/ProjectConversion.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace ICSharpCode.CodeConverter.Shared
1414
{
1515
public class ProjectConversion<TLanguageConversion> where TLanguageConversion : ILanguageConversion, new()
1616
{
17+
private readonly string _solutionDir;
1718
private readonly Compilation _sourceCompilation;
1819
private readonly IEnumerable<SyntaxTree> _syntaxTreesToConvert;
1920
private static readonly AdhocWorkspace AdhocWorkspace = new AdhocWorkspace();
@@ -25,6 +26,7 @@ namespace ICSharpCode.CodeConverter.Shared
2526
private ProjectConversion(Compilation sourceCompilation, string solutionDir)
2627
: this(sourceCompilation, sourceCompilation.SyntaxTrees.Where(t => t.FilePath.StartsWith(solutionDir)))
2728
{
29+
_solutionDir = solutionDir;
2830
}
2931

3032
private ProjectConversion(Compilation sourceCompilation, IEnumerable<SyntaxTree> syntaxTreesToConvert)
@@ -53,7 +55,8 @@ public static async Task<ConversionResult> ConvertSingle(Compilation compilation
5355

5456
var conversion = new ProjectConversion<TLanguageConversion>(compilation, new [] {syntaxTree});
5557
var conversionResults = ConvertProject(conversion).ToList();
56-
var codeResult = conversionResults.Single(x => !string.IsNullOrWhiteSpace(x.ConvertedCode));
58+
var codeResult = conversionResults.SingleOrDefault(x => !string.IsNullOrWhiteSpace(x.ConvertedCode))
59+
?? conversionResults.First();
5760
codeResult.Exceptions = conversionResults.SelectMany(x => x.Exceptions).ToArray();
5861
return codeResult;
5962
}
@@ -88,6 +91,9 @@ private Dictionary<string, SyntaxNode> Convert()
8891
{
8992
FirstPass();
9093
var secondPassByFilePath = SecondPass();
94+
#if DEBUG && false
95+
AddProjectWarnings();
96+
#endif
9197
return secondPassByFilePath;
9298
}
9399

@@ -103,13 +109,19 @@ private Dictionary<string, SyntaxNode> SecondPass()
103109
_errors.TryAdd(treeFilePath, e.ToString());
104110
}
105111
}
106-
var nonFatalWarningsOrNull = _languageConversion.GetNonFatalWarningsOrNull();
107-
if (!string.IsNullOrWhiteSpace(nonFatalWarningsOrNull)) {
108-
_errors.TryAdd("", nonFatalWarningsOrNull);
109-
}
110112
return secondPassByFilePath;
111113
}
112114

115+
private void AddProjectWarnings()
116+
{
117+
var nonFatalWarningsOrNull = _languageConversion.GetWarningsOrNull();
118+
if (!string.IsNullOrWhiteSpace(nonFatalWarningsOrNull))
119+
{
120+
var warningsDescription = Path.Combine(_solutionDir ?? "", _sourceCompilation.AssemblyName, "ConversionWarnings.txt");
121+
_errors.TryAdd(warningsDescription, nonFatalWarningsOrNull);
122+
}
123+
}
124+
113125
private SyntaxNode SingleSecondPass(KeyValuePair<string, SyntaxTree> cs)
114126
{
115127
var secondPassNode = _languageConversion.SingleSecondPass(cs);

ICSharpCode.CodeConverter/Util/ExceptionWithNodeInformation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public ExceptionWithNodeInformation(Exception innerException, SyntaxNode excepti
1414

1515
public override string ToString()
1616
{
17-
return $"{Message} in {ExceptionCause.GetBriefNodeDescription()}{Environment.NewLine}{StackTrace}";
17+
return $"CONVERSION ERROR: {Message} in {ExceptionCause.GetBriefNodeDescription()}{Environment.NewLine}{StackTrace}";
1818
}
1919
}
2020
}

ICSharpCode.CodeConverter/Util/SyntaxNodeExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1683,7 +1683,7 @@ public static string GetBriefNodeDescription(this SyntaxNode node)
16831683

16841684
public static string DescribeConversionError(this SyntaxNode node, Exception e)
16851685
{
1686-
return $"CONVERSION ERROR: Cannot convert {node.GetType().Name}, {e}{Environment.NewLine}{Environment.NewLine}" +
1686+
return $"Cannot convert {node.GetType().Name}, {e}{Environment.NewLine}{Environment.NewLine}" +
16871687
$"Input: {Environment.NewLine}{node.ToFullString()}{Environment.NewLine}";
16881688
}
16891689

ICSharpCode.CodeConverter/VB/CSToVBConversion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public SyntaxNode SingleSecondPass(KeyValuePair<string, SyntaxTree> cs)
8383
return cs.Value.GetRoot();
8484
}
8585

86-
public string GetNonFatalWarningsOrNull()
86+
public string GetWarningsOrNull()
8787
{
8888
return null;
8989
}

Vsix/CodeConversion.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ private static string ConvertExtension(string currentExtension)
150150
return ".cs";
151151
case ".cs":
152152
return ".vb";
153+
case ".txt":
154+
return ".txt";
153155
default:
154156
throw new ArgumentOutOfRangeException(nameof(currentExtension), currentExtension, null);
155157
}

0 commit comments

Comments
 (0)