Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add C# source generator for ScriptPathAttribute #46713

Merged
merged 1 commit into from
Mar 7, 2021

Commits on Mar 6, 2021

  1. Add C# source generator for a new ScriptPath attribute

    This source generator adds a newly introduced attribute,
    `ScriptPath` to all classes that:
    
    - Are top-level classes (not inner/nested).
    - Have the `partial` modifier.
    - Inherit `Godot.Object`.
    - The class name matches the file name.
    
    A build error is thrown if the generator finds a class that meets these
    conditions but is not declared `partial`, unless the class is annotated
    with the `DisableGodotGenerators` attribute.
    
    We also generate an `AssemblyHasScripts` assembly attribute which Godot
    uses to get all the script classes in the assembly, eliminating the need
    for Godot to search them. We can also avoid searching in assemblies that
    don't have this attribute. This will be good for performance in the
    future once we support multiple assemblies with Godot script classes.
    
    This is an example of what the generated code looks like:
    
    ```
    using Godot;
    namespace Foo {
    	[ScriptPathAttribute("res://Player.cs")]
    	// Multiple partial declarations are allowed
    	[ScriptPathAttribute("res://Foo/Player.cs")]
    	partial class Player {}
    }
    
    [assembly:AssemblyHasScripts(new System.Type[] { typeof(Foo.Player) })]
    ```
    
    The new attributes replace script metadata which we were generating by
    determining the namespace of script classes with a very simple parser.
    This fixes several issues with the old approach related to parser
    errors and conditional compilation.
    It also makes the task part of the MSBuild project build, rather than
    a separate step executed by the Godot editor.
    neikeq committed Mar 6, 2021
    Configuration menu
    Copy the full SHA
    e2afe70 View commit details
    Browse the repository at this point in the history