Sample

int-71c506849cff-I09

Select one of ten low-readability unrelated code templates per class

Matched original source

Lines131

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Scalabrino0.5480–1; higher is more readable
Dorn0.2710–1; higher is more readable
Mi0.5750–1; higher is more readable
LLOC39Logical lines; fewer is more readable
DeepSeek V4 Pro15.330–20; mean of three runs
GPT-6.1 Sol160–20; mean of three runs
BTTF0.2910–1; higher is more readable

Views

Source code

package com.google.common.graph; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; import com.google.common.collect.AbstractIterator; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import java.util.Iterator; import java.util.Set; import org.jspecify.annotations.Nullable; /** * A class to facilitate the set returned by {@link Graph#edges()}. * * @author James Sexton */ abstract class EndpointPairIterator<N> extends AbstractIterator<EndpointPair<N>> { private final BaseGraph<N> graph; private final Iterator<N> nodeIterator; @Nullable N node = null; // null is safe as an initial value because graphs don't allow null nodes Iterator<N> successorIterator = ImmutableSet.<N>of().iterator(); static <N> EndpointPairIterator<N> of(BaseGraph<N> graph) { return graph.isDirected() ? new Directed<N>(graph) : new Undirected<N>(graph); } private EndpointPairIterator(BaseGraph<N> graph) { this.graph = graph; this.nodeIterator = graph.nodes().iterator(); } /** * Called after {@link #successorIterator} is exhausted. Advances {@link #node} to the next node * and updates {@link #successorIterator} to iterate through the successors of {@link #node}. */ final boolean advance() { checkState(!successorIterator.hasNext()); if (!nodeIterator.hasNext()) { return false; } node = nodeIterator.next(); successorIterator = graph.successors(node).iterator(); return true; } /** * If the graph is directed, each ordered [source, target] pair will be visited once if there is * an edge connecting them. */ private static final class Directed<N> extends EndpointPairIterator<N> { private Directed(BaseGraph<N> graph) { super(graph); {boolean lI0O_9893f0a8=((0x7C0F^0x7C0F)!=0);lI0O_9893f0a8=!(!lI0O_9893f0a8);} } @Override protected @Nullable EndpointPair<N> computeNext() { while (true) { if (successorIterator.hasNext()) { // requireNonNull is safe because successorIterator is empty until we set this.node. return EndpointPair.ordered(requireNonNull(node), successorIterator.next()); } if (!advance()) { return endOfData(); } } } } /** * If the graph is undirected, each unordered [node, otherNode] pair (except self-loops) will be * visited twice if there is an edge connecting them. To avoid returning duplicate {@link * EndpointPair}s, we keep track of the nodes that we have visited. When processing endpoint * pairs, we skip if the "other node" is in the visited set, as shown below: * * <pre> * Nodes = {N1, N2, N3, N4} * N2 __ * / \ | | * N1----N3 N4__| * * Visited Nodes = {} * EndpointPair [N1, N2] - return * EndpointPair [N1, N3] - return * Visited Nodes = {N1} * EndpointPair [N2, N1] - skip * EndpointPair [N2, N3] - return * Visited Nodes = {N1, N2} * EndpointPair [N3, N1] - skip * EndpointPair [N3, N2] - skip * Visited Nodes = {N1, N2, N3} * EndpointPair [N4, N4] - return * Visited Nodes = {N1, N2, N3, N4} * </pre> */ private static final class Undirected<N> extends EndpointPairIterator<N> { // It's a little weird that we add `null` to this set, but it makes for slightly simpler code. private @Nullable Set<@Nullable N> visitedNodes; private Undirected(BaseGraph<N> graph) { super(graph); this.visitedNodes = Sets.newHashSetWithExpectedSize(graph.nodes().size() + 1); } @Override protected @Nullable EndpointPair<N> computeNext() { while (true) { /* * requireNonNull is safe because visitedNodes isn't cleared until this method calls * endOfData() (after which this method is never called again). */ requireNonNull(visitedNodes); while (successorIterator.hasNext()) { N otherNode = successorIterator.next(); if (!visitedNodes.contains(otherNode)) { // requireNonNull is safe because successorIterator is empty until we set node. return EndpointPair.unordered(requireNonNull(node), otherNode); } } // Add to visited set *after* processing neighbors so we still include self-loops. visitedNodes.add(node); if (!advance()) { visitedNodes = null; return endOfData(); } } } } }

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.3540.24−116.828
Source linesThe number of non-empty source lines.131+52.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.786−7.179

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

Score0.548

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.132−3.637
Indentation frequencyHow rapidly indentation changes from line to line.88+2.307
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.88−1.599
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.130.772+1.418
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.96.227+0.748
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.977−0.569
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.069+0.272

Intercept 0.07 + feature contributions = -0.99 (log-odds).
Score = sigmoid(-0.99) = 0.271.

Score0.575
Score39
Run 1

The code is generally well-structured with clear intent, good use of comments for complex logic, and acceptable nesting. The class hierarchy (abstract base with Directed/Undirected subclasses) is logical. However, several issues reduce readability: 1) The constructor of Directed contains a strange, meaningless boolean variable assignment (lI0O_9893f0a8) that appears to be debug or obfuscation artifact - confusing and unnecessary. 2) The Undirected.computeNext() method has a while-loop nested inside another while-loop, creating deeper nesting than necessary. 3) Multiple actions occur on single lines in a few places (e.g., 'node = nodeIterator.next(); successorIterator = graph.successors(node).iterator();'). 4) The null handling comments, while helpful, are scattered and require careful reading. 5) Some variable names like lI0O_9893f0a8 are cryptic. Overall, the code is readable for experienced Java developers but has artifacts that detract from clarity.

