Sample

int-4b20af11f7d4-I04

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

Matched original source

Lines51

Scores

MethodScoreScale
Posnett10–1; higher is more readable
Scalabrino0.9480–1; higher is more readable
Dorn0.7530–1; higher is more readable
Mi0.3840–1; higher is more readable
LLOC1Logical lines; fewer is more readable
DeepSeek V4 Pro17.670–20; mean of three runs
GPT-6.1 Sol13.670–20; mean of three runs
BTTF0.8190–1; higher is more readable

Views

Source code

package org.springframework.jdbc.core; import java.sql.PreparedStatement; import java.sql.SQLException; import org.jspecify.annotations.Nullable; import org.springframework.jdbc.support.JdbcUtils; /** * Interface to be implemented for setting values for more complex database-specific * types not supported by the standard {@code setObject} method. This is * effectively an extended variant of {@link org.springframework.jdbc.support.SqlValue}. * * <p>Implementations perform the actual work of setting the actual values. They must * implement the callback method {@code setTypeValue} which can throw SQLExceptions * that will be caught and translated by the calling code. This callback method has * access to the underlying Connection via the given PreparedStatement object, if that * should be needed to create any database-specific objects. * * @author Thomas Risberg * @author Juergen Hoeller * @since 1.1 * @see java.sql.Types * @see java.sql.PreparedStatement#setObject * @see JdbcOperations#update(String, Object[], int[]) * @see org.springframework.jdbc.support.SqlValue */ public interface SqlTypeValue { /** * Constant that indicates an unknown (or unspecified) SQL type. * Passed into {@code setTypeValue} if the original operation method * does not specify an SQL type. * @see java.sql.Types * @see JdbcOperations#update(String, Object[]) */ int TYPE_UNKNOWN = JdbcUtils.TYPE_UNKNOWN; /** * Set the type value on the given PreparedStatement. * @param ps the PreparedStatement to work on * @param paramIndex the index of the parameter for which we need to set the value * @param sqlType the SQL type of the parameter we are setting * @param typeName the type name of the parameter (optional) * @throws SQLException if an SQLException is encountered while setting parameter values * @see java.sql.Types * @see java.sql.PreparedStatement#setObject */ void a(PreparedStatement a, int b, int c, @Nullable String d) throws SQLException; }

Loading feature diagnosis…

Source regions

Feature contributions

Feature contributions

FeatureValueContribution
(log-odds)
Source linesThe number of non-empty source lines.51+20.4
Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones.379.567−12.526
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.9−7.35

Intercept 8.87 + feature contributions = 9.394 (log-odds).
Score = sigmoid(9.394) = 1.

Score0.948

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.52−0.805
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.016+0.79
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.85.577+0.576
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.1+0.398
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.50.856+0.301
Indentation frequencyHow rapidly indentation changes from line to line.18−0.115
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.88.962−0.103

Intercept 0.07 + feature contributions = 1.113 (log-odds).
Score = sigmoid(1.113) = 0.753.

Score0.384
Score1
Run 1

The code is highly readable overall. The structure is logical, with clear package/import declarations, comprehensive Javadoc, and a well-documented interface. Nesting is flat, and intent is clear despite the poor method/parameter names (a, b, c, d) in the interface, which significantly reduces clarity. Code length is appropriate, with concise yet informative documentation. Action granularity is excellent, with one action per declaration. Reading flow is natural, following standard Java conventions. The only notable issue is the ambiguous parameter naming, which would hinder understanding for implementers without consulting the Javadoc.

Run 2

The code is well-structured and highly readable. The package and imports are clear, the Javadoc is thorough and informative, and the interface definition is simple and flat with no nesting. The intent of the interface is clearly communicated through its name and documentation. Action granularity and reading flow are excellent. However, the method signature and parameter names have been obfuscated, which significantly detracts from clarity and readability in the actual code block.

Run 3

The code is highly readable overall. It has a clear, logical structure with a well-documented interface and a single, coherent method signature. The Javadoc is thorough and explains intent, parameters, and exceptions clearly. Nesting is minimal, as it is an interface with only one method and a constant. Action granularity is clean — each parameter and declaration is distinct. The only significant detraction is the use of non-descriptive parameter names (`a`, `b`, `c`, `d`) in the method declaration, which hurts clarity compared to the documented names (`ps`, `paramIndex`, `sqlType`, `typeName`). This inconsistency makes the signature slightly ambiguous despite the documentation. Otherwise, the code is concise, not unnecessarily long, and follows a natural reading flow.

Run 1

Code Structure: Logically organized as a small interface with imports, a constant, and one method. Nesting: Minimal, with no nested control flow. Clarity of intent: Interface documentation explains the purpose, but the method name 'a' and parameters 'a', 'b', 'c', and 'd' obscure meaning. Documentation references 'setTypeValue' and parameter names that do not match the declaration, creating significant confusion. Code length: The implementation is concise, though documentation is relatively lengthy and occasionally repetitive. Action granularity: Declarations are clearly separated, with no multiple actions per line. Reading flow: Generally natural from interface purpose to constant to callback, but inconsistent naming and documentation interrupt comprehension.

Run 2

Code Structure: The interface is logically organized into imports, documentation, a constant, and a method declaration. Nesting: There is no nested control flow, making it easy to scan. Clarity of intent: The interface name and documentation explain its purpose, but the method name 'a' and parameters 'a', 'b', 'c', and 'd' obscure meaning. Documentation refers to 'setTypeValue' and descriptive parameter names that do not match the declaration, creating confusion. Code length: The implementation is concise; documentation is useful but somewhat repetitive. Action granularity: Each declaration is separate, with no bundled operations. Reading flow: The top-to-bottom organization is natural, but the mismatch between documentation and signature interrupts comprehension.

Run 3

Code Structure: The interface is logically organized into imports, documentation, a constant, and a single method. Nesting: There is no nested control flow, making it easy to scan. Clarity of intent: Class documentation explains the purpose well, but the method name 'a' and parameter names 'a', 'b', 'c', and 'd' obscure meaning. Documentation refers to 'setTypeValue' and named parameters that do not match the declaration, creating confusion. Code length: The implementation is concise; documentation is somewhat verbose but mostly useful. Action granularity: Each declaration is separate, with no combined actions. Reading flow: The top-to-bottom organization is natural, though inconsistent documentation and identifiers interrupt comprehension. Meaningful method and parameter names would substantially improve readability.