My concern was with wrapping all other blocks, as there are multiple nuances to make code pretty and ease to read.
Some my notes from past .... incomplete ideas .... :
Place a empty line after multy line method declaration ?
public static String buildSetColumns(Collection<Column> columns, final String leftAlias,
final String rightAlias) {
return Joiner.on(", ").join(transform(columns, new Function<Column, String>() {
@Override
public String apply(Column input) {
return input.quoted(leftAlias) + " = " + input.quoted(rightAlias);
}
}));
}
public static String buildColumnsEquals(Collection<Column> columns, final String leftAlias,
final String rightAlias, boolean buildNotEquals) {
Collection<ImmutableList<Column>> columnPairs = zipCollections(columns, columns);
return buildColumnPairsEquals(columnPairs, leftAlias, rightAlias, buildNotEquals);
}
public static String buildColumnPairsEquals(Collection<ImmutableList<Column>> columnPairs,
final String leftAlias, final String rightAlias, final boolean buildNotEquals) {
return Joiner.on(buildNotEquals ? " or " : " and ").join(
transform(columnPairs, new Function<ImmutableList<Column>, String>() {
@Override
public String apply(ImmutableList<Column> input) {
return buildColumnsEquals(input.get(0), input.get(1), leftAlias, rightAlias, buildNotEquals);
}
}));
}
Or it is question of method declaration indentation (the same code below):
public static String buildColumnsEquals(Collection<Column> columns, final String leftAlias,
final String rightAlias, boolean buildNotEquals) {
Collection<ImmutableList<Column>> columnPairs = zipCollections(columns, columns);
return buildColumnPairsEquals(columnPairs, leftAlias, rightAlias, buildNotEquals);
}
public static String buildColumnPairsEquals(Collection<ImmutableList<Column>> columnPairs,
final String leftAlias, final String rightAlias, final boolean buildNotEquals) {
return Joiner.on(buildNotEquals ? " or " : " and ").join(
transform(columnPairs, new Function<ImmutableList<Column>, String>() {
@Override
public String apply(ImmutableList<Column> input) {
return buildColumnsEquals(input.get(0), input.get(1), leftAlias, rightAlias, buildNotEquals);
}
}));
}
public static String buildColumnsEquals(Column leftColumn, Column rightColumn, String leftAlias, String rightAlias,
boolean buildNotEquals) {
if (leftColumn == null || rightColumn == null) {
throw new IllegalArgumentException("leftColumn and rightColumn should not be null");
}
-----------------------
private void applyCumulativeUpdate(ImmutableSortedSet<StateEntry> allStatesToApply, WorkMode workMode)
throws SQLException {
boolean fullReload = workMode == WorkMode.RELOAD_FROM_SCRATCH;
final Connection connection = dataSource.getConnection();
----------------------------
private static void countRecordsInCumulativeTables(Connection connection, TableChangeChecker checker,
MultiFeedDefinition multiFeedDefinition) throws SQLException {
LOG.info("Calculating number of insert/update/delete records in cumulative update");
for (TableName tableName : multiFeedDefinition.getTableNamesWithSchema()) {
TableName cumulativeTable = multiFeedDefinition.getCumulativeTable(tableName).get();
int inserts = countRecords(connection, cumulativeTable, Action.INSERT.getValue(), INDEX_CUMULATIVE);
int updates = countRecords(connection, cumulativeTable, Action.UPDATE.getValue(), INDEX_CUMULATIVE);
int deletes = countRecords(connection, cumulativeTable, Action.DELETE.getValue(), INDEX_CUMULATIVE);
checker.addExpectedChange(CUMULATIVE_STATE, tableName, inserts, updates, deletes);
}
even from code of checkstyle that Richard point to , you can see that empty lines at the top of block is used to clearly separate header(for/while/if/method/...) of block with following code. Empty lines are good when method signatures are long and wrapping rules are a matching the code in block. But this is very subjective view on a code. I do not like messy code.