Sample

int-fff69d33c8fb-I02

Shorten method, parameter, and local names without collisions

Matched original source

Lines31

Scores

MethodScoreScale
Posnett0.0010–1; higher is more readable
Scalabrino0.7760–1; higher is more readable
Dorn0.7050–1; higher is more readable
Mi0.3640–1; higher is more readable
LLOC5Logical lines; fewer is more readable
DeepSeek V4 Pro16.330–20; mean of three runs
GPT-6.1 Sol16.670–20; mean of three runs
BTTF0.6150–1; higher is more readable

Views

Source code

package com.google.common.cache; import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtIncompatible; import java.util.concurrent.Executor; /** * A collection of common removal listeners. * * @author Charles Fry * @since 10.0 */ @GwtIncompatible public final class RemovalListeners { private RemovalListeners() {} /** * Returns a {@code RemovalListener} which processes all eviction notifications using {@code * executor}. * * @param listener the backing listener * @param executor the executor with which removal notifications are asynchronously executed */ public static <K, V> RemovalListener<K, V> asy( RemovalListener<K, V> lis, Executor exe) { checkNotNull(lis); checkNotNull(exe); return (RemovalNotification<K, V> not) -> exe.execute(() -> lis.onRemoval(not)); } }

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.647.078−21.354
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.779−7.168

Intercept 8.87 + feature contributions = -7.252 (log-odds).
Score = sigmoid(-7.252) = 0.001.

Score0.776

Feature contributions

FeatureValueContribution
(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.074+0.221
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.884+0.022

Intercept 0.07 + feature contributions = 0.872 (log-odds).
Score = sigmoid(0.872) = 0.705.

Score0.364
Score5
Run 1

The code is generally well-structured with clear intent and good readability. The class has a clear single purpose, uses appropriate annotations, and includes helpful Javadoc. However, readability is reduced by abbreviated parameter names ('asy', 'lis', 'exe', 'not'), which force the reader to rely on the documentation rather than the code itself. The method name 'asy' is ambiguous without context. Nesting is minimal and the logic flows naturally. The code is concise with one action per line. Overall, it is readable but would benefit from more descriptive naming.

Run 2

The code is generally readable but has some minor issues. The structure is logical with clear separation between the class, constructor, and static method. Nesting is flat, which is good. Intent is mostly clear through the Javadoc and method name, though the abbreviated parameter names ('asy', 'lis', 'exe') reduce clarity slightly. Code length is concise, though the method name 'asy' is overly terse. Action granularity is appropriate, with one main action per line. Reading flow is natural, moving from validation to returning the listener. The main deductions are for overly abbreviated names which sacrifice clarity for brevity, and the method name 'asy' which is ambiguous without reading the documentation. Overall, it is well-structured and readable but could be improved with more descriptive naming.

Run 3

The code is generally well-structured and readable, with a clear single-purpose class and appropriate use of static factory method and lambda expressions. The class has a logical organization with Javadoc explaining intent, and the method performs two validation checks followed by a concise lambda expression. However, the parameter names are abbreviated ('asy', 'lis', 'exe', 'not'), which slightly reduces clarity of intent compared to more descriptive names like 'asynchronous', 'listener', 'executor', and 'notification'. The method name 'asy' is ambiguous at first glance. Nesting is minimal, and the reading flow is natural. Action granularity is appropriate—one action per line. The code length is concise without being overly terse. With more descriptive naming, it would be nearly perfect.

Run 1

Code Structure: A well-organized utility class with a private constructor and one focused public method. Nesting: Minimal; the nested lambdas are compact and easy to follow. Clarity of intent: Documentation explains asynchronous notification handling, but abbreviated identifiers such as asy, lis, exe, and not obscure meaning. The documentation also uses parameter names that do not match the signature. Code length: Concise, with no unnecessary implementation details. Action granularity: Null checks appear on separate lines, and the return expression performs one cohesive operation. Reading flow: Validation naturally precedes listener construction, though missing spacing around imports and abbreviated names slightly hinder readability.

Run 2

Code Structure: A logically organized utility class with a private constructor and one focused factory method. Nesting: Minimal; the nested lambdas are shallow and easy to follow. Clarity of intent: Documentation explains asynchronous notification delivery, but abbreviated names such as asy, lis, exe, and not reduce clarity. The documented parameter names also differ from the actual names. Code length: Concise, with no unnecessary implementation code. Action granularity: Each validation occupies its own line, and the return expression cleanly encapsulates delegation. Reading flow: Validation naturally precedes listener creation, although missing spacing between the package and imports and the abbreviations slightly hinder scanning.

Run 3

Code Structure: A well-organized utility class contains one focused factory method and a private constructor. Nesting: Minimal; the nested lambdas are shallow and easy to follow. Clarity of intent: Documentation and null checks clarify the asynchronous listener wrapper, but abbreviated names (asy, lis, exe, not) reduce clarity, and documented parameter names do not match the actual parameters. Code length: Concise without unnecessary implementation detail. Action granularity: Each validation occupies its own line, and the return expression expresses one cohesive operation. Reading flow: Execution proceeds naturally from validation to wrapper creation, though missing spacing between the package declaration and imports slightly weakens presentation.