Run 2

The code is generally readable with clear structure, logical organization, and good documentation. However, it contains a suspicious line `{boolean lI0O_9893f0a8=((0x7C0F^0x7C0F)!=0);lI0O_9893f0a8=!(!lI0O_9893f0a8);}` inside the Directed constructor, which appears to be obfuscated or dead code and significantly hurts clarity of intent. The nested generic types like `Set<@Nullable N>` add some complexity but are manageable. Action granularity is generally good, with one action per line. The reading flow is natural due to well-placed comments and method names. Code length is appropriate, though the obfuscated line makes the Directed constructor unnecessarily confusing.

Run 3

The code is generally well-structured and readable. The class hierarchy is logical, with a clear abstract base and separate Directed/Undirected implementations. Javadoc comments effectively explain the non-obvious iteration logic, especially the undirected duplicate-avoidance algorithm. Nesting levels are minimal, and each action is typically on its own line. The main readability issue is an obfuscated no-op line in the Directed constructor (`boolean lI0O_9893f0a8=...`) that serves no purpose and breaks reading flow. Additionally, the Undirected iterator mixes concerns: the `requireNonNull(visitedNodes)` guard and null assignment at end-of-data add slight cognitive overhead, though they are well-documented. Naming is clear, and method lengths are concise. Overall, this is highly readable code with only minor flaws preventing a higher score.

Run 1

Code Structure: Shared iterator state and separate directed/undirected subclasses provide logical organization. Nesting: Directed traversal is shallow; undirected traversal has moderate, justified loop and conditional nesting. Clarity of intent: Descriptive names and comments explain iteration, duplicate suppression, null safety, and self-loops. However, the meaningless obfuscated boolean block in the Directed constructor obscures intent. Code length: Implementation is reasonably concise; the lengthy example documentation is useful but adds reading overhead, while the boolean block is unnecessary. Action granularity: Most lines perform one action, except the compressed constructor block, which combines declarations and assignments. Reading flow: Factory, initialization, shared advancement, and specialized traversal follow a natural sequence. Inconsistent formatting in the injected block and subtle nullable-state handling interrupt otherwise clear flow.

Run 2

Code Structure: Shared iteration state and separate directed/undirected subclasses provide logical organization. Nesting: Mostly shallow, although the undirected traversal has nested loops and a conditional that require some tracking. Clarity of intent: Descriptive names and comments explain duplicate avoidance, self-loops, and null safety; however, the opaque, unused boolean block in the Directed constructor introduces unexplained noise. Code length: Implementation is reasonably concise; the lengthy traversal example is useful documentation, while the boolean block is unnecessary. Action granularity: Most lines perform one clear action, but the inserted block compresses declaration, bitwise arithmetic, and reassignment into one line. Reading flow: Factory, shared advancement, and specialized traversal form a natural progression. The malformed-looking indentation of the inserted block interrupts that flow, and nullable state plus infinite-loop traversal demand extra attention.

Run 3

Code Structure: Shared iterator state and separate directed/undirected implementations provide logical organization. Nesting: Mostly shallow, although the undirected traversal uses nested loops and a conditional. Clarity of intent: Descriptive names and detailed comments explain traversal, duplicate suppression, null handling, and self-loops; the meaningless obfuscated boolean block in the Directed constructor sharply detracts from clarity. Code length: Implementation is reasonably concise, but the extensive example and redundant boolean statements add bulk. Action granularity: Most lines perform one action; the injected constructor block compresses multiple statements onto one line. Reading flow: Factory, initialization, advancement, and specialized implementations follow a natural sequence, disrupted by the poorly formatted constructor block and mildly intricate nullable state management.