mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-15 03:30:53 +01:00
new xaml error for invalid root node type (#2038)
Co-authored-by: Paul <ritter.paul1+git@googlemail.com>
This commit is contained in:
19
Robust.Client.NameGenerator/InvalidXamlRootTypeException.cs
Normal file
19
Robust.Client.NameGenerator/InvalidXamlRootTypeException.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using Microsoft.CodeAnalysis;
|
||||
|
||||
namespace Robust.Client.NameGenerator
|
||||
{
|
||||
public class InvalidXamlRootTypeException : Exception
|
||||
{
|
||||
public readonly INamedTypeSymbol ExpectedType;
|
||||
public readonly INamedTypeSymbol ExpectedBaseType;
|
||||
public readonly INamedTypeSymbol Actual;
|
||||
|
||||
public InvalidXamlRootTypeException(INamedTypeSymbol actual, INamedTypeSymbol expectedType, INamedTypeSymbol expectedBaseType)
|
||||
{
|
||||
Actual = actual;
|
||||
ExpectedType = expectedType;
|
||||
ExpectedBaseType = expectedBaseType;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -112,6 +112,12 @@ namespace Robust.Client.AutoGenerated
|
||||
compiler.Transform(parsed);
|
||||
var initialRoot = (XamlAstObjectNode) parsed.Root;
|
||||
var names = NameVisitor.GetNames(initialRoot);
|
||||
|
||||
var rootType = (INamedTypeSymbol)initialRoot.Type.GetClrType().Id;
|
||||
var rootTypeString = rootType.ToString();
|
||||
if (classSymbol.ToString() != rootTypeString && classSymbol.BaseType?.ToString() != rootTypeString)
|
||||
throw new InvalidXamlRootTypeException(rootType, classSymbol, classSymbol.BaseType);
|
||||
|
||||
var fieldAccess = classSymbol.IsSealed ? "private" : "protected";
|
||||
//var names = NameVisitor.GetNames((XamlAstObjectNode)XDocumentXamlParser.Parse(xamlFile).Root);
|
||||
var namedControls = names.Select(info => " " +
|
||||
@@ -204,6 +210,21 @@ namespace {nameSpace}
|
||||
var sourceCode = GenerateSourceCode(typeSymbol, txt, comp);
|
||||
context.AddSource($"{typeSymbol.Name}.g.cs", SourceText.From(sourceCode, Encoding.UTF8));
|
||||
}
|
||||
catch (InvalidXamlRootTypeException invRootType)
|
||||
{
|
||||
context.ReportDiagnostic(
|
||||
Diagnostic.Create(
|
||||
new DiagnosticDescriptor(
|
||||
"RXN0005",
|
||||
$"XAML-File {xamlFileName} has the wrong root type!",
|
||||
$"{xamlFileName}: Expected root type '{invRootType.ExpectedType}' or '{invRootType.ExpectedBaseType}', but got '{invRootType.Actual}'.",
|
||||
"Usage",
|
||||
DiagnosticSeverity.Error,
|
||||
true),
|
||||
Location.Create(xamlFileName, new TextSpan(0, 0),
|
||||
new LinePositionSpan(new LinePosition(0, 0), new LinePosition(0, 0)))));
|
||||
continue;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
context.ReportDiagnostic(
|
||||
@@ -257,7 +278,7 @@ namespace {nameSpace}
|
||||
context.ReportDiagnostic(
|
||||
Diagnostic.Create(
|
||||
new DiagnosticDescriptor(
|
||||
"RXN0004",
|
||||
"RXN0006",
|
||||
missingPartialKeywordMessage,
|
||||
missingPartialKeywordMessage,
|
||||
"Usage",
|
||||
|
||||
Reference in New Issue
Block a user