[generator] Investigate Throwable constructor-chain and partial-hook lifecycle coverage
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Área
- devtools, testing-qa
Línea de trabajo
Start with PeerConstructorPartialMethod_Class in CodeGeneratorTests.cs, then trace forwarding and initializer selection in BoundClass.cs and BoundConstructor.cs; compare the Streams IOException snapshot. Run the generator tests, then investigate a two-level Throwable hierarchy on a real Android/JNI runtime. Done means focused output and lifecycle coverage distinguishes hook count/order and peer validity without treating compile-only probes as native coverage.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Android framework version
net11.0-android (Preview) — generator and runtime coverage follow-up; also distinguish legacy compilation from updated memory-safety-rules probes.
Affected platform version
Binding-constructor preparation reviewed in #13190 at commit e4473175aba5271fd839d0a1dd8b3777a8ca5f90. This is a coverage gap, not an observed runtime regression.
Description
Follow-up to https://github.com/dotnet/android/pull/13190#discussion_r4415013169.
Investigate and improve coverage of generated Throwable construction through the internal JniObjectReferenceOptions.None forwarding route, especially with inheritance and peerConstructorPartialMethod hooks.
The existing PeerConstructorPartialMethod_Class test checks emitted text for an ordinary Object-derived class. The Streams IOException snapshot has a forwarding declaration but no bound Java constructors or partial hooks. Earlier session-only generated-chain/compiler probes covered constructor selection and implementation/reference accessibility, not actual hook execution order or real Java-peer creation. Passing compiler probes must not be presented as native lifecycle coverage.
A focused follow-up should investigate a two-level generated Throwable inheritance chain with bound Java constructors and hooks, then add appropriately scoped coverage for:
- Ordinary managed constructors selecting the
Noneforwarding route. - Hooks running exactly once, in base-to-derived order, before a Java peer is installed.
- Normal construction subsequently yielding a valid Java peer.
- Existing initialization, dispatch and cleanup behavior remaining intact.
Separate generator-output assertions from actual Android/JNI lifecycle tests; a synthetic handle or compile-only peer model does not prove a valid native peer.
The originating PR is an unsafe audit, not a general refactoring or test-coverage expansion. No behavioral bug has been demonstrated here, and the user explicitly requested tracking this improvement separately. This issue is also distinct from the known cross-assembly updated-rules constructor-initializer limitation: internal forwarding does not provide external assemblies with an accessible safe base constructor, and the corresponding CS9362 probe remains an unresolved design boundary, not a runtime failure reproduced by this issue.
Relevant source:
external/Java.Interop/tools/generator/SourceWriters/BoundClass.cs: forwarding constructor and partial hook emission.external/Java.Interop/tools/generator/SourceWriters/BoundConstructor.cs: initializer selection and JNI peer construction.external/Java.Interop/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs:PeerConstructorPartialMethod_Class.external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.IO.IOException.cs.external/Java.Interop/Documentation/Architecture.md: generated managed binding safety and cross-assembly limitation.
Steps to Reproduce
- Inspect the existing hook test and Streams
IOExceptionfixture to confirm the missing combined inheritance/constructor/hook case. - Generate a two-level Throwable subclass chain containing bound Java constructors and distinct partial construction hooks.
- Check initializer selection and hook emission in actual generated output.
- Run the generated hierarchy against a real Android/JNI runtime, recording hook count/order and peer state before and after construction.
- Document findings and add focused regression/coverage tests appropriate to any behavior demonstrated. Do not silently change constructor accessibility, public API, caller contracts or language settings to make the tests pass.
Did you find any workaround?
N/A. No runtime failure or workaround has been established; the current gap is missing focused behavioral coverage.
Relevant log output
N/A. No failing lifecycle trace is available. Existing compile/accessibility evidence does not establish hook execution or native peer validity.
- Lenguaje dominante
- C#
- Estrellas
- 2.1k
- Forks
- 579
- Merge medio
- 1 d 16 h
- PR fusionados (30 d)
- 258
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de dotnet/android
-
Area: App+Library Build
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
EditText.getText() isn't boundAbiertoArea: Mono.Android
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
dotnet/android#9192 · 4 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
[generator] Investigate deferred-constructor capability scanning with shallow reference importsAbiertoneeds-triage
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Los mantenedores suelen responder en 1 día
-
agentic-workflows needs-triage
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
dotnet/android#13325 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Area: CoreCLR Area: Debugger bug needs-triage
Dificultad 5/5 Más de una semana Aptitud para principiantes 24/100
Los mantenedores suelen responder en 1 día
Todos los issues de dotnet/android
Issues similares
-
possible bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
-
Include host.wslc.internal in the HTTPS development certificatePosiblemente ocupada @afscrome la tomó hoy. Abiertoarea-commandlinetools
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
dotnet/aspnetcore#70122 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
:1st_place_medal: good first issue :cowboy_hat_face: refactor :roller_coaster: enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ApplETS/Backend-Hello#78 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 2 días
-
Custom component in Summary2 no longer receives raw formData (regression from app-frontend v4)Abiertostatus/triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Altinn/altinn-studio#21642 ·
Los mantenedores suelen responder en 1 día