False positive java/local-variable-is-never-read for Kotlin data object-generated equals temporaries
Maintainer thường phản hồi trong vòng 1 ngày
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
- 35/100
Hướng nghiên cứu
The false positive comes from the java/local-variable-is-never-read query (UnreadLocal.ql) reporting compiler-generated other_with_cast locals in zero-property Kotlin data object equals methods. Start by reproducing with the reduced LoadState source in a CodeQL database, then check how the query and the Kotlin extractor model generated locals. Done means these temporaries are excluded while genuinely unused user locals are still reported.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description of the false positive
java/local-variable-is-never-read reports Kotlin compiler-generated other_with_cast temporaries for zero-property data object declarations. The diagnostic is attached to the Kotlin file without a source region; GitHub displays line1. The application does not declare these variables or an equals implementation.
Environment actually observed
- CodeQL CLI 2.27.3, as selected by
github/codeql-actionv4.39.1 at9b3254085494b55a0f7c4c2b3d2d52cc712ce370. - Kotlin 2.4.21, JVM 27, Java/Kotlin manual build,
security-extendedwith the remote threat model. - The observations below come from a completed Android/Compose analysis and its SARIF, not an independently rerun CodeQL database for the reduced source below.
Reduced source
private sealed interface LoadState {
data object Loading : LoadState
data object Failed : LoadState
}
fun main() {
val states: List<LoadState> = listOf(LoadState.Loading, LoadState.Failed)
states.forEach { println(it) }
}
Observed SARIF diagnostic
Rule: java/local-variable-is-never-read
Level: note
Variable 'Loading tmp0_other_with_cast' is never read.
Variable 'Failed tmp0_other_with_cast' is never read.
Physical location: Kotlin source artifact, without a source region
The same analysis reports the same temporary-name pattern for two other zero-property data objects in another Kotlin source file.
Compiler and bytecode evidence
Kotlinv2.4.21 DataClassMembersGenerator.kt creates other_with_cast before iterating through properties. Reads occur within that loop. For a zero-property data object, the compiler-generated local therefore has no property read.
The Kotlin data-object contract specifies generated equals/hashCode implementations and prohibits supplying custom implementations. javap -p -c -l -v on both affected compiled classes confirms that equals(Object) exists despite being absent from application source; its LocalVariableTable contains only this and other after JVM lowering. No application declaration named tmp0_other_with_cast exists.
Expected behavior
Exclude this generated data-object equality temporary from the unread-source-local diagnostic, while retaining detection of genuinely unused user declarations.
Version-check limit
I did not execute a new CodeQL analysis with 2.27.4. Its official query is byte-identical to2.27.3 (UnreadLocal.ql SHA256 aae0d6fd7a2df5291352a3b2597cdff9e92a41f264e413801bb57ffbee071894), and the official Kotlin-extractor source subtree is identical (17c4961985b50180674d18fb4b12d64d3fd36b23). This is not a claim that an upgrade fixes or reproduces the issue; it records the inspected source boundaries.
The application has not been rewritten and the query has not been suppressed. The public example above contains no application-specific code, credentials or private repository references.
- Ngôn ngữ chính
- CodeQL
- Star
- 10.3k
- Fork
- 2.1k
- Merge trung bình
- 1 ngày 22 giờ
- Pull request đã merge (30 ngày)
- 126
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
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 github/codeql
-
JavaScript externs model StorageEvent() with no type argumentCó thể đã có người làm @asgerf đã nhận 14 ngày trước. Đang mởfalse-positive javascript
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
github/codeql#22632 · 3 bình luận · 1 reaction · 2 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Add AlertSuppression.ql for Rust (inline // codeql[...] suppression)Có thể đã có người làm @cnuss đã nhận 215 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
github/codeql#21637 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
false-positive
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
github/codeql#21076 · 3 bình luận · 3 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
General issueĐang mởquestion
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 5/100
Maintainer thường phản hồi trong vòng 1 ngày
-
java/unused-reference-type and java/unused-container: silenced by any annotation, even an empty oneĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của github/codeql
Issue tương tự
-
check-relative-paths reports links to existing directories as missingCó thể đã có người làm @reidbaker-agent đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
google/skills_lint.dart#202 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue help wanted
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
-
Phone app shows Unknown for a remote machine whose key changedCó thể đã có người làm @janicduplessis đã nhận hôm nay. Đang mởarea: mobile priority: P3 type: bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
appandflow/stim#5006 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
irahardianto/pi-mcp-extension#253 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
A-linter
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
oxc-project/oxc#28783 ·
Maintainer thường phản hồi trong vòng 1 ngày