[DO NOT MERGE] [IMPROVEMENTS] [EXPERIMENTAL] Weekly Stable Updates 20250502
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)
- deterministically or
- 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-parseorgenerator)managedReturnvsreturnmanagedTypevstype -
changes in ecosystem (Google's type moving)
challenge because of - cutoff dates for LMs (language models)
-
-
-
Plan:
-
deserialize SARIF format
-
extend SARIF object model with data for:
-
XPath
-
managed (MCW) metadata
-
native Maven artifact data
-
-
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'."
-
-
-
loop through the SARIF data and fix isues by generating
Metadata.*.g.xmlfixes
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
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"
]
}
}
}
}
]
}