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

オープン
#84 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
android, java

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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

主要言語
Java
スター
4
フォーク
11
平均マージ
1日 22時間
マージ済み PR(30日)
3

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

MovingBlocks/TeraNUI のほかの issue

MovingBlocks/TeraNUI の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。