From df393a90edea6204a4eaf95a404041b803069892 Mon Sep 17 00:00:00 2001 From: ChebanovDD Date: Fri, 7 Jul 2023 18:02:50 +0800 Subject: [PATCH 1/3] Add todo. --- src/UnityUxmlGenerator/UxmlGenerator.Widgets.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/UnityUxmlGenerator/UxmlGenerator.Widgets.cs b/src/UnityUxmlGenerator/UxmlGenerator.Widgets.cs index 2f68c76..23178f4 100644 --- a/src/UnityUxmlGenerator/UxmlGenerator.Widgets.cs +++ b/src/UnityUxmlGenerator/UxmlGenerator.Widgets.cs @@ -164,6 +164,7 @@ private static FieldDeclarationSyntax FieldWidget( { var variableDeclaration = VariableDeclarator(Identifier(identifier)); + // TODO: Change to BaseObjectCreationExpressionSyntax. if (initializer is not null) { variableDeclaration = variableDeclaration.WithInitializer(EqualsValueClause(ImplicitObjectCreationExpression() From 995cc01d6c85b9357a171a26bfb9415a2970dab7 Mon Sep 17 00:00:00 2001 From: ChebanovDD Date: Fri, 7 Jul 2023 18:14:52 +0800 Subject: [PATCH 2/3] Resolve #14. Fix generic type arguments issue. --- .../Runtime/UnityUxmlGenerator.dll | Bin 35840 -> 36352 bytes .../Captures/UxmlTraitsCapture.cs | 6 +- .../Extensions/StringBuilderExtensions.cs | 79 ++++++++++++++++++ .../Extensions/SyntaxNodeExtensions.cs | 9 +- .../UxmlGenerator.Traits.cs | 23 ++--- 5 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 src/UnityUxmlGenerator/Extensions/StringBuilderExtensions.cs diff --git a/src/UnityUxmlGenerator.UnityPackage/Assets/Plugins/UnityUxmlGenerator/Runtime/UnityUxmlGenerator.dll b/src/UnityUxmlGenerator.UnityPackage/Assets/Plugins/UnityUxmlGenerator/Runtime/UnityUxmlGenerator.dll index 413a8eb26c1c282135fbb66101459d4803b34604..abb1cd13386ffae338378d00c3dea4acf282f96c 100644 GIT binary patch delta 14434 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 delta 13790 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 Properties { get; } - public string GetBaseClassName(out TypeSyntax? genericTypeSyntax) + public string GetBaseClassName(out IEnumerable? genericTypeArguments) { if (BaseClassType is GenericNameSyntax genericNameSyntax) { - genericTypeSyntax = genericNameSyntax.TypeArgumentList.Arguments[0]; + genericTypeArguments = genericNameSyntax.TypeArgumentList.Arguments; return genericNameSyntax.Identifier.Text; } - genericTypeSyntax = default; + genericTypeArguments = default; if (BaseClassType is IdentifierNameSyntax identifierNameSyntax) { diff --git a/src/UnityUxmlGenerator/Extensions/StringBuilderExtensions.cs b/src/UnityUxmlGenerator/Extensions/StringBuilderExtensions.cs new file mode 100644 index 0000000..b0fbc8f --- /dev/null +++ b/src/UnityUxmlGenerator/Extensions/StringBuilderExtensions.cs @@ -0,0 +1,79 @@ +using System.Text; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace UnityUxmlGenerator.Extensions; + +public static class StringBuilderExtensions +{ + public static void AppendGenericString(this StringBuilder stringBuilder, GeneratorExecutionContext context, + IEnumerable genericTypeArguments) + { + var isFirstArgument = true; + + stringBuilder.Append('<'); + + foreach (var genericClassTypeSyntax in genericTypeArguments) + { + if (isFirstArgument == false) + { + stringBuilder.Append(", "); + } + + isFirstArgument = false; + + switch (genericClassTypeSyntax) + { + case PredefinedTypeSyntax predefinedTypeSyntax: + AppendPredefinedTypeSyntax(stringBuilder, predefinedTypeSyntax); + break; + + case IdentifierNameSyntax identifierNameSyntax: + AppendIdentifierNameSyntax(stringBuilder, context, identifierNameSyntax); + break; + + case GenericNameSyntax genericTypeSyntax: + AppendGenericTypeSyntax(stringBuilder, context, genericTypeSyntax); + break; + } + } + + stringBuilder.Append('>'); + } + + private static void AppendPredefinedTypeSyntax(StringBuilder stringBuilder, + PredefinedTypeSyntax predefinedTypeSyntax) + { + stringBuilder.Append(predefinedTypeSyntax.Keyword.Text); + } + + private static void AppendIdentifierNameSyntax(StringBuilder stringBuilder, GeneratorExecutionContext context, + IdentifierNameSyntax identifierNameSyntax) + { + var genericClassName = identifierNameSyntax.Identifier.Text; + var genericClassNamespace = identifierNameSyntax.GetTypeNamespace(context); + + stringBuilder.Append("global::"); + stringBuilder.Append(genericClassNamespace); + stringBuilder.Append('.'); + stringBuilder.Append(genericClassName); + } + + private static void AppendGenericTypeSyntax(StringBuilder stringBuilder, GeneratorExecutionContext context, + GenericNameSyntax genericTypeSyntax) + { + var genericClassName = genericTypeSyntax.Identifier.Text; + var genericClassNamespace = genericTypeSyntax.GetTypeNamespace(context); + + if (string.IsNullOrWhiteSpace(genericClassNamespace) == false) + { + stringBuilder.Append("global::"); + stringBuilder.Append(genericClassNamespace); + stringBuilder.Append('.'); + } + + stringBuilder.Append(genericClassName); + + AppendGenericString(stringBuilder, context, genericTypeSyntax.TypeArgumentList.Arguments); + } +} \ No newline at end of file diff --git a/src/UnityUxmlGenerator/Extensions/SyntaxNodeExtensions.cs b/src/UnityUxmlGenerator/Extensions/SyntaxNodeExtensions.cs index df753d5..f940fee 100644 --- a/src/UnityUxmlGenerator/Extensions/SyntaxNodeExtensions.cs +++ b/src/UnityUxmlGenerator/Extensions/SyntaxNodeExtensions.cs @@ -52,6 +52,13 @@ when qualifiedNameSyntax.Right.Identifier.Text.Contains(attributeName): public static string? GetTypeNamespace(this SyntaxNode syntaxNode, GeneratorExecutionContext context) { - return GetTypeSymbol(syntaxNode, context)?.ContainingNamespace.ToString(); + var containingNamespace = GetTypeSymbol(syntaxNode, context)?.ContainingNamespace; + + if (containingNamespace is null || containingNamespace.IsGlobalNamespace) + { + return null; + } + + return containingNamespace.ToString(); } } \ No newline at end of file diff --git a/src/UnityUxmlGenerator/UxmlGenerator.Traits.cs b/src/UnityUxmlGenerator/UxmlGenerator.Traits.cs index b60c9ed..a2990d3 100644 --- a/src/UnityUxmlGenerator/UxmlGenerator.Traits.cs +++ b/src/UnityUxmlGenerator/UxmlGenerator.Traits.cs @@ -133,28 +133,23 @@ private static StatementSyntax GetAttributeValueAssignmentStatement(string prope private static string GetBaseClassName(GeneratorExecutionContext context, UxmlTraitsCapture capture) { - var baseClassName = capture.GetBaseClassName(out var genericClass); + var baseClassName = capture.GetBaseClassName(out var genericTypeArguments); var baseClassNamespace = capture.BaseClassType.GetTypeNamespace(context); - if (genericClass is null) + if (genericTypeArguments is null) { return $"global::{baseClassNamespace}.{baseClassName}"; } - if (genericClass is PredefinedTypeSyntax predefinedTypeSyntax) - { - return $"global::{baseClassNamespace}.{baseClassName}<{predefinedTypeSyntax.Keyword.Text}>"; - } + var stringBuilder = new StringBuilder(); - if (genericClass is IdentifierNameSyntax customTypeSyntax) - { - var genericClassName = customTypeSyntax.Identifier.Text; - var genericClassNamespace = customTypeSyntax.GetTypeNamespace(context); - - return $"global::{baseClassNamespace}.{baseClassName}"; - } + stringBuilder.Append("global::"); + stringBuilder.Append(baseClassNamespace); + stringBuilder.Append('.'); + stringBuilder.Append(baseClassName); + stringBuilder.AppendGenericString(context, genericTypeArguments); - return string.Empty; + return stringBuilder.ToString(); } private static bool TryGetUxmlAttributeInfo(GeneratorExecutionContext context, PropertyDeclarationSyntax property, From a07beb4d3b846bc6b000913fb2fd5f8ff9ca9aed Mon Sep 17 00:00:00 2001 From: ChebanovDD Date: Fri, 7 Jul 2023 18:15:05 +0800 Subject: [PATCH 3/3] Bump package version. --- .../Assets/Plugins/UnityUxmlGenerator/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UnityUxmlGenerator.UnityPackage/Assets/Plugins/UnityUxmlGenerator/package.json b/src/UnityUxmlGenerator.UnityPackage/Assets/Plugins/UnityUxmlGenerator/package.json index 470bbfa..6ba8c3a 100644 --- a/src/UnityUxmlGenerator.UnityPackage/Assets/Plugins/UnityUxmlGenerator/package.json +++ b/src/UnityUxmlGenerator.UnityPackage/Assets/Plugins/UnityUxmlGenerator/package.json @@ -2,7 +2,7 @@ "name": "com.chebanovdd.unityuxmlgenerator", "displayName": "Unity Uxml Generator", "author": { "name": "ChebanovDD", "url": "https://github.com/ChebanovDD" }, - "version": "0.0.5", + "version": "0.0.6", "unity": "2018.4", "description": "The Unity Uxml Generator allows you to generate 'UxmlFactory' and 'UxmlTraits' source code for a custom 'VisualElement'. Just mark elements with [UxmlElement] and [UxmlAttribute] attributes.", "keywords": [ "uxml", "source", "generator" ]