Sample

int-0c2e17761b06-SRC

Unmodified source class

Lines178

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Scalabrino0.6940–1; higher is more readable
Dorn0.1770–1; higher is more readable
Mi0.2910–1; higher is more readable
LLOC29Logical lines; fewer is more readable
DeepSeek V4 Pro15.330–20; mean of three runs
GPT-6.1 Sol170–20; mean of three runs
BTTF0.6050–1; higher is more readable

Views

Source code

package io.netty.channel.nio; import io.netty.channel.Channel; import io.netty.channel.DefaultSelectStrategyFactory; import io.netty.channel.EventLoopTaskQueueFactory; import io.netty.channel.IoEventLoop; import io.netty.channel.IoEventLoopGroup; import io.netty.channel.IoHandlerFactory; import io.netty.channel.MultiThreadIoEventLoopGroup; import io.netty.channel.SelectStrategyFactory; import io.netty.channel.SingleThreadEventLoop; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.EventExecutorChooserFactory; import io.netty.util.concurrent.RejectedExecutionHandler; import io.netty.util.concurrent.RejectedExecutionHandlers; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; import java.nio.channels.Selector; import java.nio.channels.spi.SelectorProvider; import java.util.concurrent.Executor; import java.util.concurrent.ThreadFactory; /** * {@link MultiThreadIoEventLoopGroup} implementation which is used for NIO {@link Selector} based {@link Channel}s. * * @deprecated Use {@link MultiThreadIoEventLoopGroup} with {@link NioIoHandler#newFactory()}. */ @Deprecated public class NioEventLoopGroup extends MultiThreadIoEventLoopGroup implements IoEventLoopGroup { private static final InternalLogger LOGGER = InternalLoggerFactory.getInstance(NioEventLoopGroup.class); /** * Create a new instance using the default number of threads, the default {@link ThreadFactory} and * the {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}. */ public NioEventLoopGroup() { this(0); } /** * Create a new instance using the specified number of threads, {@link ThreadFactory} and the * {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}. */ public NioEventLoopGroup(int nThreads) { this(nThreads, (Executor) null); } /** * Create a new instance using the default number of threads, the given {@link ThreadFactory} and the * {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}. */ public NioEventLoopGroup(ThreadFactory threadFactory) { this(0, threadFactory, SelectorProvider.provider()); } /** * Create a new instance using the specified number of threads, the given {@link ThreadFactory} and the * {@link SelectorProvider} which is returned by {@link SelectorProvider#provider()}. */ public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory) { this(nThreads, threadFactory, SelectorProvider.provider()); } public NioEventLoopGroup(int nThreads, Executor executor) { this(nThreads, executor, SelectorProvider.provider()); } /** * Create a new instance using the specified number of threads, the given {@link ThreadFactory} and the given * {@link SelectorProvider}. */ public NioEventLoopGroup( int nThreads, ThreadFactory threadFactory, final SelectorProvider selectorProvider) { this(nThreads, threadFactory, selectorProvider, DefaultSelectStrategyFactory.INSTANCE); } public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory) { super(nThreads, threadFactory, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), RejectedExecutionHandlers.reject()); } public NioEventLoopGroup( int nThreads, Executor executor, final SelectorProvider selectorProvider) { this(nThreads, executor, selectorProvider, DefaultSelectStrategyFactory.INSTANCE); } public NioEventLoopGroup(int nThreads, Executor executor, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory) { super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), RejectedExecutionHandlers.reject()); } public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory) { super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, RejectedExecutionHandlers.reject()); } public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory, final RejectedExecutionHandler rejectedExecutionHandler) { super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, rejectedExecutionHandler); } public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory, final RejectedExecutionHandler rejectedExecutionHandler, final EventLoopTaskQueueFactory taskQueueFactory) { super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, rejectedExecutionHandler, taskQueueFactory); } /** * @param nThreads the number of threads that will be used by this instance. * @param executor the Executor to use, or {@code null} if default one should be used. * @param chooserFactory the {@link EventExecutorChooserFactory} to use. * @param selectorProvider the {@link SelectorProvider} to use. * @param selectStrategyFactory the {@link SelectStrategyFactory} to use. * @param rejectedExecutionHandler the {@link RejectedExecutionHandler} to use. * @param taskQueueFactory the {@link EventLoopTaskQueueFactory} to use for * {@link SingleThreadEventLoop#execute(Runnable)}, * or {@code null} if default one should be used. * @param tailTaskQueueFactory the {@link EventLoopTaskQueueFactory} to use for * {@link SingleThreadEventLoop#executeAfterEventLoopIteration(Runnable)}, * or {@code null} if default one should be used. */ public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory, EventLoopTaskQueueFactory tailTaskQueueFactory) { super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, rejectedExecutionHandler, taskQueueFactory, tailTaskQueueFactory); } /** * This method is a no-op. * * @deprecated */ @Deprecated public void setIoRatio(int ioRatio) { LOGGER.debug("NioEventLoopGroup.setIoRatio(int) logic was removed, this is a no-op"); } /** * Replaces the current {@link Selector}s of the child event loops with newly created {@link Selector}s to work * around the infamous epoll 100% CPU bug. */ public void rebuildSelectors() { for (EventExecutor e: this) { ((NioEventLoop) e).rebuildSelector(); } } @Override protected IoEventLoop newChild(Executor executor, IoHandlerFactory ioHandlerFactory, Object... args) { RejectedExecutionHandler rejectedExecutionHandler = (RejectedExecutionHandler) args[0]; EventLoopTaskQueueFactory taskQueueFactory = null; EventLoopTaskQueueFactory tailTaskQueueFactory = null; int argsLength = args.length; if (argsLength > 1) { taskQueueFactory = (EventLoopTaskQueueFactory) args[1]; } if (argsLength > 2) { tailTaskQueueFactory = (EventLoopTaskQueueFactory) args[2]; } return new NioEventLoop( this, executor, ioHandlerFactory, taskQueueFactory, tailTaskQueueFactory, rejectedExecutionHandler); } }

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.5279.93−174.238
Source linesThe number of non-empty source lines.178+71.2
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.63−6.944

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

