Android suitability: fix AnimalSniffer violations in ReflectionUtil, ObjectLayoutBuilder, UIText clipboard
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
- Área
- backend, mobile-dev
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
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.resolvedMethodToStringtook ajava.lang.reflect.Executableparameter and calledgetTypeParameters()/getName()/getDeclaringClass()/getGenericParameterTypes()/isVarArgs()on it directly.Executableitself isn't available before API 26, even thoughMethodandConstructoreach declare these same methods directly and have since long before API 24.typeToStringalso calledClass.getTypeName()(API 26+).nui:ObjectLayoutBuilder— 2 violations. UsedConstructor.getParameters()(returnsParameter[]) andParameter.getParameterizedType()to build the argument-type list.java.lang.reflect.Parameteritself isn't available before API 26.nui:UITextclipboard — 13 violations.getClipboardContents()/setClipboardContents()usejava.awt.Toolkit/Clipboard/DataFlavor/StringSelection/Transferable/UnsupportedFlavorExceptiondirectly. Unlike the above two, this isn't fixable by calling a different method — AWT genuinely doesn't exist on Android at all.
Acceptance Criteria
-
ReflectionUtilviolations fixed by calling through the concreteMethod/Constructortype instead of the sharedExecutablesupertype, and reimplementingClass.getTypeName()'s behavior — no public API change (#83) -
ObjectLayoutBuilderviolations fixed by usingConstructor.getGenericParameterTypes()instead of going throughParameter— no public API change (#83) -
UITextclipboard calls isolated into a private nested class (UIText.AwtClipboard) withLinkageErrorcaught by the caller, so invoking copy/paste on a platform withoutjava.awtdegrades to a no-op with a logged warning instead of crashing (#83) -
UITextactually has a working clipboard on platforms without AWT (e.g. Android vianui-libgdx, since libGDX'sGdx.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
- 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 MovingBlocks/TeraNUI
-
internationalize textAbiertoGood First Issue Revive: Keep Type: Refactoring
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
MovingBlocks/TeraNUI#45 ·
-
Revive: Keep Type: Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
MovingBlocks/TeraNUI#41 ·
-
Revive: Keep Type: Bug
Dificultad 3/5 1-2 días Aptitud para principiantes 43/100
MovingBlocks/TeraNUI#37 ·
-
Revive: Keep Type: Improvement
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
MovingBlocks/TeraNUI#31 · 1 comentario ·
-
Revive: Keep Status: Needs Investigation Type: Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
MovingBlocks/TeraNUI#23 ·
Todos los issues de MovingBlocks/TeraNUI
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
spAnser/reacharound#38 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 89/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Type: Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
MovingBlocks/Terasology#5415 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100