Android suitability: fix AnimalSniffer violations in ReflectionUtil, ObjectLayoutBuilder, UIText clipboard
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 48/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Lĩnh vực
- backend, mobile-dev
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- Java
- Star
- 4
- Fork
- 11
- Merge trung bình
- 1 ngày 22 giờ
- Pull request đã merge (30 ngày)
- 3
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của MovingBlocks/TeraNUI
-
internationalize textĐang mởGood First Issue Revive: Keep Type: Refactoring
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
MovingBlocks/TeraNUI#45 ·
-
Revive: Keep Type: Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 35/100
MovingBlocks/TeraNUI#41 ·
-
Revive: Keep Type: Bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 43/100
MovingBlocks/TeraNUI#37 ·
-
Revive: Keep Type: Improvement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
MovingBlocks/TeraNUI#31 · 1 bình luận ·
-
Revive: Keep Status: Needs Investigation Type: Bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
MovingBlocks/TeraNUI#23 ·
Tất cả issue của MovingBlocks/TeraNUI
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
spAnser/reacharound#38 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 89/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
Type: Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
MovingBlocks/Terasology#5415 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100