AndroidX icon indicating copy to clipboard operation
AndroidX copied to clipboard

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

Open moljac opened this issue 8 months ago • 1 comments

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
  • strucutured build data output (SARIF format)

    error fixing (troubleshooting) deterministic or AI/ML (fine tuning, RAG,...)

    <ErrorLog>obj/build-log-data.sarif</ErrorLog>
    

    reuse existing tools - build with MSBuild/Roslyn strucutred data support

    SARIF build data (logs)

    https://docs.github.com/en/code-security/code-scanning/integrating-with-code-scanning/sarif-support-for-code-scanning

    https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html

    https://sarifweb.azurewebsites.net/

    https://github.com/Microsoft/sarif-sdk

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 avatar May 05 '25 11:05 moljac

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"
            ]
          }
        }
      }
    }
  ]
}

moljac avatar May 05 '25 11:05 moljac