Sample
int-51e080b9fe84-I04
Replace method, parameter, and local names with deterministic ProGuard-style short identifiers
Scores
| Method | Score | Scale |
|---|---|---|
| Posnett | 0.001 | 0–1; higher is more readable |
| Scalabrino | 0.795 | 0–1; higher is more readable |
| Dorn | 0.702 | 0–1; higher is more readable |
| Mi | 0.38 | 0–1; higher is more readable |
| LLOC | 5 | Logical lines; fewer is more readable |
| DeepSeek V4 Pro | 13.67 | 0–20; mean of three runs |
| GPT-6.1 Sol | 15 | 0–20; mean of three runs |
| BTTF | 0.693 | 0–1; higher is more readable |
Views
Loading feature diagnosis…
Source regions
Feature contributions
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones. | 642.906 | −21.216 |
| Source linesThe number of non-empty source lines. | 31 | +12.4 |
| Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value. | 4.787 | −7.18 |
Intercept 8.87 + feature contributions = -7.126 (log-odds).
Score = sigmoid(-7.126) = 0.001.
| Score | 0.795 |
|---|
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right. | 88.25 | +0.619 |
| Number layout frequencyHow rapidly the number of numeric values per line changes through the code. | 1 | +0.398 |
| Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names. | 94 | −0.316 |
| Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *. | 0.076 | +0.206 |
| Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code. | 32 | −0.097 |
| Indentation frequencyHow rapidly indentation changes from line to line. | 20 | −0.045 |
| Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom. | 30.768 | +0.02 |
Intercept 0.07 + feature contributions = 0.855 (log-odds).
Score = sigmoid(0.855) = 0.702.
| Score | 0.38 |
|---|
| Score | 5 |
|---|
Run 1
The code is functionally clear but uses placeholder parameter names (a, b, c) that obscure intent, significantly reducing readability. Structure is logical, concise, and flat with minimal nesting. However, the action granularity and reading flow suffer due to unclear naming, making it harder to follow despite the code being short. Javadocs are helpful but cannot compensate for poor nomenclature.
Run 2
The code is generally well-structured with clear separation of concerns, a private constructor preventing instantiation, and appropriate Javadoc. However, readability is significantly hurt by poor parameter naming ('a', 'b', 'c') which obscures intent and forces the reader to rely on documentation. The nesting is minimal (one lambda inside another), and each action has its own line, but the generic type parameter '<K, V>' combined with the lambda syntax adds mild complexity. The reading flow suffers from the unnamed descriptive variables. Overall the structure is clean and concise but naming choices reduce clarity.
Run 3
The code has a clean structure with clear separation of concerns, proper null checks, and simple lambda composition. It follows good practices like a private constructor and Javadoc documentation. However, readability is significantly hurt by poor naming: the method is called 'a', and parameters are 'a', 'b', and 'c', which obscures intent and forces the reader to infer meaning from types. The reading flow is straightforward but generic names break clarity. Action granularity and nesting are acceptable—each lambda does one thing and indentation is shallow. The overall code is concise, but sacrificing descriptive names for brevity is a trade-off that reduces readability. With meaningful names (e.g., 'asynchronous' and 'listener'), this would be highly readable.
Run 1
Code Structure: A well-organized utility class with a private constructor and one focused factory method. Nesting: Minimal nesting; the two lambdas are compact and easy to follow. Clarity of intent: Class documentation and types explain asynchronous removal handling, but names a, b, and c obscure roles, and the documented parameter names do not match the implementation. Code length: Concise, with no unnecessary logic. Action granularity: Null checks occupy separate lines, and the return expression performs one cohesive operation. Reading flow: Validation followed by listener creation is natural, although cryptic identifiers and tightly grouped imports slightly impede readability.
Run 2
Code Structure: Well-organized utility class with a private constructor and one focused factory method. Nesting: Minimal; the nested lambdas are compact and easy to follow. Clarity of intent: Class documentation and API types explain the asynchronous listener wrapper, but single-letter method and parameter names obscure intent. The documented parameter names also mismatch the actual names. Code length: Concise, with no unnecessary implementation detail. Action granularity: Validation calls each occupy their own line, and the lambda clearly expresses scheduling a callback. Reading flow: Natural progression from input validation to wrapper creation, though cryptic identifiers and tight import spacing slightly reduce readability.
Run 3
Code Structure: A logically organized utility class with a private constructor and one focused factory method. Nesting: Minimal; the nested lambdas are shallow and manageable. Clarity of intent: Documentation explains asynchronous notification handling, but the method name 'a' and variable names 'a', 'b', and 'c' obscure their roles. Code length: Concise, with no unnecessary implementation. Action granularity: Null checks are separate statements, and the returned expression cleanly encapsulates task scheduling. Reading flow: Straightforward from validation to listener creation, although cryptic identifiers and tightly grouped package/import declarations reduce readability.