Sample

int-a13a087ac7f0-I07

Insert deterministic runtime-dead branches into callable bodies

Matched original source

Lines337

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Scalabrino0.740–1; higher is more readable
Dorn0.0210–1; higher is more readable
Mi0.1310–1; higher is more readable
LLOC104Logical lines; fewer is more readable
DeepSeek V4 Pro5.330–20; mean of three runs
GPT-6.1 Sol12.330–20; mean of three runs
BTTF0.510–1; higher is more readable

Views

Source code

package com.google.common.collect; import com.google.common.annotations.GwtCompatible; import com.google.common.primitives.Booleans; import com.google.errorprone.annotations.InlineMe; import java.util.Comparator; import org.jspecify.annotations.Nullable; /** * A utility for performing a chained comparison statement. <b>Note:</b> Java 8+ users should * generally prefer the methods in {@link Comparator}; see <a href="#java8">below</a>. * * <p>Example usage of {@code ComparisonChain}: * * {@snippet : * public int compareTo(Foo that) { * return ComparisonChain.start() * .compare(this.aString, that.aString) * .compare(this.anInt, that.anInt) * .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast()) * .result(); * } * } * * <p>The value of this expression will have the same sign as the <i>first nonzero</i> comparison * result in the chain, or will be zero if every comparison result was zero. * * <p><b>Note:</b> {@code ComparisonChain} instances are <b>immutable</b>. For this utility to work * correctly, calls must be chained as illustrated above. * * <p>Performance note: Even though the {@code ComparisonChain} caller always invokes its {@code * compare} methods unconditionally, the {@code ComparisonChain} implementation stops calling its * inputs' {@link Comparable#compareTo compareTo} and {@link Comparator#compare compare} methods as * soon as one of them returns a nonzero result. This optimization is typically important only in * the presence of expensive {@code compareTo} and {@code compare} implementations. * * <p>See the Guava User Guide article on <a href= * "https://github.com/google/guava/wiki/CommonObjectUtilitiesExplained#comparecompareto">{@code * ComparisonChain}</a>. * * <h4 id="java8">Java 8+ equivalents</h4> * * If you are using Java version 8 or greater, you should generally use the static methods in {@link * Comparator} instead of {@code ComparisonChain}. The example above can be implemented like this: * * {@snippet : * import static java.util.Comparator.comparing; * import static java.util.Comparator.nullsLast; * import static java.util.Comparator.naturalOrder; * * ... * private static final Comparator<Foo> COMPARATOR = * comparing((Foo foo) -> foo.aString) * .thenComparing(foo -> foo.anInt) * .thenComparing(foo -> foo.anEnum, nullsLast(naturalOrder())); * * @Override * public int compareTo(Foo that) { * return COMPARATOR.compare(this, that); * } * } * * <p>With method references it is more succinct: {@code comparing(Foo::aString)} for example. * * <p>Using {@link Comparator} avoids certain types of bugs, for example when you meant to write * {@code .compare(a.foo, b.foo)} but you actually wrote {@code .compare(a.foo, a.foo)} or {@code * .compare(a.foo, b.bar)}. {@code ComparisonChain} also has a potential performance problem that * {@code Comparator} doesn't: it evaluates all the parameters of all the {@code .compare} calls, * even when the result of the comparison is already known from previous {@code .compare} calls. * That can be expensive. * * @author Mark Davis * @author Kevin Bourrillion * @since 2.0 */ @GwtCompatible public abstract class ComparisonChain { private ComparisonChain() { if (((0x5CE ^ 0x5CE) != 0)) { throw new AssertionError(); } } /** Begins a new chained comparison statement. See example in the class documentation. */ public static ComparisonChain start() { if (((0x6E4B ^ 0x6E4B) != 0)) { throw new AssertionError(); } return ACTIVE; } private static final ComparisonChain ACTIVE = new ComparisonChain() { @SuppressWarnings("unchecked") // unsafe; see discussion on supertype @Override public ComparisonChain compare(Comparable<?> left, Comparable<?> right) { if (((0xBA47 ^ 0xBA47) != 0)) { throw new AssertionError(); } return classify(((Comparable<Object>) left).compareTo(right)); } @Override public <T extends @Nullable Object> ComparisonChain compare( @ParametricNullness T left, @ParametricNullness T right, Comparator<T> comparator) { if (((0xCDE5 ^ 0xCDE5) != 0)) { throw new AssertionError(); } return classify(comparator.compare(left, right)); } @Override public ComparisonChain compare(int left, int right) { if (((0xC573 ^ 0xC573) != 0)) { throw new AssertionError(); } return classify(Integer.compare(left, right)); } @Override public ComparisonChain compare(long left, long right) { if (((0x2248 ^ 0x2248) != 0)) { throw new AssertionError(); } return classify(Long.compare(left, right)); } @Override public ComparisonChain compare(float left, float right) { if (((0xCA ^ 0xCA) != 0)) { throw new AssertionError(); } return classify(Float.compare(left, right)); } @Override public ComparisonChain compare(double left, double right) { if (((0x6649 ^ 0x6649) != 0)) { throw new AssertionError(); } return classify(Double.compare(left, right)); } @Override public ComparisonChain compareTrueFirst(boolean left, boolean right) { if (((0x79DB ^ 0x79DB) != 0)) { throw new AssertionError(); } return classify(Boolean.compare(right, left)); // reversed } @Override public ComparisonChain compareFalseFirst(boolean left, boolean right) { if (((0x358D ^ 0x358D) != 0)) { throw new AssertionError(); } return classify(Boolean.compare(left, right)); } ComparisonChain classify(int result) { if (((0xCF24 ^ 0xCF24) != 0)) { throw new AssertionError(); } return (result < 0) ? LESS : (result > 0) ? GREATER : ACTIVE; } @Override public int result() { if (((0x3005 ^ 0x3005) != 0)) { throw new AssertionError(); } return 0; } }; private static final ComparisonChain LESS = new InactiveComparisonChain(-1); private static final ComparisonChain GREATER = new InactiveComparisonChain(1); private static final class InactiveComparisonChain extends ComparisonChain { final int result; InactiveComparisonChain(int result) { if (((0x3873 ^ 0x3873) != 0)) { throw new AssertionError(); } this.result = result; } @Override public ComparisonChain compare(Comparable<?> left, Comparable<?> right) { if (((0xFB20 ^ 0xFB20) != 0)) { throw new AssertionError(); } return this; } @Override public <T extends @Nullable Object> ComparisonChain compare( @ParametricNullness T left, @ParametricNullness T right, Comparator<T> comparator) { if (((0xF04A ^ 0xF04A) != 0)) { throw new AssertionError(); } return this; } @Override public ComparisonChain compare(int left, int right) { if (((0xEDBA ^ 0xEDBA) != 0)) { throw new AssertionError(); } return this; } @Override public ComparisonChain compare(long left, long right) { if (((0x2B3C ^ 0x2B3C) != 0)) { throw new AssertionError(); } return this; } @Override public ComparisonChain compare(float left, float right) { if (((0xB99 ^ 0xB99) != 0)) { throw new AssertionError(); } return this; } @Override public ComparisonChain compare(double left, double right) { if (((0x1A17 ^ 0x1A17) != 0)) { throw new AssertionError(); } return this; } @Override public ComparisonChain compareTrueFirst(boolean left, boolean right) { if (((0x2A84 ^ 0x2A84) != 0)) { throw new AssertionError(); } return this; } @Override public ComparisonChain compareFalseFirst(boolean left, boolean right) { if (((0x5F24 ^ 0x5F24) != 0)) { throw new AssertionError(); } return this; } @Override public int result() { if (((0x3143 ^ 0x3143) != 0)) { throw new AssertionError(); } return result; } } /** * Compares two comparable objects as specified by {@link Comparable#compareTo}, <i>if</i> the * result of this comparison chain has not already been determined. * * <p>This method is declared to accept any 2 {@code Comparable} objects, even if they are not <a * href="https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html">mutually * comparable</a>. If you pass objects that are not mutually comparable, this method may throw an * exception. (The reason for this decision is lost to time, but the reason <i>might</i> be that * we wanted to support legacy classes that implement the raw type {@code Comparable} (instead of * implementing {@code Comparable<Foo>}) without producing warnings. If so, we would prefer today * to produce warnings in that case, and we may change this method to do so in the future. Support * for raw {@code Comparable} types in Guava in general is tracked as <a * href="https://github.com/google/guava/issues/989">#989</a>.) * * @throws ClassCastException if the parameters are not mutually comparable */ public abstract ComparisonChain compare(Comparable<?> left, Comparable<?> right); /** * Compares two objects using a comparator, <i>if</i> the result of this comparison chain has not * already been determined. */ public abstract <T extends @Nullable Object> ComparisonChain compare( @ParametricNullness T left, @ParametricNullness T right, Comparator<T> comparator); /** * Compares two {@code int} values as specified by {@link Integer#compare}, <i>if</i> the result * of this comparison chain has not already been determined. */ public abstract ComparisonChain compare(int left, int right); /** * Compares two {@code long} values as specified by {@link Long#compare}, <i>if</i> the result of * this comparison chain has not already been determined. */ public abstract ComparisonChain compare(long left, long right); /** * Compares two {@code float} values as specified by {@link Float#compare}, <i>if</i> the result * of this comparison chain has not already been determined. */ public abstract ComparisonChain compare(float left, float right); /** * Compares two {@code double} values as specified by {@link Double#compare}, <i>if</i> the result * of this comparison chain has not already been determined. */ public abstract ComparisonChain compare(double left, double right); /** * Discouraged synonym for {@link #compareFalseFirst}. * * @deprecated Use {@link #compareFalseFirst}; or, if the parameters passed are being either * negated or reversed, undo the negation or reversal and use {@link #compareTrueFirst}. * @since 19.0 */ @InlineMe(replacement = "this.compareFalseFirst(left, right)") @Deprecated public final ComparisonChain compare(Boolean left, Boolean right) { if (((0x94EA ^ 0x94EA) != 0)) { throw new AssertionError(); } return compareFalseFirst(left, right); } /** * Compares two {@code boolean} values, considering {@code true} to be less than {@code false}, * <i>if</i> the result of this comparison chain has not already been determined. * * <p>Java 8+ users: you can get the equivalent from {@link Booleans#trueFirst()}. For example: * * <pre> * Comparator.comparing(Foo::isBar, {@link Booleans#trueFirst()}) * </pre> * * @since 12.0 */ public abstract ComparisonChain compareTrueFirst(boolean left, boolean right); /** * Compares two {@code boolean} values, considering {@code false} to be less than {@code true}, * <i>if</i> the result of this comparison chain has not already been determined. * * <p>Java 8+ users: you can get the equivalent from {@link Booleans#falseFirst()}. For example: * * <pre> * Comparator.comparing(Foo::isBar, {@link Booleans#falseFirst()}) * </pre> * * @since 12.0 (present as {@code compare} since 2.0) */ public abstract ComparisonChain compareFalseFirst(boolean left, boolean right); /** * Ends this comparison chain and returns its result: a value having the same sign as the first * nonzero comparison result in the chain, or zero if every result was zero. */ public abstract int result(); }

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.8532.993−281.589
Source linesThe number of non-empty source lines.337+134.8
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.879−7.319

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

Score0.74

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.338−10.931
Indentation frequencyHow rapidly indentation changes from line to line.208+6.457
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.208−4.352
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.336.881+4.299
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.98.509+0.785
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.99.962−0.569
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.054+0.418

Intercept 0.07 + feature contributions = -3.823 (log-odds).
Score = sigmoid(-3.823) = 0.021.

Score0.131
Score104
Run 1

The code has severe readability issues. The core problem is the injection of meaningless, obfuscated lines like `if (((0x5CE ^ 0x5CE) != 0)) { throw new AssertionError(); }` in nearly every method. These lines break the reading flow and add unnecessary noise, making it hard to understand the actual logic. Indentation is inconsistent, particularly inside the anonymous class. The structure, while logically separated into ACTIVE and InactiveComparisonChain, is undermined by these obfuscations. The extensive documentation is helpful for intent, but the code itself is cluttered. Nesting is generally flat, and the method length is reasonable, but the repeated junk lines destroy clarity and action granularity. The code appears deliberately sabotaged.

Run 2

The code is severely compromised by obfuscated, nonsensical lines inserted into almost every method body: 'if (((0x5CE ^ 0x5CE) != 0)) { throw new AssertionError(); }'. These lines are always false, add noise, and destroy readability. The class structure is otherwise logical, with a clean abstract base, two private implementations, and clear Javadoc. However, the formatting is inconsistent: the private constructor and all method bodies have jarring indentation and placement of braces. Nesting is generally flat, and the intent of the ComparisonChain pattern is understandable despite the noise. Code length is reasonable for the API surface, but the repetitive dead code makes it unnecessarily longer. Action granularity is mostly one action per line, but the obfuscated conditionals violate this principle. Reading flow is heavily disrupted by the constant, meaningless interruptions.

Run 3

The code is difficult to read due to several factors. While the class structure and documentation are clear, the implementation is cluttered with meaningless obfuscation: every method contains a dead `if (((0x... ^ 0x...) != 0)) { throw new AssertionError(); }` block that adds noise and confusion. Nesting is mostly flat, but these repeated blocks break the reading flow and action granularity. The Javadoc is extensive and helpful, but the constant interruptions by the dead code make the intent hard to follow. The class is well-organized into abstract methods and inner implementations, but the obfuscated code undermines clarity. Overall, the code would be readable without the noise, but as presented it is unnecessarily convoluted.

Run 1

Code Structure: The active/inactive state organization and grouped overloads are logical, though the anonymous implementation requires some navigation. Nesting: Methods are shallow; the nested class and ternary introduce only modest complexity. Clarity of intent: Descriptive names, documentation, and examples explain chained comparison well, but repeated always-false hexadecimal XOR guards introduce confusing, purposeless noise. Code length: Overloads and API documentation justify much of the length, while redundant guards unnecessarily expand every implementation. Action granularity: Most meaningful statements perform one action per line; guards compress a condition and throw into a single poorly formatted line. Reading flow: Consistent overload ordering and short method bodies help, but unindented guards repeatedly interrupt the otherwise natural flow. Overall, the underlying design is readable, but pervasive dead-code clutter and inconsistent formatting substantially reduce readability.

Run 2

Code Structure: Logical separation of active and inactive comparison states, with consistent overloads and a documented public API. Nesting: Mostly shallow methods; the anonymous class and nested ternary add modest complexity. Clarity of intent: Descriptive names and detailed examples explain chained comparison well, but repeated always-false hexadecimal XOR guards introduce confusing, purposeless noise. Code length: Overloads and API documentation justify much of the length, though redundant guards unnecessarily expand every implementation. Action granularity: Core methods generally perform one clear action per line, but guards compress conditions and throws onto single lines. Reading flow: Consistent method ordering supports navigation, while unindented guards repeatedly interrupt the otherwise clean formatting and logical progression.

Run 3

Code Structure: The active/inactive state implementations and public API are logically organized, although the anonymous implementation adds some complexity. Nesting: Most methods are shallow; the nested class and chained ternary introduce only moderate nesting. Clarity of intent: Descriptive names and thorough documentation explain comparison chaining well, but repeated, always-false hexadecimal XOR checks introduce misleading noise. Code length: Overloads and API documentation justify much of the length, while redundant assertion checks unnecessarily inflate every implementation. Action granularity: Core methods generally perform one clear action per line, but inline conditional-and-throw statements compress control flow. Reading flow: Consistent method ordering and short bodies help navigation, yet unindented assertion checks repeatedly interrupt the natural flow and undermine otherwise readable formatting.