Skip to content

[DO NOT MERGE] [IMPROVEMENTS] [EXPERIMENTAL] Weekly Stable Updates 20250502 #1135

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

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

moljac
Copy link
Contributor

@moljac moljac commented May 5, 2025

Updates

... and improvements (experimental) for bindings improvements

As a result of investigation about bindings improvements this is a proposal for a method of obtaining structured data from build logs so solutions/fixes/workarounds for issues (errors, warnings) can be made either (in the order of priority)

  1. deterministically or
  2. non-deterministically with help of AI

Motivation:

  • software must be deterministic => bindings must be deterministic

    • non-determinism

      • valid case for AI/ML

      • caused by

        • tooling bugs (class-parse or generator)

          managedReturn vs return

          managedType vs type

        • changes in ecosystem (Google's type moving)

          challenge because of - cutoff dates for LMs (language models)

Plan:

  1. deserialize SARIF format

  2. extend SARIF object model with data for:

    • XPath

    • managed (MCW) metadata

    • native Maven artifact data

  3. build logic to fix errors and warnings

    • easier to tackle

      • CS0738

        "'T1' does not implement interface member 'I.M()'. 'T1.M()' cannot implement 'I.M()' because it does not have the matching return type of 'T2'."

  4. loop through the SARIF data and fix isues by generating Metadata.*.g.xml fixes

Further reading:

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings#errorlog

https://www.meziantou.net/how-to-output-a-sarif-file-from-a-dotnet-project.htm

@moljac moljac marked this pull request as draft May 5, 2025 11:20
@moljac
Copy link
Contributor Author

moljac commented May 5, 2025

Generated SARIF formated data:

{
  "$schema": "http://json.schemastore.org/sarif-1.0.0",
  "version": "1.0.0",
  "runs": [
    {
      "tool": {
        "name": "Microsoft (R) Visual C# Compiler",
        "version": "4.11.0.0",
        "fileVersion": "4.11.0-3.24554.2 (bc1c3011)",
        "semanticVersion": "4.11.0",
        "language": "en-HR"
      },
      "results": [
        {
          "ruleId": "CS0738",
          "level": "error",
          "message": "'FirebaseSessionsComponent_MainModule_Companion_SessionConfigsDataStoreFactory' does not implement interface member 'IProvider.Get()'. 'FirebaseSessionsComponent_MainModule_Companion_SessionConfigsDataStoreFactory.Get()' cannot implement 'IProvider.Get()' because it does not have the matching return type of 'Object'.",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_SessionConfigsDataStoreFactory.cs",
                "region": {
                  "startLine": 20,
                  "startColumn": 136,
                  "endLine": 20,
                  "endColumn": 193
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0738",
          "level": "error",
          "message": "'FirebaseSessionsComponent_MainModule_Companion_SessionDetailsDataStoreFactory' does not implement interface member 'IProvider.Get()'. 'FirebaseSessionsComponent_MainModule_Companion_SessionDetailsDataStoreFactory.Get()' cannot implement 'IProvider.Get()' because it does not have the matching return type of 'Object'.",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_SessionDetailsDataStoreFactory.cs",
                "region": {
                  "startLine": 20,
                  "startColumn": 136,
                  "endLine": 20,
                  "endColumn": 193
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0234",
          "level": "error",
          "message": "The type or namespace name 'ITimeProvider' does not exist in the namespace 'Firebase.Sessions' (are you missing an assembly reference?)",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_TimeProviderFactory.cs",
                "region": {
                  "startLine": 80,
                  "startColumn": 43,
                  "endLine": 80,
                  "endColumn": 56
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0234",
          "level": "error",
          "message": "The type or namespace name 'ITimeProvider' does not exist in the namespace 'Firebase.Sessions' (are you missing an assembly reference?)",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_TimeProviderFactory.cs",
                "region": {
                  "startLine": 92,
                  "startColumn": 50,
                  "endLine": 92,
                  "endColumn": 63
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0738",
          "level": "error",
          "message": "'FirebaseSessionsComponent_MainModule_Companion_TimeProviderFactory' does not implement interface member 'IProvider.Get()'. 'FirebaseSessionsComponent_MainModule_Companion_TimeProviderFactory.Get()' cannot implement 'IProvider.Get()' because it does not have the matching return type of 'Object'.",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_TimeProviderFactory.cs",
                "region": {
                  "startLine": 20,
                  "startColumn": 125,
                  "endLine": 20,
                  "endColumn": 182
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0234",
          "level": "error",
          "message": "The type or namespace name 'IUuidGenerator' does not exist in the namespace 'Firebase.Sessions' (are you missing an assembly reference?)",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_UuidGeneratorFactory.cs",
                "region": {
                  "startLine": 80,
                  "startColumn": 43,
                  "endLine": 80,
                  "endColumn": 57
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0234",
          "level": "error",
          "message": "The type or namespace name 'IUuidGenerator' does not exist in the namespace 'Firebase.Sessions' (are you missing an assembly reference?)",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_UuidGeneratorFactory.cs",
                "region": {
                  "startLine": 92,
                  "startColumn": 50,
                  "endLine": 92,
                  "endColumn": 64
                }
              }
            }
          ]
        },
        {
          "ruleId": "CS0738",
          "level": "error",
          "message": "'FirebaseSessionsComponent_MainModule_Companion_UuidGeneratorFactory' does not implement interface member 'IProvider.Get()'. 'FirebaseSessionsComponent_MainModule_Companion_UuidGeneratorFactory.Get()' cannot implement 'IProvider.Get()' because it does not have the matching return type of 'Object'.",
          "locations": [
            {
              "resultFile": {
                "uri": "file:///Users/Shared/Projects/d/dotnet/android-libraries/dev--moljac--wsu-20250502/generated/com.google.firebase.firebase-sessions/obj/Release/net8.0-android/generated/src/Firebase.Sessions.FirebaseSessionsComponent_MainModule_Companion_UuidGeneratorFactory.cs",
                "region": {
                  "startLine": 20,
                  "startColumn": 126,
                  "endLine": 20,
                  "endColumn": 183
                }
              }
            }
          ]
        }
      ],
      "rules": {
        "CS0234": {
          "id": "CS0234",
          "defaultLevel": "error",
          "helpUri": "https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0234)",
          "properties": {
            "category": "Compiler",
            "isEnabledByDefault": true,
            "tags": [
              "Compiler",
              "Telemetry",
              "NotConfigurable"
            ]
          }
        },
        "CS0738": {
          "id": "CS0738",
          "defaultLevel": "error",
          "helpUri": "https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0738)",
          "properties": {
            "category": "Compiler",
            "isEnabledByDefault": true,
            "tags": [
              "Compiler",
              "Telemetry",
              "NotConfigurable"
            ]
          }
        }
      }
    }
  ]
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant