Android suitability: fix AnimalSniffer violations in ReflectionUtil, ObjectLayoutBuilder, UIText clipboard

Abierto
#84 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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
Bastante claro
Estado de actividad
Activo
Stack tecnológico
android, java

Línea de trabajo

Read the Technical Notes and inspect UIText's clipboard methods, its private AwtClipboard class, and the nui-libgdx integration. Design a pluggable clipboard strategy that keeps the AWT behavior on desktop and uses Gdx.app.getClipboard() on Android; verify copy and paste work on both platform types.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Type: Improvement

AI-assisted issue. Filed by agent driven by @soloturn via GDD.

Context

Wiring up the AnimalSniffer + gummy-bears-api-24 Android-suitability check (#83) surfaced 21 real violations across two modules — genuine gaps between NUI's API surface and what's available on Android, not signature-set false positives. Concrete motivation: DestinationSol's engine module depends directly on nui, nui-libgdx, nui-gestalt, and nui-reflect, and targets Android via libGDX.

Problem / Current State

  • nui-reflect: ReflectionUtil — 6 violations. resolvedMethodToString took a java.lang.reflect.Executable parameter and called getTypeParameters()/getName()/getDeclaringClass()/getGenericParameterTypes()/isVarArgs() on it directly. Executable itself isn't available before API 26, even though Method and Constructor each declare these same methods directly and have since long before API 24. typeToString also called Class.getTypeName() (API 26+).
  • nui: ObjectLayoutBuilder — 2 violations. Used Constructor.getParameters() (returns Parameter[]) and Parameter.getParameterizedType() to build the argument-type list. java.lang.reflect.Parameter itself isn't available before API 26.
  • nui: UIText clipboard — 13 violations. getClipboardContents()/setClipboardContents() use java.awt.Toolkit/Clipboard/DataFlavor/StringSelection/Transferable/UnsupportedFlavorException directly. Unlike the above two, this isn't fixable by calling a different method — AWT genuinely doesn't exist on Android at all.

Acceptance Criteria

  • ReflectionUtil violations fixed by calling through the concrete Method/Constructor type instead of the shared Executable supertype, and reimplementing Class.getTypeName()'s behavior — no public API change (#83)
  • ObjectLayoutBuilder violations fixed by using Constructor.getGenericParameterTypes() instead of going through Parameter — no public API change (#83)
  • UIText clipboard calls isolated into a private nested class (UIText.AwtClipboard) with LinkageError caught by the caller, so invoking copy/paste on a platform without java.awt degrades to a no-op with a logged warning instead of crashing (#83)
  • UIText actually has a working clipboard on platforms without AWT (e.g. Android via nui-libgdx, since libGDX's Gdx.app.getClipboard() is a cross-platform abstraction that works there), not just a graceful no-op — left open, see Technical Notes

Technical Notes

The last item is a real design decision, deliberately left out of #83 to keep that PR focused on the suitability check rather than a clipboard-abstraction redesign: likely a pluggable Clipboard strategy on UIText, defaulting to the current AWT-backed behavior on desktop, with nui-libgdx supplying a Gdx.app.getClipboard()-backed implementation for platforms (including Android) that have it.

Full violation reports (pre-fix, from #83's initial run): nui/build/reports/animalsniffer/main.text, nui-reflect/build/reports/animalsniffer/main.text.

Related

#83

Lenguaje dominante
Java
Estrellas
4
Forks
11
Merge medio
1 d 22 h
PR fusionados (30 d)
3

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MovingBlocks/TeraNUI

Todos los issues de MovingBlocks/TeraNUI

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.