Sample

int-650b478f87f6-I04

Replace method, parameter, and local names with deterministic ProGuard-style short identifiers

Matched original source

Lines40

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Scalabrino0.8850–1; higher is more readable
Dorn0.8440–1; higher is more readable
Mi0.7570–1; higher is more readable
LLOC11Logical lines; fewer is more readable
DeepSeek V4 Pro10.330–20; mean of three runs
GPT-6.1 Sol14.330–20; mean of three runs
BTTF0.7360–1; higher is more readable

Views

Source code

package org.springframework.expression.spel.ast; import org.springframework.asm.MethodVisitor; import org.springframework.expression.TypedValue; import org.springframework.expression.spel.CodeFlow; /** * Expression language AST node that represents a long integer literal. * * @author Andy Clement * @since 3.0 */ public class LongLiteral extends Literal { private final TypedValue value; public LongLiteral(String a, int b, int c, long d) { super(a, b, c); this.value = new TypedValue(d); this.exitTypeDescriptor = "J"; } @Override public TypedValue a() { return this.value; } @Override public boolean b() { return true; } @Override public void c(MethodVisitor e, CodeFlow f) { e.visitLdcInsn(this.value.getValue()); f.pushDescriptor(this.exitTypeDescriptor); } }

Loading feature diagnosis…

Source regions

Feature contributions

Feature contributions

FeatureValueContribution
(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.859.051−28.349
Source linesThe number of non-empty source lines.40+16
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.98−7.47

Intercept 8.87 + feature contributions = -10.948 (log-odds).
Score = sigmoid(-10.948) = 0.

Score0.885

Feature contributions

FeatureValueContribution
(log-odds)
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.70.976+0.659
Indentation frequencyHow rapidly indentation changes from line to line.35+0.473
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.41−0.415
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.1+0.398
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.70.927+0.34
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.39.764+0.146
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.095+0.021

Intercept 0.07 + feature contributions = 1.692 (log-odds).
Score = sigmoid(1.692) = 0.844.

Score0.757
Score11
Run 1

The code is structurally sound with logical organization, low nesting, and concise methods. However, readability is significantly hampered by poor naming conventions. Method names like a(), b(), c() and parameters a, b, c, d obscure intent, making the code hard to follow without external context. The class itself follows a clear pattern (AST node for a long literal) but the obfuscated names create unnecessary cognitive overhead. Action granularity is appropriate, with one main operation per line. Reading flow is natural due to the simple structure, but the lack of descriptive naming reduces clarity and would likely hinder maintenance or review.

Run 2

The code is functionally minimal but severely obfuscated by meaningless method and parameter names (a, b, c, d, e, f). This makes the intent of each method unclear, violating the clarity of intent and reading flow criteria. While the class structure is simple and flat, the poor naming forces the reader to infer behavior from context. The use of single-letter variables throughout destroys action granularity and natural reading flow, making the code nearly unreadable despite its short length.

Run 3

The code is logically structured but suffers from poor readability due to meaningless method and parameter names (a, b, c, d, e, f) which obscure intent. The nesting is flat and actions are mostly one per line, aiding flow, but the obfuscated identifiers force the reader to infer behavior from context. The class purpose is clear from the class name and comments, but method names like 'a()' and 'c()' break clarity. Code length is concise, though not at the cost of clarity. The reading flow is disrupted by having to map cryptic names back to their roles.

Run 1

Code Structure: The class is logically organized into a field, constructor, and overridden methods. Nesting: There is no nested control flow, making it easy to scan. Clarity of intent: The class name and documentation clearly identify a long-literal AST node, but single-letter method and parameter names obscure method purposes and argument meanings. The descriptor "J" also requires JVM-specific knowledge. Code length: The implementation is concise with little unnecessary code. Action granularity: Each statement occupies its own line and performs a distinct operation. Reading flow: The field-to-constructor-to-method sequence is natural, though ambiguous names force readers to consult superclass definitions or surrounding code.

Run 2

Code Structure: The class is logically organized into a field, constructor, and short overridden methods. Nesting: There is no nested control flow, making the code easy to scan. Clarity of intent: The class name and documentation clearly identify a long-literal AST node, but single-letter method and parameter names obscure individual operations and roles. The JVM descriptor "J" requires domain knowledge. Code length: The implementation is concise with no unnecessary logic, though extra blank lines add minor visual spacing. Action granularity: Each statement performs one action on its own line. Reading flow: The field-to-constructor-to-method sequence is natural, and formatting is consistent; however, readers must infer the purposes of a(), b(), and c() from their bodies or superclass contract.

Run 3

Code Structure: The class is logically organized into a field, constructor, and small overridden methods. Nesting: There is no nested control flow, making it easy to scan. Clarity of intent: The class name and documentation clearly identify a long-literal AST node, but single-letter method and parameter names obscure individual responsibilities and argument meanings. The JVM descriptor "J" also requires domain knowledge. Code length: The implementation is concise with little unnecessary code, although some blank lines are excessive. Action granularity: Each statement performs one distinct action, with no compound lines. Reading flow: The field-to-constructor-to-method progression is natural, but understanding the overridden methods requires consulting the superclass because their names convey no intent.