Score0.694

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.178−5.266
Indentation frequencyHow rapidly indentation changes from line to line.139+4.071
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.139−2.769
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.177.974+2.078
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.115.961−1.246
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.113.402+1.025
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.045+0.5

Intercept 0.07 + feature contributions = -1.537 (log-odds).
Score = sigmoid(-1.537) = 0.177.

Score0.291
Score29
Run 1

The code follows a clear, consistent structure with numerous overloaded constructors that chain logically via 'this(...)' or 'super(...)', which improves readability and reduces duplication. Javadocs provide useful context for most public methods. However, the class has many constructors with long parameter lists, making it dense and harder to scan. Some constructors lack Javadocs, and the 'newChild' method relies on positional array arguments and manual casts, which slightly obscures intent. Nesting is minimal and reading flow is generally good, but the lengthy repeated constructor patterns reduce overall conciseness.

Run 2

The code has a clear overall structure and follows common Java patterns with constructors delegating via `this(...)`, but readability is hurt by a large number of overloaded constructors (10+) that obscure intent. Parameter lists are long, and some constructors lack Javadoc, creating inconsistency. The `newChild` method uses array args with manual bounds checking, which is brittle and less readable than named parameters or a builder. Boolean parameters and deeply chained constructor calls reduce clarity. Positive aspects: good use of `@Deprecated`, clear naming, and short method bodies. However, the constructor overloads make the class look cluttered and hard to navigate, and the mixed argument order across constructors adds confusion. The code is maintainable but not highly readable without IDE assistance.

Run 3

The code is highly readable and well-structured. It exhibits clear, consistent organization, especially in the constructor overloading pattern. The nesting is minimal, primarily limited to minor conditional checks within the newChild method. Intent is clear through descriptive names and comprehensive Javadoc. Code length, while extensive, is justified by the various constructor combinations typical of Netty APIs. Action granularity is strong, with most statements on separate lines. Reading flow is natural and logical. The only slight deductions are for the slightly repetitive constructor pattern and the cryptic 'args' array handling in newChild, which could be more explicit.

Run 1

Code Structure: Logically organized into constructors and operational methods, with consistent delegation rather than tangled logic. Nesting: Very shallow; only a simple loop and independent conditionals. Clarity of intent: Descriptive names and Javadoc explain configuration, deprecation, and selector rebuilding. However, positional Object... arguments and casts in newChild obscure type expectations. Code length: Individual methods are concise, but numerous similar constructor overloads and repetitive documentation make the class lengthy to scan. Action granularity: Statements generally perform one action each; nested factory calls remain manageable. Reading flow: Progression from basic constructors to advanced configuration and behavior is natural, though inconsistent parameter indentation and uneven documentation slightly disrupt scanning.

Run 2

Code Structure: Logically organized into constructors, public operations, and child creation, with consistent delegation. Nesting: Very shallow; only a simple loop and independent conditionals. Clarity of intent: Descriptive names and Javadoc explain most behavior, including deprecation and the no-op method. However, positional Object... arguments and casts in newChild obscure the parameter contract. Code length: Numerous constructor overloads and repetitive documentation make the class lengthy, though most support useful configuration options. Action granularity: Statements generally perform one action each; nested factory calls remain understandable. Reading flow: Progression from simple constructors to advanced configurations is natural, followed by operational methods. Minor indentation inconsistencies, long signatures, and uneven documentation slightly hinder scanning.

Run 3

Code Structure: Constructors are grouped logically, followed by operational methods and child creation; delegation avoids duplicated implementation. Nesting: Very shallow, with only a simple loop and independent conditionals. Clarity of intent: Descriptive names and useful Javadoc explain configuration and deprecated behavior, though positional Object... arguments and casts obscure newChild's contract. Code length: Numerous constructor overloads and repetitive documentation increase length, but most support distinct configuration options. Action granularity: Statements generally perform one action each; nested factory calls remain manageable. Reading flow: Progression from basic constructors to advanced configuration is natural, followed by short methods. Minor indentation inconsistencies, lengthy parameter lists, and uneven constructor documentation slightly hinder scanning.