From 50acf1f9def7e658055cc13df43ccb207f106fa8 Mon Sep 17 00:00:00 2001
From: Pierre Gruet <pgtdebian@free.fr>
Date: Sun, 1 Nov 2020 07:48:27 +0100
Subject: [PATCH] New upstream version 2.6.9

---
 CHANGES                                       |  4 ++
 build.properties                              |  2 +-
 build.xml                                     |  3 +
 .../ImmutableExternalPrefixMapSlowTest.java   | 15 ++---
 src/it/unimi/dsi/Util.java                    |  4 +-
 .../big/io/FileLinesByteArrayCollection.java  | 24 +++----
 .../unimi/dsi/big/io/FileLinesCollection.java | 24 +++----
 .../unimi/dsi/big/util/AbstractPrefixMap.java | 12 ++--
 .../dsi/big/util/FrontCodedStringBigList.java |  4 +-
 .../dsi/big/util/ImmutableBinaryTrie.java     | 28 ++++----
 .../big/util/ImmutableExternalPrefixMap.java  |  8 +--
 .../big/util/LiterallySignedStringMap.java    | 37 +++++------
 .../big/util/LongBigListSignedStringMap.java  | 41 ++++++------
 .../util/PermutedFrontCodedStringBigList.java | 26 ++++----
 src/it/unimi/dsi/big/util/PrefixMap.java      |  4 +-
 .../big/util/SemiExternalGammaBigList.java    | 50 +++++++-------
 .../big/util/ShiftAddXorSignedStringMap.java  | 35 +++++-----
 src/it/unimi/dsi/big/util/StringMap.java      |  7 +-
 src/it/unimi/dsi/big/util/StringMaps.java     | 23 ++++---
 .../big/util/TernaryIntervalSearchTree.java   | 23 ++++---
 src/it/unimi/dsi/bits/AbstractBitVector.java  | 10 +--
 src/it/unimi/dsi/bits/BitVector.java          | 10 +--
 src/it/unimi/dsi/bits/BitVectors.java         | 12 ++--
 .../unimi/dsi/bits/BooleanListBitVector.java  | 10 +--
 src/it/unimi/dsi/bits/Fast.java               |  3 +-
 .../bits/HuTuckerTransformationStrategy.java  | 20 +++---
 src/it/unimi/dsi/bits/LongArrayBitVector.java |  4 +-
 .../unimi/dsi/bits/LongBigArrayBitVector.java |  4 +-
 .../PrefixCoderTransformationStrategy.java    |  4 +-
 .../dsi/bits/TransformationStrategies.java    | 52 ++++++++++-----
 .../dsi/bits/TransformationStrategy.java      |  4 +-
 .../CanonicalFast64CodeWordDecoder.java       |  8 +--
 .../unimi/dsi/compression/CodeWordCoder.java  | 10 +--
 src/it/unimi/dsi/compression/Codec.java       |  5 +-
 src/it/unimi/dsi/compression/Coder.java       |  8 +--
 src/it/unimi/dsi/compression/Decoder.java     |  8 +--
 .../dsi/compression/Fast64CodeWordCoder.java  |  8 +--
 .../unimi/dsi/compression/HuTuckerCodec.java  |  8 +--
 .../unimi/dsi/compression/HuffmanCodec.java   | 10 +--
 src/it/unimi/dsi/compression/PrefixCodec.java |  4 +-
 src/it/unimi/dsi/compression/PrefixCoder.java |  5 +-
 src/it/unimi/dsi/compression/TreeDecoder.java | 16 ++---
 .../unimi/dsi/io/ByteBufferInputStream.java   |  8 +--
 src/it/unimi/dsi/io/ByteDiskQueue.java        |  4 +-
 src/it/unimi/dsi/io/DebugInputBitStream.java  | 48 +++++++-------
 src/it/unimi/dsi/io/DebugOutputBitStream.java | 14 ++--
 src/it/unimi/dsi/io/DelimitedWordReader.java  | 31 +++++----
 src/it/unimi/dsi/io/FastBufferedReader.java   | 14 ++--
 src/it/unimi/dsi/io/FileLinesCollection.java  | 24 +++----
 src/it/unimi/dsi/io/InputBitStream.java       | 64 ++++++++++--------
 src/it/unimi/dsi/io/LineIterator.java         | 14 ++--
 src/it/unimi/dsi/io/LineWordReader.java       |  8 +--
 src/it/unimi/dsi/io/MultipleInputStream.java  |  6 +-
 src/it/unimi/dsi/io/NullInputStream.java      | 10 +--
 src/it/unimi/dsi/io/NullOutputStream.java     |  8 +--
 src/it/unimi/dsi/io/NullReader.java           |  4 +-
 src/it/unimi/dsi/io/OfflineIterable.java      | 29 ++++----
 src/it/unimi/dsi/io/OutputBitStream.java      | 26 ++++----
 src/it/unimi/dsi/io/SafelyCloseable.java      |  5 +-
 src/it/unimi/dsi/io/SegmentedInputStream.java | 20 +++---
 src/it/unimi/dsi/io/WordReader.java           |  6 +-
 src/it/unimi/dsi/lang/EnumStringParser.java   | 10 +--
 src/it/unimi/dsi/lang/FlyweightPrototype.java |  4 +-
 .../unimi/dsi/lang/FlyweightPrototypes.java   |  8 +--
 src/it/unimi/dsi/lang/MutableString.java      |  4 +-
 src/it/unimi/dsi/lang/ObjectParser.java       |  4 +-
 src/it/unimi/dsi/logging/ProgressLogger.java  |  4 +-
 src/it/unimi/dsi/parser/Attribute.java        |  4 +-
 src/it/unimi/dsi/parser/BulletParser.java     |  3 +-
 src/it/unimi/dsi/parser/Element.java          |  5 +-
 src/it/unimi/dsi/parser/Entity.java           |  4 +-
 src/it/unimi/dsi/parser/HTMLFactory.java      |  5 +-
 src/it/unimi/dsi/parser/ParsingFactory.java   |  4 +-
 .../dsi/parser/WellFormedXmlFactory.java      |  4 +-
 .../unimi/dsi/parser/callback/Callback.java   |  8 +--
 .../callback/ComposedCallbackBuilder.java     | 12 ++--
 .../callback/DebugCallbackDecorator.java      |  8 +--
 .../dsi/parser/callback/DefaultCallback.java  |  8 +--
 .../dsi/parser/callback/LinkExtractor.java    | 10 +--
 .../dsi/parser/callback/TextExtractor.java    |  8 +--
 src/it/unimi/dsi/stat/Jackknife.java          | 19 ++----
 src/it/unimi/dsi/stat/SummaryStats.java       | 12 ++--
 src/it/unimi/dsi/util/AbstractPrefixMap.java  | 12 ++--
 src/it/unimi/dsi/util/BloomFilter.java        | 24 +++----
 .../unimi/dsi/util/ByteBufferLongBigList.java |  4 +-
 .../dsi/util/CircularCharArrayBuffer.java     | 20 +++---
 .../unimi/dsi/util/FrontCodedStringList.java  | 40 +++++------
 .../dsi/util/HyperLogLogCounterArray.java     | 24 +++----
 .../unimi/dsi/util/ImmutableBinaryTrie.java   | 28 ++++----
 .../dsi/util/ImmutableExternalPrefixMap.java  | 40 +++++------
 src/it/unimi/dsi/util/Interval.java           | 19 +++---
 src/it/unimi/dsi/util/Intervals.java          |  4 +-
 src/it/unimi/dsi/util/KahanSummation.java     |  4 +-
 .../dsi/util/LiterallySignedStringMap.java    | 37 +++++------
 src/it/unimi/dsi/util/LongInterval.java       | 19 +++---
 src/it/unimi/dsi/util/LongIntervals.java      |  4 +-
 .../util/PermutedFrontCodedStringList.java    | 26 ++++----
 src/it/unimi/dsi/util/PrefixMap.java          |  4 +-
 src/it/unimi/dsi/util/Properties.java         | 66 +++++++++----------
 .../unimi/dsi/util/SemiExternalGammaList.java | 48 +++++++-------
 .../dsi/util/ShiftAddXorSignedStringMap.java  | 36 +++++-----
 src/it/unimi/dsi/util/SplitMix64Random.java   |  9 ++-
 .../dsi/util/SplitMix64RandomGenerator.java   | 17 +++--
 src/it/unimi/dsi/util/StringMap.java          |  8 +--
 src/it/unimi/dsi/util/StringMaps.java         | 24 +++----
 .../dsi/util/TernaryIntervalSearchTree.java   | 18 ++---
 src/it/unimi/dsi/util/TextPattern.java        |  4 +-
 .../dsi/util/XoRoShiRo128PlusPlusRandom.java  |  4 +-
 .../XoRoShiRo128PlusPlusRandomGenerator.java  |  4 +-
 .../dsi/util/XoRoShiRo128PlusRandom.java      |  4 +-
 .../util/XoRoShiRo128PlusRandomGenerator.java |  4 +-
 .../dsi/util/XoRoShiRo128StarStarRandom.java  |  4 +-
 .../XoRoShiRo128StarStarRandomGenerator.java  |  4 +-
 .../dsi/util/XoShiRo256PlusPlusRandom.java    |  4 +-
 .../XoShiRo256PlusPlusRandomGenerator.java    |  4 +-
 .../unimi/dsi/util/XoShiRo256PlusRandom.java  |  4 +-
 .../util/XoShiRo256PlusRandomGenerator.java   |  4 +-
 .../dsi/util/XoShiRo256StarStarRandom.java    |  4 +-
 .../XoShiRo256StarStarRandomGenerator.java    |  4 +-
 .../dsi/util/XorShift1024StarPhiRandom.java   |  3 +-
 .../XorShift1024StarPhiRandomGenerator.java   |  3 +-
 .../dsi/util/XorShift1024StarRandom.java      |  4 +-
 .../util/XorShift1024StarRandomGenerator.java |  4 +-
 .../unimi/dsi/util/XorShift128PlusRandom.java |  3 +-
 .../util/XorShift128PlusRandomGenerator.java  |  4 +-
 .../unimi/dsi/util/XorShift64StarRandom.java  | 10 +--
 .../util/XorShift64StarRandomGenerator.java   |  9 ++-
 .../concurrent/ReorderingBlockingQueue.java   |  4 +-
 test/it/unimi/dsi/UtilTest.java               |  3 +-
 .../big/util/FrontCodedStringBigListTest.java |  4 +-
 .../dsi/big/util/ImmutableBinaryTrieTest.java | 11 ++--
 .../util/ImmutableExternalPrefixMapTest.java  | 53 +++++++--------
 .../util/LiterallySignedStringMapTest.java    | 42 ++++++------
 .../util/LongBigArraySignedStringMapTest.java | 29 ++++----
 .../util/SemiExternalGammaBigListTest.java    | 35 +++++-----
 .../util/ShiftAddXorSignedStringMapTest.java  | 33 +++++-----
 .../util/TernaryIntervalSearchTreeTest.java   |  4 +-
 .../unimi/dsi/bits/AbstractBitVectorTest.java | 24 +++----
 test/it/unimi/dsi/bits/BitVectorTestCase.java | 46 ++++++-------
 test/it/unimi/dsi/bits/BitVectorsTest.java    | 21 +++---
 .../dsi/bits/BooleanListBitVectorTest.java    | 10 +--
 .../ByteArrayTransformationStrategyTest.java  |  4 +-
 test/it/unimi/dsi/bits/FastTest.java          | 17 ++---
 .../FixedLongTransformationStrategyTest.java  |  6 +-
 .../bits/IsoTransformationStrategyTest.java   |  7 +-
 .../dsi/bits/LongArrayBitVectorTest.java      |  4 +-
 .../dsi/bits/LongBigArrayBitVectorTest.java   |  4 +-
 .../PrefixFreeTransformationStrategyTest.java | 14 ++--
 ...awByteArrayTransformationStrategyTest.java |  4 +-
 ...awFixedLongTransformationStrategyTest.java |  6 +-
 .../RawISOTransformationStrategyTest.java     |  4 +-
 .../RawUtf16TransformationStrategyTest.java   |  7 +-
 .../RawUtf32TransformationStrategyTest.java   |  4 +-
 .../bits/Utf16TransformationStrategyTest.java |  7 +-
 .../bits/Utf32TransformationStrategyTest.java |  4 +-
 .../unimi/dsi/compression/CodecTestCase.java  | 40 +++++------
 .../dsi/compression/HuTuckerCodecTest.java    |  4 +-
 .../dsi/compression/HuffmanCodecTest.java     |  4 +-
 .../dsi/io/ByteBufferInputStreamTest.java     | 17 ++---
 test/it/unimi/dsi/io/ByteDiskQueueTest.java   | 35 +++++-----
 .../unimi/dsi/io/DelimitedWordReaderTest.java |  6 +-
 .../unimi/dsi/io/FastBufferedReaderTest.java  | 34 +++++-----
 .../io/FileLinesByteArrayCollectionTest.java  | 17 +++--
 test/it/unimi/dsi/io/InputBitStreamTest.java  |  4 +-
 test/it/unimi/dsi/io/OfflineIterableTest.java | 29 ++++----
 test/it/unimi/dsi/io/OutputBitStreamTest.java | 13 ++--
 .../dsi/io/SegmentedInputStreamTest.java      |  9 +--
 test/it/unimi/dsi/lang/EnumParserTest.java    | 14 ++--
 test/it/unimi/dsi/lang/MutableStringTest.java | 17 ++---
 test/it/unimi/dsi/lang/ObjectParserTest.java  |  4 +-
 test/it/unimi/dsi/lang/TwoStrings.java        |  8 +--
 .../it/unimi/dsi/parser/BulletParserTest.java |  4 +-
 .../BulletParserCallbackContentHandler.java   | 20 +++---
 .../parser/callback/LinkExtractorTest.java    | 15 +++--
 .../parser/callback/TextExtractorTest.java    | 13 ++--
 test/it/unimi/dsi/stat/JackknifeTest.java     |  8 +--
 test/it/unimi/dsi/stat/SummaryStatsTest.java  |  7 +-
 test/it/unimi/dsi/util/BloomFilterTest.java   | 53 +++++++--------
 .../dsi/util/ByteBufferLongBigListTest.java   | 20 ++++++
 .../dsi/util/CircularCharArrayBufferTest.java |  4 +-
 .../dsi/util/FrontCodedStringListTest.java    | 17 ++---
 .../dsi/util/HyperLogLogCounterArrayTest.java |  4 +-
 .../dsi/util/ImmutableBinaryTrieTest.java     | 12 ++--
 .../util/ImmutableExternalPrefixMapTest.java  | 50 +++++++-------
 test/it/unimi/dsi/util/IntervalTest.java      | 31 ++++-----
 .../it/unimi/dsi/util/KahanSummationTest.java |  8 +--
 test/it/unimi/dsi/util/LineIteratorTest.java  | 13 ++--
 .../util/LiterallySignedStringMapTest.java    | 25 +++----
 test/it/unimi/dsi/util/LongIntervalTest.java  | 26 ++++----
 .../dsi/util/SemiExternalGammaListTest.java   | 40 +++++------
 .../util/ShiftAddXorSignedStringMapTest.java  | 17 ++---
 .../util/SplitMix64RandomGeneratorTest.java   | 37 +++++------
 .../unimi/dsi/util/SplitMix64RandomTest.java  | 33 +++++-----
 .../util/TernaryIntervalSearchTreeTest.java   |  4 +-
 test/it/unimi/dsi/util/TextPatternTest.java   | 19 +++---
 ...RoShiRo128PlusPlusRandomGeneratorTest.java |  3 +-
 .../util/XoRoShiRo128PlusPlusRandomTest.java  |  3 +-
 .../XoRoShiRo128PlusRandomGeneratorTest.java  |  3 +-
 .../dsi/util/XoRoShiRo128PlusRandomTest.java  |  3 +-
 ...RoShiRo128StarStarRandomGeneratorTest.java |  3 +-
 .../util/XoRoShiRo128StarStarRandomTest.java  |  3 +-
 ...XoShiRo256PlusPlusRandomGeneratorTest.java |  3 +-
 .../util/XoShiRo256PlusPlusRandomTest.java    |  3 +-
 .../XoShiRo256PlusRandomGeneratorTest.java    |  3 +-
 .../dsi/util/XoShiRo256PlusRandomTest.java    |  3 +-
 ...XoShiRo256StarStarRandomGeneratorTest.java |  3 +-
 .../util/XoShiRo256StarStarRandomTest.java    |  3 +-
 ...orShift1024StarPhiRandomGeneratorTest.java |  3 +-
 .../util/XorShift1024StarPhiRandomTest.java   |  3 +-
 .../XorShift1024StarRandomGeneratorTest.java  | 39 ++++++-----
 .../dsi/util/XorShift1024StarRandomTest.java  | 35 +++++-----
 .../XorShift128PlusRandomGeneratorTest.java   | 37 +++++------
 .../dsi/util/XorShift128PlusRandomTest.java   |  3 +-
 .../XorShift64StarRandomGeneratorTest.java    | 37 +++++------
 .../dsi/util/XorShift64StarRandomTest.java    | 33 +++++-----
 .../ReorderingBlockingQueueTest.java          |  4 +-
 216 files changed, 1563 insertions(+), 1528 deletions(-)

diff --git a/CHANGES b/CHANGES
index ad4b214..919d599 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+2.6.9
+
+- Added automatic module name.
+
 2.6.8
 
 - Fixed missing data files from tests (thanks to Pierre Gruet for
diff --git a/build.properties b/build.properties
index 3eb175d..8fca93a 100644
--- a/build.properties
+++ b/build.properties
@@ -1,4 +1,4 @@
-version=2.6.8
+version=2.6.9
 
 build.sysclasspath=ignore
 
diff --git a/build.xml b/build.xml
index 0278d49..01deac4 100644
--- a/build.xml
+++ b/build.xml
@@ -157,6 +157,9 @@
 			<fileset dir="${src}" includes="**/*.8"/>
 			<fileset dir="${src}" includes="**/*.16"/>
 			<fileset dir="${src}" includes="**/*.12"/>
+			<manifest>
+				<attribute name="Automatic-Module-Name" value="it.unimi.dsi.dsiutils"/>
+			</manifest>
 		</jar>
 	</target>
 
diff --git a/slow/it/unimi/dsi/big/util/ImmutableExternalPrefixMapSlowTest.java b/slow/it/unimi/dsi/big/util/ImmutableExternalPrefixMapSlowTest.java
index 481bc98..3930db6 100644
--- a/slow/it/unimi/dsi/big/util/ImmutableExternalPrefixMapSlowTest.java
+++ b/slow/it/unimi/dsi/big/util/ImmutableExternalPrefixMapSlowTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,10 +18,10 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.objects.ObjectIterator;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -31,10 +29,12 @@ import java.util.NoSuchElementException;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.objects.ObjectIterator;
+
 public class ImmutableExternalPrefixMapSlowTest {
 
 	public void testBig(final int blockSize) throws IOException {
-		Iterable<String> p = new Iterable<String>() {
+		final Iterable<String> p = new Iterable<String>() {
 			private final static long INCREMENT= ((1L << 62) / 3000000000L);
 			@Override
 			public Iterator<String> iterator() {
@@ -49,7 +49,7 @@ public class ImmutableExternalPrefixMapSlowTest {
 					public String next() {
 						if (! hasNext()) throw new NoSuchElementException();
 						final long v = curr++ * INCREMENT ;
-						char[] a = new char[4];
+						final char[] a = new char[4];
 						a[0] = (char)(v >>> 48);
 						a[1] = (char)(v >>> 32);
 						a[2] = (char)(v >>> 16);
@@ -60,11 +60,10 @@ public class ImmutableExternalPrefixMapSlowTest {
 			}
 		};
 
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(p, blockSize);
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(p, blockSize);
 
 		int j = 0;
-		for(Iterator<String> i = p.iterator(); i.hasNext();) {
-			String s = i.next();
+		for (final String s : p) {
 			assertTrue(s, d.containsKey(s));
 			assertEquals(s, d.list().get(j++).toString());
 		}
diff --git a/src/it/unimi/dsi/Util.java b/src/it/unimi/dsi/Util.java
index 0e95695..b5354eb 100644
--- a/src/it/unimi/dsi/Util.java
+++ b/src/it/unimi/dsi/Util.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi;
  *
  */
 
+package it.unimi.dsi;
+
 import static it.unimi.dsi.fastutil.BigArrays.get;
 import static it.unimi.dsi.fastutil.BigArrays.length;
 import static it.unimi.dsi.fastutil.BigArrays.set;
diff --git a/src/it/unimi/dsi/big/io/FileLinesByteArrayCollection.java b/src/it/unimi/dsi/big/io/FileLinesByteArrayCollection.java
index 82d2fe9..dbc8d71 100644
--- a/src/it/unimi/dsi/big/io/FileLinesByteArrayCollection.java
+++ b/src/it/unimi/dsi/big/io/FileLinesByteArrayCollection.java
@@ -1,15 +1,3 @@
-package it.unimi.dsi.big.io;
-
-import java.io.Closeable;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.AbstractCollection;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.zip.GZIPInputStream;
-
 /*
  * DSI utilities
  *
@@ -30,6 +18,18 @@ import java.util.zip.GZIPInputStream;
  *
  */
 
+package it.unimi.dsi.big.io;
+
+import java.io.Closeable;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.AbstractCollection;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.zip.GZIPInputStream;
+
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.bytes.ByteArrays;
 import it.unimi.dsi.fastutil.io.FastBufferedInputStream;
diff --git a/src/it/unimi/dsi/big/io/FileLinesCollection.java b/src/it/unimi/dsi/big/io/FileLinesCollection.java
index ca136c9..231934e 100644
--- a/src/it/unimi/dsi/big/io/FileLinesCollection.java
+++ b/src/it/unimi/dsi/big/io/FileLinesCollection.java
@@ -1,15 +1,3 @@
-package it.unimi.dsi.big.io;
-
-import java.io.Closeable;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.AbstractCollection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.zip.GZIPInputStream;
-
 /*
  * DSI utilities
  *
@@ -30,6 +18,18 @@ import java.util.zip.GZIPInputStream;
  *
  */
 
+package it.unimi.dsi.big.io;
+
+import java.io.Closeable;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.AbstractCollection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.zip.GZIPInputStream;
+
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.objects.ObjectBigArrayBigList;
 import it.unimi.dsi.fastutil.objects.ObjectBigList;
diff --git a/src/it/unimi/dsi/big/util/AbstractPrefixMap.java b/src/it/unimi/dsi/big/util/AbstractPrefixMap.java
index 728ef70..ff44ce7 100644
--- a/src/it/unimi/dsi/big/util/AbstractPrefixMap.java
+++ b/src/it/unimi/dsi/big/util/AbstractPrefixMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,10 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.Serializable;
+
 import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
 import it.unimi.dsi.fastutil.objects.AbstractObject2ObjectFunction;
 import it.unimi.dsi.fastutil.objects.AbstractObjectBigList;
@@ -29,8 +31,6 @@ import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.util.LongInterval;
 import it.unimi.dsi.util.LongIntervals;
 
-import java.io.Serializable;
-
 /** An abstract implementation of a prefix map.
  *
  * <p>This class provides the full services of a {@link PrefixMap} by implementing just
@@ -107,7 +107,7 @@ public abstract class AbstractPrefixMap extends AbstractObject2LongFunction<Char
 
 			@Override
 			public boolean containsKey(final Object o) {
-				LongInterval interval = (LongInterval)o;
+				final LongInterval interval = (LongInterval)o;
 				return interval != LongIntervals.EMPTY_INTERVAL && interval.left >= 0 && interval.right < AbstractPrefixMap.this.size64();
 			}
 
@@ -128,7 +128,7 @@ public abstract class AbstractPrefixMap extends AbstractObject2LongFunction<Char
 				return AbstractPrefixMap.this.size64();
 			}
 			@Override
-			public MutableString get(long index) {
+			public MutableString get(final long index) {
 				return getTerm(index, new MutableString());
 			}
 		};
diff --git a/src/it/unimi/dsi/big/util/FrontCodedStringBigList.java b/src/it/unimi/dsi/big/util/FrontCodedStringBigList.java
index 42be201..7954316 100644
--- a/src/it/unimi/dsi/big/util/FrontCodedStringBigList.java
+++ b/src/it/unimi/dsi/big/util/FrontCodedStringBigList.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Serializable;
diff --git a/src/it/unimi/dsi/big/util/ImmutableBinaryTrie.java b/src/it/unimi/dsi/big/util/ImmutableBinaryTrie.java
index 98ab5ca..9ab7d6f 100644
--- a/src/it/unimi/dsi/big/util/ImmutableBinaryTrie.java
+++ b/src/it/unimi/dsi/big/util/ImmutableBinaryTrie.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,12 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.ListIterator;
+
 import it.unimi.dsi.bits.BitVector;
 import it.unimi.dsi.bits.LongArrayBitVector;
 import it.unimi.dsi.bits.TransformationStrategy;
@@ -31,10 +35,6 @@ import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.util.LongInterval;
 import it.unimi.dsi.util.LongIntervals;
 
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.ListIterator;
-
 /** An immutable implementation of binary tries.
  *
  * <P>Instance of this class are built starting from a lexicographically ordered
@@ -165,14 +165,15 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 
 		if (elements.size() == 0) return null;
 
-		BitVector first = elements.get(0), curr;
+		final BitVector first = elements.get(0);
+		BitVector curr;
 		int prefix = (int) first.size64(), change = -1, j;
 
 		// We rule out the case of a single word (it would work anyway, but it's faster)
 		if (elements.size() == 1) return new Node(pos < prefix ? LongArrayBitVector.copy(first.subVector(pos, prefix)) : null, size++);
 
 		// 	Find maximum common prefix. change records the point of change (for splitting the word set).
-		for(ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
+		for(final ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
 			curr = i.next();
 
 			if (curr.size64() < prefix) prefix = (int) curr.size64();
@@ -189,7 +190,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 			// and explicitly search for the actual change point, which is the first
 			// word with prefix-th bit true.
 			change = 1;
-			for(ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
+			for(final ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
 				curr = i.next();
 				if (curr.getBoolean(prefix)) break;
 				change++;
@@ -231,7 +232,8 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 
 			path = n.path;
 			if (path != null) {
-				int minLength = Math.min(length - pos, n.pathLength), i;
+				final int minLength = Math.min(length - pos, n.pathLength);
+				int i;
 				for(i = 0; i < minLength; i++) if (word.getBoolean(pos + i) != get(path, i)) break;
 				// Incompatible with current path.
 				if (i < minLength) return -1;
@@ -318,7 +320,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 			path = n.path;
 
 			if (path != null) {
-				int maxLength = Math.min(length - pos, n.pathLength);
+				final int maxLength = Math.min(length - pos, n.pathLength);
 				int i;
 				for(i = 0; i < maxLength; i++) if (word.getBoolean(pos + i) != get(path, i)) break;
 				// Incompatible with current path--we return the empty interval.
@@ -436,7 +438,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 			}
 
 			if (path != null) {
-				int maxLength = Math.min(length - pos, n.pathLength);
+				final int maxLength = Math.min(length - pos, n.pathLength);
 				int i;
 				for(i = 0; i < maxLength; i++) if (mismatch = (word.getBoolean(pos + i) != get(path, i))) break;
 
@@ -635,7 +637,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 
 	@Override
 	public String toString() {
-		MutableString s = new MutableString();
+		final MutableString s = new MutableString();
 		recToString(root, new MutableString(), s, new MutableString(), 0);
 		return s.toString();
 	}
diff --git a/src/it/unimi/dsi/big/util/ImmutableExternalPrefixMap.java b/src/it/unimi/dsi/big/util/ImmutableExternalPrefixMap.java
index 3dce318..b40ffe3 100644
--- a/src/it/unimi/dsi/big/util/ImmutableExternalPrefixMap.java
+++ b/src/it/unimi/dsi/big/util/ImmutableExternalPrefixMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -216,8 +216,8 @@ public class ImmutableExternalPrefixMap extends AbstractPrefixMap implements Ser
 		final ObjectArrayList<MutableString> delimiters = new ObjectArrayList<>();
 		prevTerm.length(0);
 
-		for(final Iterator<?> i = terms.iterator(); i.hasNext();) {
-			s = (CharSequence) i.next();
+		for (final Object term : terms) {
+			s = (CharSequence) term;
 			length = s.length();
 
 			isDelimiter = false;
diff --git a/src/it/unimi/dsi/big/util/LiterallySignedStringMap.java b/src/it/unimi/dsi/big/util/LiterallySignedStringMap.java
index 8bf0fd6..d3c39e2 100644
--- a/src/it/unimi/dsi/big/util/LiterallySignedStringMap.java
+++ b/src/it/unimi/dsi/big/util/LiterallySignedStringMap.java
@@ -1,22 +1,3 @@
-package it.unimi.dsi.big.util;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.nio.charset.Charset;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.martiansoftware.jsap.FlaggedOption;
-import com.martiansoftware.jsap.JSAP;
-import com.martiansoftware.jsap.JSAPException;
-import com.martiansoftware.jsap.JSAPResult;
-import com.martiansoftware.jsap.Parameter;
-import com.martiansoftware.jsap.SimpleJSAP;
-import com.martiansoftware.jsap.Switch;
-import com.martiansoftware.jsap.UnflaggedOption;
-import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
-
 /*
  * DSI utilities
  *
@@ -37,6 +18,24 @@ import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.nio.charset.Charset;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.martiansoftware.jsap.FlaggedOption;
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+import com.martiansoftware.jsap.JSAPResult;
+import com.martiansoftware.jsap.Parameter;
+import com.martiansoftware.jsap.SimpleJSAP;
+import com.martiansoftware.jsap.Switch;
+import com.martiansoftware.jsap.UnflaggedOption;
+import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
 import it.unimi.dsi.big.io.FileLinesCollection;
 import it.unimi.dsi.fastutil.Size64;
diff --git a/src/it/unimi/dsi/big/util/LongBigListSignedStringMap.java b/src/it/unimi/dsi/big/util/LongBigListSignedStringMap.java
index 2dbfa73..511b9c3 100644
--- a/src/it/unimi/dsi/big/util/LongBigListSignedStringMap.java
+++ b/src/it/unimi/dsi/big/util/LongBigListSignedStringMap.java
@@ -1,3 +1,23 @@
+/*
+ * DSI utilities
+ *
+ * Copyright (C) 2013-2020 Sebastiano Vigna
+ *
+ *  This library is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU Lesser General Public License as published by the Free
+ *  Software Foundation; either version 3 of the License, or (at your option)
+ *  any later version.
+ *
+ *  This library is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 package it.unimi.dsi.big.util;
 
 import java.io.DataOutput;
@@ -27,27 +47,6 @@ import com.martiansoftware.jsap.Switch;
 import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
-/*
- * DSI utilities
- *
- * Copyright (C) 2013-2020 Sebastiano Vigna
- *
- *  This library is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU Lesser General Public License as published by the Free
- *  Software Foundation; either version 3 of the License, or (at your option)
- *  any later version.
- *
- *  This library is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
 import it.unimi.dsi.fastutil.Function;
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.io.BinIO;
diff --git a/src/it/unimi/dsi/big/util/PermutedFrontCodedStringBigList.java b/src/it/unimi/dsi/big/util/PermutedFrontCodedStringBigList.java
index e3bfc08..26eba8a 100644
--- a/src/it/unimi/dsi/big/util/PermutedFrontCodedStringBigList.java
+++ b/src/it/unimi/dsi/big/util/PermutedFrontCodedStringBigList.java
@@ -1,16 +1,3 @@
-package it.unimi.dsi.big.util;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-import com.martiansoftware.jsap.JSAP;
-import com.martiansoftware.jsap.JSAPException;
-import com.martiansoftware.jsap.JSAPResult;
-import com.martiansoftware.jsap.Parameter;
-import com.martiansoftware.jsap.SimpleJSAP;
-import com.martiansoftware.jsap.Switch;
-import com.martiansoftware.jsap.UnflaggedOption;
-
 /*
  * DSI utilities
  *
@@ -31,6 +18,19 @@ import com.martiansoftware.jsap.UnflaggedOption;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+import com.martiansoftware.jsap.JSAPResult;
+import com.martiansoftware.jsap.Parameter;
+import com.martiansoftware.jsap.SimpleJSAP;
+import com.martiansoftware.jsap.Switch;
+import com.martiansoftware.jsap.UnflaggedOption;
+
 import it.unimi.dsi.Util;
 import it.unimi.dsi.fastutil.BigArrays;
 import it.unimi.dsi.fastutil.io.BinIO;
diff --git a/src/it/unimi/dsi/big/util/PrefixMap.java b/src/it/unimi/dsi/big/util/PrefixMap.java
index 02065b5..22e533f 100644
--- a/src/it/unimi/dsi/big/util/PrefixMap.java
+++ b/src/it/unimi/dsi/big/util/PrefixMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.objects.Object2ObjectFunction;
 import it.unimi.dsi.util.LongInterval;
diff --git a/src/it/unimi/dsi/big/util/SemiExternalGammaBigList.java b/src/it/unimi/dsi/big/util/SemiExternalGammaBigList.java
index 4fee0c2..014512f 100644
--- a/src/it/unimi/dsi/big/util/SemiExternalGammaBigList.java
+++ b/src/it/unimi/dsi/big/util/SemiExternalGammaBigList.java
@@ -1,9 +1,7 @@
-package it.unimi.dsi.big.util;
-
-/*		 
+/*
  * DSI utilities
  *
- * Copyright (C) 2007-2020 Sebastiano Vigna 
+ * Copyright (C) 2007-2020 Sebastiano Vigna
  *
  *  This library is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU Lesser General Public License as published by the Free
@@ -20,20 +18,22 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.EOFException;
+import java.io.IOException;
+
 import it.unimi.dsi.fastutil.longs.AbstractLongBigList;
 import it.unimi.dsi.fastutil.longs.LongBigList;
 import it.unimi.dsi.io.InputBitStream;
 import it.unimi.dsi.io.OutputBitStream;
 
-import java.io.EOFException;
-import java.io.IOException;
-
-/** Provides semi-external random access to a {@linkplain LongBigList big list} 
- * of {@linkplain OutputBitStream#writeGamma(int) &gamma;-encoded} integers. 
- * 
+/** Provides semi-external random access to a {@linkplain LongBigList big list}
+ * of {@linkplain OutputBitStream#writeGamma(int) &gamma;-encoded} integers.
+ *
  * <p>This class is a semi-external {@link it.unimi.dsi.fastutil.longs.LongBigList} that
  * MG4J uses to access files containing frequencies.
- *  
+ *
  * <p>Instead, this class accesses frequencies in their
  * compressed forms, and provides entry points for random access to each long. At construction
  * time, entry points are computed with a certain <em>step</em>, which is the number of longs
@@ -41,7 +41,7 @@ import java.io.IOException;
  * be necessary to read to access a given long.
  *
  * <p><strong>Warning:</strong> This class is not thread safe, and needs to be synchronised to be used in a
- * multithreaded environment. 
+ * multithreaded environment.
  *
  * @author Fabien Campagne
  * @author Sebastiano Vigna
@@ -49,7 +49,7 @@ import java.io.IOException;
  */
 public class SemiExternalGammaBigList extends AbstractLongBigList {
 	public final static int DEFAULT_STEP = 128;
-	
+
 	/** Position in the offset stream for each random access entry point (one each {@link #step} elements). */
 	private final long[] position;
 	/** Stream over the compressed offset information. */
@@ -60,7 +60,7 @@ public class SemiExternalGammaBigList extends AbstractLongBigList {
 	private final long numLongs;
 
 	/** Creates a new semi-external list.
-	 * 
+	 *
 	 * @param longs a bit stream containing &gamma;-encoded longs.
 	 * @param step the step used to build random-access entry points, or -1 to get {@link #DEFAULT_STEP}; note that
 	 * a step causing more than 2<sup>31</sup> slots will be silently increased.
@@ -70,7 +70,7 @@ public class SemiExternalGammaBigList extends AbstractLongBigList {
 	public SemiExternalGammaBigList(final InputBitStream longs, final int step, final long numLongs) throws IOException {
 		// We guarantee that the default step is such that we cannot cause problems.
 		this.step = Math.max(step == -1 ? DEFAULT_STEP : step, (int)(numLongs / (1L << 31)));
-		int slots = (int)((numLongs + this.step - 1) / this.step);
+		final int slots = (int)((numLongs + this.step - 1) / this.step);
 		this.position = new long[slots];
 		this.numLongs = numLongs;
 		this.ibs = longs;
@@ -83,19 +83,19 @@ public class SemiExternalGammaBigList extends AbstractLongBigList {
 		}
 	}
 
-	
+
 	/** Creates a new semi-external list.
-	 * 
+	 *
 	 * <p>This quick-and-dirty constructor estimates the number of longs by checking
 	 * for an {@link EOFException}.
-	 * 
+	 *
 	 * @param longs a bit stream containing &gamma;-encoded longs.
 	 */
-	
+
 	public SemiExternalGammaBigList(final InputBitStream longs) throws IOException {
 		this(longs, DEFAULT_STEP, estimateNumberOfLongs(longs));
 	}
-		
+
 	private static int estimateNumberOfLongs(final InputBitStream longs) {
 		int numLongs = 0;
 		try {
@@ -105,14 +105,14 @@ public class SemiExternalGammaBigList extends AbstractLongBigList {
 				numLongs++;
 			}
 		}
-		catch(EOFException e) {
+		catch(final EOFException e) {
 			return numLongs;
 		}
-		catch (IOException e) {
+		catch (final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	@Override
 	public final long getLong(final long index) {
 		if (index < 0 || index >= numLongs) throw new IndexOutOfBoundsException(Long.toString(index));
@@ -123,11 +123,11 @@ public class SemiExternalGammaBigList extends AbstractLongBigList {
 			ibs.skipGammas(k);
 			return ibs.readLongGamma();
 		}
-		catch(IOException e) {
+		catch(final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	@Override
 	public long size64() {
 		return numLongs;
diff --git a/src/it/unimi/dsi/big/util/ShiftAddXorSignedStringMap.java b/src/it/unimi/dsi/big/util/ShiftAddXorSignedStringMap.java
index 75537c3..dc07db8 100644
--- a/src/it/unimi/dsi/big/util/ShiftAddXorSignedStringMap.java
+++ b/src/it/unimi/dsi/big/util/ShiftAddXorSignedStringMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,18 +18,7 @@ package it.unimi.dsi.big.util;
  *
  */
 
-
-import it.unimi.dsi.bits.LongArrayBitVector;
-import it.unimi.dsi.fastutil.Function;
-import it.unimi.dsi.fastutil.Size64;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.fastutil.longs.LongBigList;
-import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
-import it.unimi.dsi.fastutil.objects.Object2LongFunction;
-import it.unimi.dsi.fastutil.objects.ObjectBigList;
-import it.unimi.dsi.io.FastBufferedReader;
-import it.unimi.dsi.io.LineIterator;
-import it.unimi.dsi.lang.MutableString;
+package it.unimi.dsi.big.util;
 
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -55,6 +42,18 @@ import com.martiansoftware.jsap.Switch;
 import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
+import it.unimi.dsi.bits.LongArrayBitVector;
+import it.unimi.dsi.fastutil.Function;
+import it.unimi.dsi.fastutil.Size64;
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.fastutil.longs.LongBigList;
+import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
+import it.unimi.dsi.fastutil.objects.Object2LongFunction;
+import it.unimi.dsi.fastutil.objects.ObjectBigList;
+import it.unimi.dsi.io.FastBufferedReader;
+import it.unimi.dsi.io.LineIterator;
+import it.unimi.dsi.lang.MutableString;
+
 /** A string map based on a function signed using Shift-Add-Xor hashes.
  *
  * <p>A minimal perfect hash function maps a set of string to an initial segment of the natural
@@ -137,21 +136,21 @@ public class ShiftAddXorSignedStringMap extends AbstractObject2LongFunction<Char
 	}
 
 	@Override
-	public long getLong(Object o) {
+	public long getLong(final Object o) {
 		final CharSequence s = (CharSequence)o;
 		final long index = function.getLong(s);
 		return checkSignature(s, index) ? index : defRetValue;
 	}
 
 	@Override
-	public Long get(Object o) {
+	public Long get(final Object o) {
 		final CharSequence s = (CharSequence)o;
 		final long index = function.getLong(s);
 		return checkSignature(s, index) ? Long.valueOf(index) : null;
 	}
 
 	@Override
-	public boolean containsKey(Object o) {
+	public boolean containsKey(final Object o) {
 		final CharSequence s = (CharSequence)o;
 		return checkSignature(s, function.getLong(s));
 	}
@@ -186,7 +185,7 @@ public class ShiftAddXorSignedStringMap extends AbstractObject2LongFunction<Char
 			new UnflaggedOption("stringFile", JSAP.STRING_PARSER, JSAP.NO_DEFAULT, JSAP.NOT_REQUIRED, JSAP.NOT_GREEDY, "Read strings from this file instead of standard input."),
 		});
 
-		JSAPResult jsapResult = jsap.parse(arg);
+		final JSAPResult jsapResult = jsap.parse(arg);
 		if (jsap.messagePrinted()) return;
 
 		final int bufferSize = jsapResult.getInt("bufferSize");
diff --git a/src/it/unimi/dsi/big/util/StringMap.java b/src/it/unimi/dsi/big/util/StringMap.java
index 157d526..27195a6 100644
--- a/src/it/unimi/dsi/big/util/StringMap.java
+++ b/src/it/unimi/dsi/big/util/StringMap.java
@@ -1,7 +1,3 @@
-package it.unimi.dsi.big.util;
-
-import java.io.Serializable;
-
 /*
  * DSI utilities
  *
@@ -22,6 +18,9 @@ import java.io.Serializable;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.Serializable;
 
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.objects.Object2LongFunction;
diff --git a/src/it/unimi/dsi/big/util/StringMaps.java b/src/it/unimi/dsi/big/util/StringMaps.java
index d8b16f1..bc141fd 100644
--- a/src/it/unimi/dsi/big/util/StringMaps.java
+++ b/src/it/unimi/dsi/big/util/StringMaps.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,9 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
+import java.io.Serializable;
 
 import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
 import it.unimi.dsi.fastutil.objects.AbstractObject2ObjectFunction;
@@ -30,8 +31,6 @@ import it.unimi.dsi.fastutil.objects.ObjectBigLists;
 import it.unimi.dsi.util.Interval;
 import it.unimi.dsi.util.LongInterval;
 
-import java.io.Serializable;
-
 /** A class providing static methods and objects that do useful things with {@linkplain StringMap string maps}
  * and {@linkplain PrefixMap prefix maps}.
  *
@@ -68,35 +67,35 @@ public class StringMaps {
 		}
 
 		@Override
-		public synchronized long getLong(Object s) {
+		public synchronized long getLong(final Object s) {
 			return stringMap.getLong(s);
 		}
 
 		@Override
 		@SuppressWarnings("deprecation")
-		public synchronized Long get(Object key) {
+		public synchronized Long get(final Object key) {
 			return stringMap.get(key);
 		}
 
 		@Override
-		public synchronized long put(CharSequence key, long value) {
+		public synchronized long put(final CharSequence key, final long value) {
 			return stringMap.put(key, value);
 		}
 
 		@Override
 		@SuppressWarnings("deprecation")
-		public synchronized Long put(CharSequence key, Long value) {
+		public synchronized Long put(final CharSequence key, final Long value) {
 			return stringMap.put(key, value);
 		}
 
 		@Override
 		@SuppressWarnings("deprecation")
-		public synchronized Long remove(Object key) {
+		public synchronized Long remove(final Object key) {
 			return stringMap.remove(key);
 		}
 
 		@Override
-		public synchronized long removeLong(Object key) {
+		public synchronized long removeLong(final Object key) {
 			return stringMap.removeLong(key);
 		}
 
@@ -106,7 +105,7 @@ public class StringMaps {
 		}
 
 		@Override
-		public synchronized boolean containsKey(Object key) {
+		public synchronized boolean containsKey(final Object key) {
 			return stringMap.containsKey(key);
 		}
 
@@ -116,7 +115,7 @@ public class StringMaps {
 		}
 
 		@Override
-		public synchronized void defaultReturnValue(long rv) {
+		public synchronized void defaultReturnValue(final long rv) {
 			stringMap.defaultReturnValue(rv);
 		}
 	}
diff --git a/src/it/unimi/dsi/big/util/TernaryIntervalSearchTree.java b/src/it/unimi/dsi/big/util/TernaryIntervalSearchTree.java
index 58d6aa9..8dbfd42 100644
--- a/src/it/unimi/dsi/big/util/TernaryIntervalSearchTree.java
+++ b/src/it/unimi/dsi/big/util/TernaryIntervalSearchTree.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,7 @@ package it.unimi.dsi.big.util;
  *
  */
 
-
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.io.FastBufferedReader;
-import it.unimi.dsi.lang.MutableString;
-import it.unimi.dsi.logging.ProgressLogger;
-import it.unimi.dsi.util.LongInterval;
-import it.unimi.dsi.util.LongIntervals;
+package it.unimi.dsi.big.util;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -44,6 +36,13 @@ import com.martiansoftware.jsap.SimpleJSAP;
 import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.io.FastBufferedReader;
+import it.unimi.dsi.lang.MutableString;
+import it.unimi.dsi.logging.ProgressLogger;
+import it.unimi.dsi.util.LongInterval;
+import it.unimi.dsi.util.LongIntervals;
+
 /** Ternary interval search trees.
  *
  * <p><em>Ternary search trees</em> are a data structure used to store words over an alphabet; they are
@@ -308,7 +307,7 @@ public class TernaryIntervalSearchTree extends AbstractPrefixMap implements Seri
 	}
 
 	@Override
-	public boolean containsKey(Object o) {
+	public boolean containsKey(final Object o) {
 		return getIndex((CharSequence)o) != -1;
 	}
 
@@ -455,12 +454,12 @@ public class TernaryIntervalSearchTree extends AbstractPrefixMap implements Seri
 				new UnflaggedOption("tree", JSAP.STRING_PARSER, JSAP.NO_DEFAULT, JSAP.REQUIRED, JSAP.NOT_GREEDY, "The filename for the serialised tree.")
 		});
 
-		JSAPResult jsapResult = jsap.parse(arg);
+		final JSAPResult jsapResult = jsap.parse(arg);
 		if (jsap.messagePrinted()) return;
 
 		final TernaryIntervalSearchTree tree = new TernaryIntervalSearchTree();
 
-		MutableString term = new MutableString();
+		final MutableString term = new MutableString();
 		final ProgressLogger pl = new ProgressLogger();
 		pl.itemsName = "terms";
 		@SuppressWarnings("resource")
diff --git a/src/it/unimi/dsi/bits/AbstractBitVector.java b/src/it/unimi/dsi/bits/AbstractBitVector.java
index 4b1c546..ca05909 100644
--- a/src/it/unimi/dsi/bits/AbstractBitVector.java
+++ b/src/it/unimi/dsi/bits/AbstractBitVector.java
@@ -1,8 +1,3 @@
-package it.unimi.dsi.bits;
-
-import java.io.Serializable;
-import java.util.NoSuchElementException;
-
 /*
  * DSI utilities
  *
@@ -23,6 +18,11 @@ import java.util.NoSuchElementException;
  *
  */
 
+package it.unimi.dsi.bits;
+
+import java.io.Serializable;
+import java.util.NoSuchElementException;
+
 import it.unimi.dsi.fastutil.BigList;
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.booleans.AbstractBooleanBigList;
diff --git a/src/it/unimi/dsi/bits/BitVector.java b/src/it/unimi/dsi/bits/BitVector.java
index 5023457..29c3bef 100644
--- a/src/it/unimi/dsi/bits/BitVector.java
+++ b/src/it/unimi/dsi/bits/BitVector.java
@@ -1,8 +1,3 @@
-package it.unimi.dsi.bits;
-
-import java.util.List;
-import java.util.RandomAccess;
-
 /*
  * DSI utilities
  *
@@ -23,6 +18,11 @@ import java.util.RandomAccess;
  *
  */
 
+package it.unimi.dsi.bits;
+
+import java.util.List;
+import java.util.RandomAccess;
+
 import it.unimi.dsi.fastutil.booleans.BooleanBigList;
 import it.unimi.dsi.fastutil.booleans.BooleanList;
 import it.unimi.dsi.fastutil.longs.LongBigList;
diff --git a/src/it/unimi/dsi/bits/BitVectors.java b/src/it/unimi/dsi/bits/BitVectors.java
index 5ec71ee..9957630 100644
--- a/src/it/unimi/dsi/bits/BitVectors.java
+++ b/src/it/unimi/dsi/bits/BitVectors.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,7 +18,7 @@ package it.unimi.dsi.bits;
  *
  */
 
-import it.unimi.dsi.io.OfflineIterable;
+package it.unimi.dsi.bits;
 
 import java.io.DataInput;
 import java.io.DataInputStream;
@@ -28,6 +26,8 @@ import java.io.DataOutput;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
+import it.unimi.dsi.io.OfflineIterable;
+
 
 /** A class providing static methods and objects that do useful things with bit vectors.
  *
@@ -159,7 +159,7 @@ public class BitVectors {
 	 * @see #writeFast(BitVector, DataOutput)
 	 * @see #readFast(DataInput)
 	 */
-	public static LongArrayBitVector readFast(DataInput dis, final LongArrayBitVector bv) throws IOException {
+	public static LongArrayBitVector readFast(final DataInput dis, final LongArrayBitVector bv) throws IOException {
 		final long length = dis.readLong();
 		bv.ensureCapacity(length);
 		final int l = LongArrayBitVector.numWords(length);
@@ -170,12 +170,12 @@ public class BitVectors {
 
 	private static class BitVectorOfflineSerializer implements OfflineIterable.Serializer<BitVector,LongArrayBitVector> {
 		@Override
-		public void write(BitVector bv, DataOutput dos) throws IOException {
+		public void write(final BitVector bv, final DataOutput dos) throws IOException {
 			writeFast(bv, dos);
 		}
 
 		@Override
-		public void read(DataInput dis, LongArrayBitVector bv) throws IOException {
+		public void read(final DataInput dis, final LongArrayBitVector bv) throws IOException {
 			readFast(dis, bv);
 		}
 	}
diff --git a/src/it/unimi/dsi/bits/BooleanListBitVector.java b/src/it/unimi/dsi/bits/BooleanListBitVector.java
index 688dba4..faee1c4 100644
--- a/src/it/unimi/dsi/bits/BooleanListBitVector.java
+++ b/src/it/unimi/dsi/bits/BooleanListBitVector.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,15 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
+import java.io.Serializable;
+
 import it.unimi.dsi.fastutil.booleans.BooleanBigArrayBigList;
 import it.unimi.dsi.fastutil.booleans.BooleanBigList;
 import it.unimi.dsi.fastutil.booleans.BooleanBigLists;
 import it.unimi.dsi.fastutil.booleans.BooleanList;
 
-import java.io.Serializable;
-
 /** A boolean-list based implementation of {@link BitVector}.
  *
  * <P>This implementation of a bit vector is based on a backing
@@ -56,7 +56,7 @@ public class BooleanListBitVector extends AbstractBitVector implements Serializa
 	/** Creates a new bit vector with given bits. */
 	public static BooleanListBitVector of(final int... bit) {
 		final BooleanListBitVector bitVector = BooleanListBitVector.getInstance(bit.length);
-		for(int b : bit) bitVector.add(b);
+		for(final int b : bit) bitVector.add(b);
 		return bitVector;
 	}
 
diff --git a/src/it/unimi/dsi/bits/Fast.java b/src/it/unimi/dsi/bits/Fast.java
index 120370b..cbfa9b2 100644
--- a/src/it/unimi/dsi/bits/Fast.java
+++ b/src/it/unimi/dsi/bits/Fast.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
 
 /** All-purpose optimised bit-fiddling static-method container class.
  *
diff --git a/src/it/unimi/dsi/bits/HuTuckerTransformationStrategy.java b/src/it/unimi/dsi/bits/HuTuckerTransformationStrategy.java
index ef79712..e8afc92 100644
--- a/src/it/unimi/dsi/bits/HuTuckerTransformationStrategy.java
+++ b/src/it/unimi/dsi/bits/HuTuckerTransformationStrategy.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,14 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
+import java.util.Iterator;
+
 import it.unimi.dsi.compression.HuTuckerCodec;
 import it.unimi.dsi.fastutil.chars.Char2IntMap;
 import it.unimi.dsi.fastutil.chars.Char2IntOpenHashMap;
 
-import java.util.Iterator;
-
 /** A transformation strategy mapping strings to their {@linkplain HuTuckerCodec Hu-Tucker encoding}. The
  * encoding is guaranteed to preserve lexicographical ordering.
  */
@@ -42,22 +42,22 @@ public class HuTuckerTransformationStrategy extends PrefixCoderTransformationStr
 		this(getCoder(iterable, prefixFree), prefixFree);
 	}
 
-	protected HuTuckerTransformationStrategy(PrefixCoderTransformationStrategy huTuckerTransformationStrategy) {
+	protected HuTuckerTransformationStrategy(final PrefixCoderTransformationStrategy huTuckerTransformationStrategy) {
 		super(huTuckerTransformationStrategy);
 	}
 
-	protected HuTuckerTransformationStrategy(Object[] a, boolean prefixFree) {
+	protected HuTuckerTransformationStrategy(final Object[] a, final boolean prefixFree) {
 		super((BitVector[])a[0], (Char2IntOpenHashMap)a[1], prefixFree);
 	}
 
-	private static Object[] getCoder(final Iterable<? extends CharSequence> iterable, boolean prefixFree) {
+	private static Object[] getCoder(final Iterable<? extends CharSequence> iterable, final boolean prefixFree) {
 		// First of all, we gather frequencies for all Unicode characters
-		long[] frequency = new long[Character.MAX_VALUE + 1];
+		final long[] frequency = new long[Character.MAX_VALUE + 1];
 		int maxWordLength = 0;
 		CharSequence s;
 		int n = 0;
 
-		for(Iterator<? extends CharSequence> i = iterable.iterator(); i.hasNext();) {
+		for(final Iterator<? extends CharSequence> i = iterable.iterator(); i.hasNext();) {
 			s = i.next();
 			maxWordLength = Math.max(s.length(), maxWordLength);
 			for(int j = s.length(); j-- != 0;) frequency[s.charAt(j)]++;
@@ -69,7 +69,7 @@ public class HuTuckerTransformationStrategy extends PrefixCoderTransformationStr
 		for(int i = frequency.length; i-- != 0;) if (frequency[i] != 0) count++;
 
 		/* Now we remap used characters in f, building at the same time the map from characters to symbols (except for the stop character). */
-		long[] packedFrequency = new long[count];
+		final long[] packedFrequency = new long[count];
 		final Char2IntMap char2symbol = new Char2IntOpenHashMap(count);
 
 		for(int i = frequency.length, k = count; i-- != 0;) {
diff --git a/src/it/unimi/dsi/bits/LongArrayBitVector.java b/src/it/unimi/dsi/bits/LongArrayBitVector.java
index 28d5852..3a89c7d 100644
--- a/src/it/unimi/dsi/bits/LongArrayBitVector.java
+++ b/src/it/unimi/dsi/bits/LongArrayBitVector.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
diff --git a/src/it/unimi/dsi/bits/LongBigArrayBitVector.java b/src/it/unimi/dsi/bits/LongBigArrayBitVector.java
index 17aaa08..0d709e0 100644
--- a/src/it/unimi/dsi/bits/LongBigArrayBitVector.java
+++ b/src/it/unimi/dsi/bits/LongBigArrayBitVector.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static it.unimi.dsi.bits.LongArrayBitVector.bit;
 import static it.unimi.dsi.bits.LongArrayBitVector.mask;
 import static it.unimi.dsi.fastutil.BigArrays.SEGMENT_SIZE;
diff --git a/src/it/unimi/dsi/bits/PrefixCoderTransformationStrategy.java b/src/it/unimi/dsi/bits/PrefixCoderTransformationStrategy.java
index 3c000be..0c4bc74 100644
--- a/src/it/unimi/dsi/bits/PrefixCoderTransformationStrategy.java
+++ b/src/it/unimi/dsi/bits/PrefixCoderTransformationStrategy.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import it.unimi.dsi.compression.PrefixCodec;
 import it.unimi.dsi.compression.PrefixCoder;
 import it.unimi.dsi.fastutil.chars.Char2IntMap;
diff --git a/src/it/unimi/dsi/bits/TransformationStrategies.java b/src/it/unimi/dsi/bits/TransformationStrategies.java
index d7550a1..2bc650e 100644
--- a/src/it/unimi/dsi/bits/TransformationStrategies.java
+++ b/src/it/unimi/dsi/bits/TransformationStrategies.java
@@ -1,3 +1,23 @@
+/*
+ * DSI utilities
+ *
+ * Copyright (C) 2007-2020 Sebastiano Vigna
+ *
+ *  This library is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU Lesser General Public License as published by the Free
+ *  Software Foundation; either version 3 of the License, or (at your option)
+ *  any later version.
+ *
+ *  This library is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 package it.unimi.dsi.bits;
 
 import java.io.Serializable;
@@ -111,7 +131,7 @@ public class TransformationStrategies {
 			return length(cs.toString());
 		}
 
-		private long length(String s) {
+		private long length(final String s) {
 			return s.codePointCount(0, s.length()) * (long)Integer.SIZE;
 		}
 
@@ -171,7 +191,7 @@ public class TransformationStrategies {
 		 *
 		 * @param prefixFree if true, the resulting set of binary words will be made prefix free by adding a NUL at the end of the string.
 		 */
-		protected Utf32TransformationStrategy(boolean prefixFree) {
+		protected Utf32TransformationStrategy(final boolean prefixFree) {
 			this.prefixFree = prefixFree;
 		}
 
@@ -180,7 +200,7 @@ public class TransformationStrategies {
 			return length(cs.toString());
 		}
 
-		private long length(String s) {
+		private long length(final String s) {
 			return (s.codePointCount(0, s.length()) + (prefixFree ? 1 : 0)) * (long)Integer.SIZE;
 		}
 
@@ -241,7 +261,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				final int charIndex = (int)(index / Character.SIZE);
 				return (a[charIndex] & 1 << index % Character.SIZE) != 0;
@@ -291,7 +311,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				final int charIndex = (int)(index / Character.SIZE);
 				return (s.charAt(charIndex) & 1 << index % Character.SIZE) != 0;
@@ -384,7 +404,7 @@ public class TransformationStrategies {
 		 *
 		 * @param prefixFree if true, the resulting set of binary words will be made prefix free by adding a NUL at the end of the string.
 		 */
-		protected Utf16TransformationStrategy(boolean prefixFree) {
+		protected Utf16TransformationStrategy(final boolean prefixFree) {
 			this.prefixFree = prefixFree;
 		}
 
@@ -406,7 +426,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				if (index >= actualEnd) return false;
 				final int charIndex = (int)(index / Character.SIZE);
@@ -459,7 +479,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				if (index >= actualEnd) return false;
 				final int charIndex = (int)(index / Character.SIZE);
@@ -553,7 +573,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				final int byteIndex = (int)(index / Byte.SIZE);
 				return (s.charAt(byteIndex) & 1 << index % Byte.SIZE) != 0;
@@ -614,7 +634,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				final int byteIndex = (int)(index / Byte.SIZE);
 				return (a[byteIndex] & 1 << index % Byte.SIZE) != 0;
@@ -725,7 +745,7 @@ public class TransformationStrategies {
 		 *
 		 * @param prefixFree if true, the resulting set of binary words will be made prefix free by adding a NUL at the end of the string.
 		 */
-		protected ISOTransformationStrategy(boolean prefixFree) {
+		protected ISOTransformationStrategy(final boolean prefixFree) {
 			this.prefixFree = prefixFree;
 		}
 
@@ -747,7 +767,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				if (index >= actualEnd) return false;
 				final int byteIndex = (int)(index / Byte.SIZE);
@@ -811,7 +831,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index > length) throw new IndexOutOfBoundsException();
 				if (index >= actualEnd) return false;
 				final int byteIndex = (int)(index / Byte.SIZE);
@@ -1159,7 +1179,7 @@ public class TransformationStrategies {
 		}
 
 		@Override
-		public BitVector get(int index) {
+		public BitVector get(final int index) {
 			return transformationStrategy.toBitVector(list.get(index));
 		}
 
@@ -1210,7 +1230,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index >= length) throw new IndexOutOfBoundsException();
 				if (index == length - 1) return false;
 				if (index % 2 == 0) return true;
@@ -1311,7 +1331,7 @@ public class TransformationStrategies {
 			}
 
 			@Override
-			public boolean getBoolean(long index) {
+			public boolean getBoolean(final long index) {
 				if (index >= Long.SIZE) throw new IndexOutOfBoundsException();
 				return (v & 1L << index) != 0;
 			}
diff --git a/src/it/unimi/dsi/bits/TransformationStrategy.java b/src/it/unimi/dsi/bits/TransformationStrategy.java
index c7530e7..1c839a4 100644
--- a/src/it/unimi/dsi/bits/TransformationStrategy.java
+++ b/src/it/unimi/dsi/bits/TransformationStrategy.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import java.io.Serializable;
 
 /** A generic transformation from objects of a given type to bit vector. Most useful
diff --git a/src/it/unimi/dsi/compression/CanonicalFast64CodeWordDecoder.java b/src/it/unimi/dsi/compression/CanonicalFast64CodeWordDecoder.java
index a2af3e1..ad0a81a 100644
--- a/src/it/unimi/dsi/compression/CanonicalFast64CodeWordDecoder.java
+++ b/src/it/unimi/dsi/compression/CanonicalFast64CodeWordDecoder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,14 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.fastutil.booleans.BooleanIterator;
-import it.unimi.dsi.io.InputBitStream;
+package it.unimi.dsi.compression;
 
 import java.io.IOException;
 import java.io.Serializable;
 
+import it.unimi.dsi.fastutil.booleans.BooleanIterator;
+import it.unimi.dsi.io.InputBitStream;
+
 /** A fast table-based decoder for canonical Huffman codes supporting only codes with limited (less than 64 bits) codewords.
  * We use the technique described by Daniel S. Hirschberg and Debra A. Lelewer, &ldquo;Efficient Decoding of Prefix Codes&rdquo;,
  * <i>Comm. ACM</i>, 33(4): 449&minus;459, 1990. */
diff --git a/src/it/unimi/dsi/compression/CodeWordCoder.java b/src/it/unimi/dsi/compression/CodeWordCoder.java
index a3f8562..9f1e970 100644
--- a/src/it/unimi/dsi/compression/CodeWordCoder.java
+++ b/src/it/unimi/dsi/compression/CodeWordCoder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,14 +18,16 @@ package it.unimi.dsi.compression;
  *
  */
 
+package it.unimi.dsi.compression;
+
+import java.io.IOException;
+import java.io.Serializable;
+
 import it.unimi.dsi.bits.BitVector;
 import it.unimi.dsi.fastutil.booleans.BooleanIterator;
 import it.unimi.dsi.fastutil.booleans.BooleanIterators;
 import it.unimi.dsi.io.OutputBitStream;
 
-import java.io.IOException;
-import java.io.Serializable;
-
 /** A coder based on a set of codewords. */
 
 public class CodeWordCoder implements PrefixCoder, Serializable {
diff --git a/src/it/unimi/dsi/compression/Codec.java b/src/it/unimi/dsi/compression/Codec.java
index fb4698f..981d652 100644
--- a/src/it/unimi/dsi/compression/Codec.java
+++ b/src/it/unimi/dsi/compression/Codec.java
@@ -1,6 +1,3 @@
-package it.unimi.dsi.compression;
-
-
 /*
  * DSI utilities
  *
@@ -21,6 +18,8 @@ package it.unimi.dsi.compression;
  *
  */
 
+package it.unimi.dsi.compression;
+
 /** An abstract factory corresponding to an instance of a specific compression technique.
  *
  * <P>An implementation of this interface provides coders and decoders. The
diff --git a/src/it/unimi/dsi/compression/Coder.java b/src/it/unimi/dsi/compression/Coder.java
index 6dd81b1..9e46673 100644
--- a/src/it/unimi/dsi/compression/Coder.java
+++ b/src/it/unimi/dsi/compression/Coder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.fastutil.booleans.BooleanIterator;
-import it.unimi.dsi.io.OutputBitStream;
+package it.unimi.dsi.compression;
 
 import java.io.IOException;
 
+import it.unimi.dsi.fastutil.booleans.BooleanIterator;
+import it.unimi.dsi.io.OutputBitStream;
+
 /** Coding methods for a specific compression technique. */
 public interface Coder {
 	/** Encodes a symbol.
diff --git a/src/it/unimi/dsi/compression/Decoder.java b/src/it/unimi/dsi/compression/Decoder.java
index ed14506..b15b96c 100644
--- a/src/it/unimi/dsi/compression/Decoder.java
+++ b/src/it/unimi/dsi/compression/Decoder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.fastutil.booleans.BooleanIterator;
-import it.unimi.dsi.io.InputBitStream;
+package it.unimi.dsi.compression;
 
 import java.io.IOException;
 
+import it.unimi.dsi.fastutil.booleans.BooleanIterator;
+import it.unimi.dsi.io.InputBitStream;
+
 /** Decoding methods for a specific compression technique. */
 public interface Decoder {
 
diff --git a/src/it/unimi/dsi/compression/Fast64CodeWordCoder.java b/src/it/unimi/dsi/compression/Fast64CodeWordCoder.java
index bf4643f..37c8e62 100644
--- a/src/it/unimi/dsi/compression/Fast64CodeWordCoder.java
+++ b/src/it/unimi/dsi/compression/Fast64CodeWordCoder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.bits.BitVector;
-import it.unimi.dsi.io.OutputBitStream;
+package it.unimi.dsi.compression;
 
 import java.io.IOException;
 
+import it.unimi.dsi.bits.BitVector;
+import it.unimi.dsi.io.OutputBitStream;
+
 /** A fast coder based on a set of codewords of length at most 64. */
 
 public final class Fast64CodeWordCoder extends CodeWordCoder {
diff --git a/src/it/unimi/dsi/compression/HuTuckerCodec.java b/src/it/unimi/dsi/compression/HuTuckerCodec.java
index d88414d..4d08c6d 100644
--- a/src/it/unimi/dsi/compression/HuTuckerCodec.java
+++ b/src/it/unimi/dsi/compression/HuTuckerCodec.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.bits.BitVector;
+package it.unimi.dsi.compression;
 
 import java.io.Serializable;
 import java.util.Arrays;
 
+import it.unimi.dsi.bits.BitVector;
+
 /** An implementation of the Hu&ndash;Tucker optimal lexicographical prefix-free code.
  *
  * <p>The familiar Huffman coding technique can be extended so to preserve the order in which
@@ -223,7 +223,7 @@ public class HuTuckerCodec implements PrefixCodec, Serializable {
 
 		if (n.symbol != -1) return new TreeDecoder.LeafNode(n.symbol);
 
-		TreeDecoder.Node newNode = new TreeDecoder.Node();
+		final TreeDecoder.Node newNode = new TreeDecoder.Node();
 		newNode.left = rebuildTree((LevelNode) n.left);
 		newNode.right = rebuildTree((LevelNode) n.right);
 
diff --git a/src/it/unimi/dsi/compression/HuffmanCodec.java b/src/it/unimi/dsi/compression/HuffmanCodec.java
index aef1d23..dd84fb1 100644
--- a/src/it/unimi/dsi/compression/HuffmanCodec.java
+++ b/src/it/unimi/dsi/compression/HuffmanCodec.java
@@ -1,8 +1,3 @@
-package it.unimi.dsi.compression;
-
-import java.io.Serializable;
-import java.util.Arrays;
-
 /*
  * DSI utilities
  *
@@ -23,6 +18,11 @@ import java.util.Arrays;
  *
  */
 
+package it.unimi.dsi.compression;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
 import it.unimi.dsi.bits.BitVector;
 import it.unimi.dsi.bits.LongArrayBitVector;
 import it.unimi.dsi.fastutil.ints.IntArrays;
diff --git a/src/it/unimi/dsi/compression/PrefixCodec.java b/src/it/unimi/dsi/compression/PrefixCodec.java
index 1b21867..f36e2b7 100644
--- a/src/it/unimi/dsi/compression/PrefixCodec.java
+++ b/src/it/unimi/dsi/compression/PrefixCodec.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.compression;
  *
  */
 
+package it.unimi.dsi.compression;
+
 import it.unimi.dsi.bits.BitVector;
 
 /** A codec based on a set of prefix-free codewords.
diff --git a/src/it/unimi/dsi/compression/PrefixCoder.java b/src/it/unimi/dsi/compression/PrefixCoder.java
index 6fba66f..f482b45 100644
--- a/src/it/unimi/dsi/compression/PrefixCoder.java
+++ b/src/it/unimi/dsi/compression/PrefixCoder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,8 +18,9 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.bits.BitVector;
+package it.unimi.dsi.compression;
 
+import it.unimi.dsi.bits.BitVector;
 
 /** A coder based on a set of prefix-free codewords.
  *
diff --git a/src/it/unimi/dsi/compression/TreeDecoder.java b/src/it/unimi/dsi/compression/TreeDecoder.java
index 8e2be82..840679f 100644
--- a/src/it/unimi/dsi/compression/TreeDecoder.java
+++ b/src/it/unimi/dsi/compression/TreeDecoder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,15 +18,17 @@ package it.unimi.dsi.compression;
  *
  */
 
-import it.unimi.dsi.bits.BitVector;
-import it.unimi.dsi.bits.LongArrayBitVector;
-import it.unimi.dsi.fastutil.booleans.BooleanIterator;
-import it.unimi.dsi.io.InputBitStream;
+package it.unimi.dsi.compression;
 
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Arrays;
 
+import it.unimi.dsi.bits.BitVector;
+import it.unimi.dsi.bits.LongArrayBitVector;
+import it.unimi.dsi.fastutil.booleans.BooleanIterator;
+import it.unimi.dsi.io.InputBitStream;
+
 /** A decoder that follows 0/1 labelled paths in a tree.
  *
  *  <p>Additional, the {@link #buildCodes()} method returns a vector
@@ -87,12 +87,12 @@ public final class TreeDecoder implements Decoder, Serializable {
 	 * @param lexSortedCodeWord a vector of lexically sorted codeWords.
 	 * @param symbol a mapping from codewords to symbols.
 	 */
-	public TreeDecoder(BitVector[] lexSortedCodeWord, int[] symbol) {
+	public TreeDecoder(final BitVector[] lexSortedCodeWord, final int[] symbol) {
 		this(buildTree(lexSortedCodeWord, symbol, 0, 0, lexSortedCodeWord.length), lexSortedCodeWord.length);
 	}
 
 
-	private static Node buildTree(BitVector lexSortedCodeWords[], final int[] symbol, int prefix, int offset, int length) {
+	private static Node buildTree(final BitVector lexSortedCodeWords[], final int[] symbol, final int prefix, final int offset, final int length) {
 		if (DEBUG) {
 			System.err.println("****** " + offset + " " + length);
 			System.err.println(Arrays.toString(lexSortedCodeWords));
diff --git a/src/it/unimi/dsi/io/ByteBufferInputStream.java b/src/it/unimi/dsi/io/ByteBufferInputStream.java
index 5875357..1a2124a 100644
--- a/src/it/unimi/dsi/io/ByteBufferInputStream.java
+++ b/src/it/unimi/dsi/io/ByteBufferInputStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,8 +18,7 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.fastutil.io.MeasurableInputStream;
-import it.unimi.dsi.fastutil.io.RepositionableStream;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -31,6 +28,9 @@ import java.nio.channels.FileChannel;
 import java.nio.channels.FileChannel.MapMode;
 import java.util.Arrays;
 
+import it.unimi.dsi.fastutil.io.MeasurableInputStream;
+import it.unimi.dsi.fastutil.io.RepositionableStream;
+
 
 /** A bridge between byte {@linkplain ByteBuffer buffers} and {@linkplain InputStream input streams}.
  *
diff --git a/src/it/unimi/dsi/io/ByteDiskQueue.java b/src/it/unimi/dsi/io/ByteDiskQueue.java
index 89faf52..3231cc2 100644
--- a/src/it/unimi/dsi/io/ByteDiskQueue.java
+++ b/src/it/unimi/dsi/io/ByteDiskQueue.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import java.io.Closeable;
 import java.io.File;
 import java.io.FileOutputStream;
diff --git a/src/it/unimi/dsi/io/DebugInputBitStream.java b/src/it/unimi/dsi/io/DebugInputBitStream.java
index ffce08f..264a4b5 100644
--- a/src/it/unimi/dsi/io/DebugInputBitStream.java
+++ b/src/it/unimi/dsi/io/DebugInputBitStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.lang.MutableString;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.PrintStream;
 
+import it.unimi.dsi.lang.MutableString;
+
 
 /** A debugging wrapper for input bit streams.
  *
@@ -93,16 +93,16 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public void position(long position) throws IOException {
+	public void position(final long position) throws IOException {
 		pw.print(" ->" + position);
 		ibs.position(position);
 	}
 
 	@Override
-	public void read(byte[] bits, int len) throws IOException {
+	public void read(final byte[] bits, final int len) throws IOException {
 		ibs.read(bits, len);
-		MutableString s = new MutableString(" {");
-		for(int i = 0; i < bits.length; i++) s.append(DebugOutputBitStream.byte2Binary(bits[i]));
+		final MutableString s = new MutableString(" {");
+		for (final byte bit : bits) s.append(DebugOutputBitStream.byte2Binary(bit));
 		pw.print(s.length(len).append("}"));
 	}
 
@@ -119,7 +119,7 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public void readBits(long readBits) {
+	public void readBits(final long readBits) {
 		ibs.readBits(readBits);
 	}
 
@@ -138,28 +138,28 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public int readGolomb(int b, int log2b) throws IOException {
+	public int readGolomb(final int b, final int log2b) throws IOException {
 		final int x = ibs.readGolomb(b, log2b);
 		pw.print(" {G:" + x + ":" + b + "}");
 		return x;
 	}
 
 	@Override
-	public int readGolomb(int b) throws IOException {
+	public int readGolomb(final int b) throws IOException {
 		final int x = ibs.readGolomb(b);
 		pw.print(" {G:" + x + ":" + b + "}");
 		return x;
 	}
 
 	@Override
-	public int readInt(int len) throws IOException {
+	public int readInt(final int len) throws IOException {
 		final int x = ibs.readInt(len);
 		pw.print(" {" + DebugOutputBitStream.int2Binary(x, len) + "}");
 		return x;
 	}
 
 	@Override
-	public long readLong(int len) throws IOException {
+	public long readLong(final int len) throws IOException {
 		final long x = ibs.readLong(len);
 		pw.print(" {" + DebugOutputBitStream.int2Binary(x, len) + "}");
 		return x;
@@ -180,28 +180,28 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public long readLongGolomb(long b, int log2b) throws IOException {
+	public long readLongGolomb(final long b, final int log2b) throws IOException {
 		final long x = ibs.readLongGolomb(b, log2b);
 		pw.print(" {G:" + x + ":" + b + "}");
 		return x;
 	}
 
 	@Override
-	public long readLongGolomb(long b) throws IOException {
+	public long readLongGolomb(final long b) throws IOException {
 		final long x = ibs.readLongGolomb(b);
 		pw.print(" {G:" + x + ":" + b + "}");
 		return x;
 	}
 
 	@Override
-	public long readLongMinimalBinary(long b, int log2b) throws IOException {
+	public long readLongMinimalBinary(final long b, final int log2b) throws IOException {
 		final long x = ibs.readLongMinimalBinary(b, log2b);
 		pw.print(" {m:" + x + "<" + b + "}");
 		return x;
 	}
 
 	@Override
-	public long readLongMinimalBinary(long b) throws IOException {
+	public long readLongMinimalBinary(final long b) throws IOException {
 		final long x = ibs.readLongMinimalBinary(b);
 		pw.print(" {m:" + x + "<" + b + "}");
 		return x;
@@ -215,7 +215,7 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public long readLongSkewedGolomb(long b) throws IOException {
+	public long readLongSkewedGolomb(final long b) throws IOException {
 		final long x = ibs.readLongSkewedGolomb(b);
 		pw.print(" {SG:" + x + ":" + b + "}");
 		return x;
@@ -229,14 +229,14 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public long readLongZeta(int k) throws IOException {
+	public long readLongZeta(final int k) throws IOException {
 		final long x = ibs.readLongZeta(k);
 		pw.print(" {z" + k + ":" + x + "}");
 		return x;
 	}
 
 	@Override
-	public int readMinimalBinary(int b, int log2b) throws IOException {
+	public int readMinimalBinary(final int b, final int log2b) throws IOException {
 		final int x = ibs.readMinimalBinary(b, log2b);
 		pw.print(" {m:" + x + "<" + b + "}");
 		return x;
@@ -244,7 +244,7 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public int readMinimalBinary(int b) throws IOException {
+	public int readMinimalBinary(final int b) throws IOException {
 		final int x = ibs.readMinimalBinary(b);
 		pw.print(" {m:" + x + "<" + b + "}");
 		return x;
@@ -258,7 +258,7 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public int readSkewedGolomb(int b) throws IOException {
+	public int readSkewedGolomb(final int b) throws IOException {
 		final int x = ibs.readSkewedGolomb(b);
 		pw.print(" {SG:" + x + ":" + b + "}");
 		return x;
@@ -272,7 +272,7 @@ public class DebugInputBitStream extends InputBitStream {
 	}
 
 	@Override
-	public int readZeta(int k) throws IOException {
+	public int readZeta(final int k) throws IOException {
 		final int x = ibs.readZeta(k);
 		pw.print(" {z" + k + ":" + x + "}");
 		return x;
@@ -286,13 +286,13 @@ public class DebugInputBitStream extends InputBitStream {
 
 	@Override
 	@Deprecated
-	public int skip(int n) {
+	public int skip(final int n) {
 		pw.print(" {+>" + n + "}");
 		return ibs.skip(n);
 	}
 
 	@Override
-	public long skip(long n) throws IOException {
+	public long skip(final long n) throws IOException {
 		pw.print(" {+>" + n + "}");
 		return ibs.skip(n);
 	}
diff --git a/src/it/unimi/dsi/io/DebugOutputBitStream.java b/src/it/unimi/dsi/io/DebugOutputBitStream.java
index b4fa6e7..e162516 100644
--- a/src/it/unimi/dsi/io/DebugOutputBitStream.java
+++ b/src/it/unimi/dsi/io/DebugOutputBitStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.lang.MutableString;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.PrintStream;
 
+import it.unimi.dsi.lang.MutableString;
+
 /** A debugging wrapper for output bit streams.
  *
  * <P>This class can be used to wrap an output bit stream. The semantics of the
@@ -114,7 +114,7 @@ public class DebugOutputBitStream extends OutputBitStream {
 	}
 
 	static MutableString byte2Binary(int x) {
-		MutableString s = new MutableString();
+		final MutableString s = new MutableString();
 		for(int i = 0 ; i < 8; i++) {
 			s.append((char)('0' + (x % 2)));
 			x >>= 1;
@@ -123,7 +123,7 @@ public class DebugOutputBitStream extends OutputBitStream {
 	}
 
 	static MutableString int2Binary(long x, final int len) {
-		MutableString s = new MutableString();
+		final MutableString s = new MutableString();
 		for(int i = 0 ; i < 64; i++) {
 			s.append((char)('0' + (x % 2)));
 			x >>= 1;
@@ -134,8 +134,8 @@ public class DebugOutputBitStream extends OutputBitStream {
 	@Override
 	public long write(final byte bits[], final long len) throws IOException {
 		if (len > Integer.MAX_VALUE) throw new IllegalArgumentException();
-		MutableString s = new MutableString(" {");
-		for(int i = 0; i < bits.length; i++) s.append(byte2Binary(bits[i]));
+		final MutableString s = new MutableString(" {");
+		for (final byte bit : bits) s.append(byte2Binary(bit));
 		pw.print(s.length((int)len).append("}"));
 		return obs.write(bits, len);
 	}
diff --git a/src/it/unimi/dsi/io/DelimitedWordReader.java b/src/it/unimi/dsi/io/DelimitedWordReader.java
index 6e20b8a..5f055fe 100644
--- a/src/it/unimi/dsi/io/DelimitedWordReader.java
+++ b/src/it/unimi/dsi/io/DelimitedWordReader.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,9 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
+import java.io.Reader;
 
 import it.unimi.dsi.fastutil.Hash;
 import it.unimi.dsi.fastutil.chars.CharOpenHashSet;
@@ -27,8 +28,6 @@ import it.unimi.dsi.fastutil.chars.CharSet;
 import it.unimi.dsi.fastutil.chars.CharSets;
 import it.unimi.dsi.lang.MutableString;
 
-import java.io.Reader;
-
 /** A word reader that breaks words on a given set of characters.
  *
  * <p>This class is a simple subclass of {@link FastBufferedReader}. It
@@ -45,7 +44,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	private final CharOpenHashSet delimiters;
 
 	@Override
-	protected boolean isWordConstituent(char c) {
+	protected boolean isWordConstituent(final char c) {
 		return ! delimiters.contains(c);
 	}
 
@@ -60,7 +59,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param bufferSize the size in bytes of the internal buffer.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(int bufferSize, CharSet delimiters) {
+	public DelimitedWordReader(final int bufferSize, final CharSet delimiters) {
 		super(bufferSize);
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
@@ -70,7 +69,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * The wrapped reader will have to be set later using {@link #setReader(Reader)}.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(CharSet delimiters) {
+	public DelimitedWordReader(final CharSet delimiters) {
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
 	}
@@ -84,7 +83,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 *
 	 * @param delimiters a set of characters that will be considered word delimiters, specified as a string.
 	 */
-	public DelimitedWordReader(String delimiters) {
+	public DelimitedWordReader(final String delimiters) {
 		this(new CharOpenHashSet(delimiters.toCharArray()));
 	}
 
@@ -94,7 +93,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param bufferSize the size in bytes of the internal buffer, specified as a string.
 	 * @param delimiters a set of characters that will be considered word delimiters, specified as a string.
 	 */
-	public DelimitedWordReader(String bufferSize, String delimiters) {
+	public DelimitedWordReader(final String bufferSize, final String delimiters) {
 		this(Integer.parseInt(bufferSize), new CharOpenHashSet(delimiters.toCharArray()));
 	}
 
@@ -104,7 +103,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param bufferSize the size in bytes of the internal buffer.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(Reader r, int bufferSize, CharSet delimiters) {
+	public DelimitedWordReader(final Reader r, final int bufferSize, final CharSet delimiters) {
 		super(r, bufferSize);
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
@@ -115,7 +114,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param r a reader to wrap.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(Reader r, CharSet delimiters) {
+	public DelimitedWordReader(final Reader r, final CharSet delimiters) {
 		super(r);
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
@@ -131,7 +130,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param length the number of character to be used.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(char[] array, int offset, int length, CharSet delimiters) {
+	public DelimitedWordReader(final char[] array, final int offset, final int length, final CharSet delimiters) {
 		super(array, offset, length);
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
@@ -145,7 +144,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param array the array that will be wrapped by the reader.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(char[] array, CharSet delimiters) {
+	public DelimitedWordReader(final char[] array, final CharSet delimiters) {
 		super(array);
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
@@ -159,7 +158,7 @@ public class DelimitedWordReader extends FastBufferedReader {
 	 * @param s the mutable string that will be wrapped by the reader.
 	 * @param delimiters a set of characters that will be considered word delimiters.
 	 */
-	public DelimitedWordReader(MutableString s, CharSet delimiters) {
+	public DelimitedWordReader(final MutableString s, final CharSet delimiters) {
 		super(s, CharSets.EMPTY_SET);
 		this.delimiters = new CharOpenHashSet(delimiters, Hash.VERY_FAST_LOAD_FACTOR);
 		addCrLf();
@@ -179,10 +178,10 @@ public class DelimitedWordReader extends FastBufferedReader {
 	@Override
 	public String toString() {
 		final String className = getClass().getName();
-		CharOpenHashSet additionalDelimiters = delimiters.clone();
+		final CharOpenHashSet additionalDelimiters = delimiters.clone();
 		additionalDelimiters.remove('\n');
 		additionalDelimiters.remove('\r');
-		String delimiters = new String(additionalDelimiters.toCharArray());
+		final String delimiters = new String(additionalDelimiters.toCharArray());
 		if (bufferSize == DEFAULT_BUFFER_SIZE) return className + "(\"" + delimiters + "\")";
 		return className + "(" + bufferSize + ",\"" + delimiters + "\")";
 	}
diff --git a/src/it/unimi/dsi/io/FastBufferedReader.java b/src/it/unimi/dsi/io/FastBufferedReader.java
index 94a7210..f4ae8b0 100644
--- a/src/it/unimi/dsi/io/FastBufferedReader.java
+++ b/src/it/unimi/dsi/io/FastBufferedReader.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,12 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Reader;
+
 import it.unimi.dsi.fastutil.Hash;
 import it.unimi.dsi.fastutil.chars.CharArrays;
 import it.unimi.dsi.fastutil.chars.CharOpenHashSet;
@@ -27,10 +31,6 @@ import it.unimi.dsi.fastutil.chars.CharSet;
 import it.unimi.dsi.fastutil.chars.CharSets;
 import it.unimi.dsi.lang.MutableString;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Reader;
-
 /** A lightweight, unsynchronised buffered reader based on
  * {@linkplain it.unimi.dsi.lang.MutableString mutable strings}.
  *
@@ -471,7 +471,7 @@ public class FastBufferedReader extends Reader implements WordReader {
 		final String className = getClass().getName();
 		if (bufferSize == DEFAULT_BUFFER_SIZE && wordConstituents.isEmpty()) return className;
 		if (wordConstituents.isEmpty()) return className + "(" + bufferSize + ")";
-		String wordConstituents = new String(this.wordConstituents.toCharArray());
+		final String wordConstituents = new String(this.wordConstituents.toCharArray());
 		if (bufferSize == DEFAULT_BUFFER_SIZE) return className + "(\"" + wordConstituents + "\")";
 		return className + "(" + bufferSize + ",\"" + wordConstituents + "\")";
 	}
diff --git a/src/it/unimi/dsi/io/FileLinesCollection.java b/src/it/unimi/dsi/io/FileLinesCollection.java
index 9e9f70f..58e30a2 100644
--- a/src/it/unimi/dsi/io/FileLinesCollection.java
+++ b/src/it/unimi/dsi/io/FileLinesCollection.java
@@ -1,15 +1,3 @@
-package it.unimi.dsi.io;
-
-import java.io.Closeable;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.AbstractCollection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.zip.GZIPInputStream;
-
 /*
  * DSI utilities
  *
@@ -30,6 +18,18 @@ import java.util.zip.GZIPInputStream;
  *
  */
 
+package it.unimi.dsi.io;
+
+import java.io.Closeable;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.AbstractCollection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.zip.GZIPInputStream;
+
 import it.unimi.dsi.fastutil.objects.ObjectArrayList;
 import it.unimi.dsi.fastutil.objects.ObjectList;
 import it.unimi.dsi.lang.MutableString;
diff --git a/src/it/unimi/dsi/io/InputBitStream.java b/src/it/unimi/dsi/io/InputBitStream.java
index 4c5e89d..b76b19a 100644
--- a/src/it/unimi/dsi/io/InputBitStream.java
+++ b/src/it/unimi/dsi/io/InputBitStream.java
@@ -1,17 +1,3 @@
-package it.unimi.dsi.io;
-
-import java.io.Closeable;
-import java.io.DataInputStream;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.Flushable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.nio.channels.FileChannel;
-
 /*
  * DSI utilities
  *
@@ -32,6 +18,20 @@ import java.nio.channels.FileChannel;
  *
  */
 
+package it.unimi.dsi.io;
+
+import java.io.Closeable;
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.nio.channels.FileChannel;
+
 import it.unimi.dsi.bits.Fast;
 import it.unimi.dsi.fastutil.booleans.BooleanIterator;
 import it.unimi.dsi.fastutil.ints.IntIterators;
@@ -127,15 +127,21 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 		final String resouceFullPath = "/it/unimi/dsi/io/" + resource;
         final InputStream ris = InputBitStream.class.getResourceAsStream(resouceFullPath);
         if (ris == null) throw new IOException("Cannot open resource " + resouceFullPath);
-        DataInputStream dis = new DataInputStream(new FastBufferedInputStream(ris));
+        final DataInputStream dis = new DataInputStream(new FastBufferedInputStream(ris));
 		BinIO.loadInts(dis, array, 0, array.length);
 		dis.close();
 		assert checkLength(resource, array, resouceFullPath);
 	}
 
 	public static boolean checkLength(final String resource, final int[] array, final String resouceFullPath) {
-		final int actualLength = IntIterators.unwrap(BinIO.asIntIterator(new DataInputStream(InputBitStream.class.getResourceAsStream(resouceFullPath)))).length;
+		final DataInputStream dis = new DataInputStream(InputBitStream.class.getResourceAsStream(resouceFullPath));
+		final int actualLength = IntIterators.unwrap(BinIO.asIntIterator(dis)).length;
 		assert array.length == actualLength : resource + " is long " + actualLength + " but we think it should rather be " + array.length;
+		try {
+			dis.close();
+		} catch (final IOException e) {
+			throw new RuntimeException(e);
+		}
 		return true;
 	}
 
@@ -148,7 +154,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 			fillArrayFromResource("zeta3.in.16", ZETA_3);
 			fillArrayFromResource("shiftedgamma.in.16", SHIFTED_GAMMA);
 		}
-		catch (IOException e) {
+		catch (final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
@@ -245,11 +251,11 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 			try {
 				fc = (FileChannel)(is.getClass().getMethod("getChannel")).invoke(is);
 			}
-			catch(IllegalAccessException e) {}
-			catch(IllegalArgumentException e) {}
-			catch(NoSuchMethodException e) {}
-			catch(InvocationTargetException e) {}
-			catch(ClassCastException e) {}
+			catch(final IllegalAccessException e) {}
+			catch(final IllegalArgumentException e) {}
+			catch(final NoSuchMethodException e) {}
+			catch(final InvocationTargetException e) {}
+			catch(final ClassCastException e) {}
 			fileChannel = fc;
 			repositionableStream = null;
 		}
@@ -468,7 +474,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 			current = (current << 8) | read();
 			fill += 8;
 		}
-		catch(EOFException dontCare) {}
+		catch(final EOFException dontCare) {}
 
 		return fill;
 	}
@@ -979,7 +985,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 	 * @param n the number of &gamma;-coded natural numbers to be skipped.
 	 * @see #readGamma()
 	 */
-	public void skipGammas(int n) throws IOException {
+	public void skipGammas(final int n) throws IOException {
 		skipGammas((long)n);
 	}
 
@@ -1083,7 +1089,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 	 * @see #readShiftedGamma()
 	 */
 
-	public void skipShiftedGammas(int n) throws IOException {
+	public void skipShiftedGammas(final int n) throws IOException {
 		skipShiftedGammas((long)n);
 	}
 
@@ -1190,7 +1196,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 	 * @see #readDelta()
 	 */
 
-	public void skipDeltas(int n) throws IOException {
+	public void skipDeltas(final int n) throws IOException {
 		skipDeltas((long)n);
 	}
 
@@ -1503,7 +1509,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 	 * @see #readZeta(int)
 	 */
 
-	public void skipZetas(final int k, int n) throws IOException {
+	public void skipZetas(final int k, final int n) throws IOException {
 		skipZetas(k, (long)n);
 	}
 
@@ -1587,7 +1593,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 		try {
 			return readBit() != 0;
 		}
-		catch (IOException e) {
+		catch (final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
@@ -1606,7 +1612,7 @@ public class InputBitStream implements BooleanIterator, Flushable, Closeable {
 		try {
 			return (int)skip((long)n);
 		}
-		catch (IOException e) {
+		catch (final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
diff --git a/src/it/unimi/dsi/io/LineIterator.java b/src/it/unimi/dsi/io/LineIterator.java
index 97c3349..2163c79 100644
--- a/src/it/unimi/dsi/io/LineIterator.java
+++ b/src/it/unimi/dsi/io/LineIterator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,16 +18,18 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.fastutil.objects.ObjectIterator;
-import it.unimi.dsi.fastutil.objects.ObjectArrayList;
-import it.unimi.dsi.lang.MutableString;
-import it.unimi.dsi.logging.ProgressLogger;
+package it.unimi.dsi.io;
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.List;
 import java.util.NoSuchElementException;
 
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+import it.unimi.dsi.fastutil.objects.ObjectIterator;
+import it.unimi.dsi.lang.MutableString;
+import it.unimi.dsi.logging.ProgressLogger;
+
 /** An adapter that exposes a fast buffered reader as an iterator
  * over the returned lines. Since we just actually read a line to know
  * whether {@link #hasNext()} should return true, the last line read
@@ -85,7 +85,7 @@ public class LineIterator implements ObjectIterator<MutableString> {
 			try {
 				k = 1 - k;
 				hasNext = fastBufferedReader.readLine(s[k]) != null;
-			} catch (IOException e) {
+			} catch (final IOException e) {
 				throw new RuntimeException(e);
 			}
 			toAdvance = false;
diff --git a/src/it/unimi/dsi/io/LineWordReader.java b/src/it/unimi/dsi/io/LineWordReader.java
index 9749842..f0f9e80 100644
--- a/src/it/unimi/dsi/io/LineWordReader.java
+++ b/src/it/unimi/dsi/io/LineWordReader.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,14 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.lang.MutableString;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Serializable;
 
+import it.unimi.dsi.lang.MutableString;
+
 /** A trivial {@link it.unimi.dsi.io.WordReader} that considers each line
  * of a document a single word.
  *
@@ -40,7 +40,7 @@ import java.io.Serializable;
 public class LineWordReader implements WordReader, Serializable {
 	private static final long serialVersionUID = 1L;
 	/** An fast buffered reader wrapping the underlying reader. */
-	private FastBufferedReader fastBufferedReader = new FastBufferedReader();
+	private final FastBufferedReader fastBufferedReader = new FastBufferedReader();
 
 	@Override
 	public boolean next(final MutableString word, final MutableString nonWord) throws IOException {
diff --git a/src/it/unimi/dsi/io/MultipleInputStream.java b/src/it/unimi/dsi/io/MultipleInputStream.java
index 1fd4298..bf02251 100644
--- a/src/it/unimi/dsi/io/MultipleInputStream.java
+++ b/src/it/unimi/dsi/io/MultipleInputStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.fastutil.objects.ObjectArrays;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.InputStream;
 
+import it.unimi.dsi.fastutil.objects.ObjectArrays;
+
 /** A multiple input stream.
  *
  * <p>Instances of this class encapsulate a sequence of input streams.
diff --git a/src/it/unimi/dsi/io/NullInputStream.java b/src/it/unimi/dsi/io/NullInputStream.java
index af14347..9d482e3 100644
--- a/src/it/unimi/dsi/io/NullInputStream.java
+++ b/src/it/unimi/dsi/io/NullInputStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,14 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.fastutil.io.MeasurableInputStream;
-import it.unimi.dsi.fastutil.io.RepositionableStream;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.Serializable;
 
+import it.unimi.dsi.fastutil.io.MeasurableInputStream;
+import it.unimi.dsi.fastutil.io.RepositionableStream;
+
 /** End-of-stream-only input stream.
  *
  * <P>This stream has length 0, and will always return end-of-file on any read attempt.
@@ -69,7 +69,7 @@ public class NullInputStream extends MeasurableInputStream implements Reposition
 	}
 
 	@Override
-	public void position(long position) throws IOException {
+	public void position(final long position) throws IOException {
 		// TODO: we should specify the semantics out of bounds
 		return;
 	}
diff --git a/src/it/unimi/dsi/io/NullOutputStream.java b/src/it/unimi/dsi/io/NullOutputStream.java
index ecf2173..ba7988b 100644
--- a/src/it/unimi/dsi/io/NullOutputStream.java
+++ b/src/it/unimi/dsi/io/NullOutputStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,13 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.fastutil.io.RepositionableStream;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.OutputStream;
 
+import it.unimi.dsi.fastutil.io.RepositionableStream;
+
 /** Throw-it-away output stream.
  *
  * <P>This stream discards whatever is written into it. Its usefulness is in
@@ -59,5 +59,5 @@ public class NullOutputStream extends OutputStream implements RepositionableStre
 	}
 
 	@Override
-	public void position(long newPosition) throws IOException {}
+	public void position(final long newPosition) throws IOException {}
 }
diff --git a/src/it/unimi/dsi/io/NullReader.java b/src/it/unimi/dsi/io/NullReader.java
index fe99ca4..0aa91fc 100644
--- a/src/it/unimi/dsi/io/NullReader.java
+++ b/src/it/unimi/dsi/io/NullReader.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import java.io.Reader;
 import java.io.Serializable;
 
diff --git a/src/it/unimi/dsi/io/OfflineIterable.java b/src/it/unimi/dsi/io/OfflineIterable.java
index f48f319..73c9a6c 100644
--- a/src/it/unimi/dsi/io/OfflineIterable.java
+++ b/src/it/unimi/dsi/io/OfflineIterable.java
@@ -1,18 +1,3 @@
-package it.unimi.dsi.io;
-
-
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.NoSuchElementException;
-
-import org.slf4j.LoggerFactory;
-
 /*
  * DSI utilities
  *
@@ -33,6 +18,20 @@ import org.slf4j.LoggerFactory;
  *
  */
 
+package it.unimi.dsi.io;
+
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.NoSuchElementException;
+
+import org.slf4j.LoggerFactory;
+
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.io.FastBufferedInputStream;
 import it.unimi.dsi.fastutil.io.FastBufferedOutputStream;
diff --git a/src/it/unimi/dsi/io/OutputBitStream.java b/src/it/unimi/dsi/io/OutputBitStream.java
index 17319eb..fcd1cdd 100644
--- a/src/it/unimi/dsi/io/OutputBitStream.java
+++ b/src/it/unimi/dsi/io/OutputBitStream.java
@@ -1,16 +1,3 @@
-package it.unimi.dsi.io;
-
-import java.io.Closeable;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.Flushable;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.nio.channels.FileChannel;
-
 /*
  * DSI utilities
  *
@@ -31,6 +18,19 @@ import java.nio.channels.FileChannel;
  *
  */
 
+package it.unimi.dsi.io;
+
+import java.io.Closeable;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.nio.channels.FileChannel;
+
 import it.unimi.dsi.bits.Fast;
 import it.unimi.dsi.fastutil.booleans.BooleanIterator;
 import it.unimi.dsi.fastutil.io.RepositionableStream;
diff --git a/src/it/unimi/dsi/io/SafelyCloseable.java b/src/it/unimi/dsi/io/SafelyCloseable.java
index 54eb3ce..4f1b262 100644
--- a/src/it/unimi/dsi/io/SafelyCloseable.java
+++ b/src/it/unimi/dsi/io/SafelyCloseable.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -19,6 +17,9 @@ package it.unimi.dsi.io;
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  *
  */
+
+package it.unimi.dsi.io;
+
 import java.io.Closeable;
 
 /** A marker interface for a closeable resource that implements safety measures to
diff --git a/src/it/unimi/dsi/io/SegmentedInputStream.java b/src/it/unimi/dsi/io/SegmentedInputStream.java
index 0859b31..b0cc7dc 100644
--- a/src/it/unimi/dsi/io/SegmentedInputStream.java
+++ b/src/it/unimi/dsi/io/SegmentedInputStream.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,9 +18,7 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.fastutil.bytes.ByteArrays;
-import it.unimi.dsi.fastutil.io.MeasurableInputStream;
-import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -32,6 +28,10 @@ import java.util.NoSuchElementException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import it.unimi.dsi.fastutil.bytes.ByteArrays;
+import it.unimi.dsi.fastutil.io.MeasurableInputStream;
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+
 /** Exhibits a single {@link InputStream} as a number of streams divided into {@link java.io.InputStream#reset() reset()}-separated
  * segments.
  *
@@ -55,13 +55,13 @@ public class SegmentedInputStream extends MeasurableInputStream {
 	private static final Logger LOGGER = LoggerFactory.getLogger(SegmentedInputStream.class);
 
 	/** Underlying input stream. */
-	private InputStream in;
+	private final InputStream in;
 	/** Relative position within the current segment. */
 	private int relativePos;
 	/** Byte length of the current segment. */
 	private int segmentLen;
 	/** List of known blocks. */
-	private ObjectArrayList<SegmentBlock> blocks;
+	private final ObjectArrayList<SegmentBlock> blocks;
 	/** The start marker of the current segment. */
 	private long currentStartMarker;
 	/** The stop marker of the current segment. */
@@ -83,7 +83,7 @@ public class SegmentedInputStream extends MeasurableInputStream {
 		 * @param delimiter a list of segment delimiters.
 		 * @throws IllegalArgumentException if the elements of <code>delimiter</code> are negative or not increasing.
 		 */
-		public SegmentBlock(long... delimiter) throws IllegalArgumentException {
+		public SegmentBlock(final long... delimiter) throws IllegalArgumentException {
 			if (delimiter.length == 0) throw new IllegalArgumentException();
 
 			for (int i = 0; i < delimiter.length - 1; i++)
@@ -170,13 +170,13 @@ public class SegmentedInputStream extends MeasurableInputStream {
 		if (! block.hasMoreSegments()) return;
 		block.nextSegment();
 
-		long absPos = currentStartMarker + relativePos;
+		final long absPos = currentStartMarker + relativePos;
 
 		currentStartMarker = block.currentStartMarker();
 		currentStopMarker = block.currentStopMarker();
 
 		if (currentStartMarker - absPos > 0) {
-			long diff = in.skip(currentStartMarker - absPos);
+			final long diff = in.skip(currentStartMarker - absPos);
 			if (diff != currentStartMarker - absPos) throw new IllegalStateException("Should have skipped " + (currentStartMarker - absPos) + " bytes, got " + diff);
 		}
 
diff --git a/src/it/unimi/dsi/io/WordReader.java b/src/it/unimi/dsi/io/WordReader.java
index f4d4af1..180d819 100644
--- a/src/it/unimi/dsi/io/WordReader.java
+++ b/src/it/unimi/dsi/io/WordReader.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,14 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.lang.MutableString;
+package it.unimi.dsi.io;
 
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Serializable;
 
+import it.unimi.dsi.lang.MutableString;
+
 /** An interface providing methods to break the input from a reader into words.
  *
  * <p>The intended implementations of this interface should decorate
diff --git a/src/it/unimi/dsi/lang/EnumStringParser.java b/src/it/unimi/dsi/lang/EnumStringParser.java
index ef0ea44..13da1a0 100644
--- a/src/it/unimi/dsi/lang/EnumStringParser.java
+++ b/src/it/unimi/dsi/lang/EnumStringParser.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 import com.martiansoftware.jsap.ParseException;
 import com.martiansoftware.jsap.StringParser;
 
@@ -52,15 +52,15 @@ public class EnumStringParser<E extends Enum<E>> extends StringParser {
 	 */
 	@Override
 	@SuppressWarnings({ "unchecked" })
-	public E parse(String s) throws ParseException {
+	public E parse(final String s) throws ParseException {
 		try {
 			return (E) enumClass.getMethod("valueOf", String.class).invoke(null, toUpper ? s.toUpperCase() : s);
-		} catch (Exception e) {
+		} catch (final Exception e) {
 			throw (new ParseException("Unknown value '" + s + "'.", e));
 		}
 	}
 
-	private EnumStringParser(Class<E> enumClass, final boolean toUpper) {
+	private EnumStringParser(final Class<E> enumClass, final boolean toUpper) {
 		this.enumClass = enumClass;
 		this.toUpper = toUpper;
 	}
diff --git a/src/it/unimi/dsi/lang/FlyweightPrototype.java b/src/it/unimi/dsi/lang/FlyweightPrototype.java
index 3b99332..72359ea 100644
--- a/src/it/unimi/dsi/lang/FlyweightPrototype.java
+++ b/src/it/unimi/dsi/lang/FlyweightPrototype.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 /** A prototype providing flyweight copies.
  *
  * <p><em>Flyweight copies</em> are useful to implement multithreading on read-only
diff --git a/src/it/unimi/dsi/lang/FlyweightPrototypes.java b/src/it/unimi/dsi/lang/FlyweightPrototypes.java
index bdedf66..a0e57db 100644
--- a/src/it/unimi/dsi/lang/FlyweightPrototypes.java
+++ b/src/it/unimi/dsi/lang/FlyweightPrototypes.java
@@ -1,7 +1,3 @@
-package it.unimi.dsi.lang;
-
-import java.lang.reflect.Array;
-
 /*
  * DSI utilities
  *
@@ -22,6 +18,10 @@ import java.lang.reflect.Array;
  *
  */
 
+package it.unimi.dsi.lang;
+
+import java.lang.reflect.Array;
+
 /** A class providing static methods and objects that do useful things
  * with {@linkplain it.unimi.dsi.lang.FlyweightPrototype flyweight protoypes}.
  */
diff --git a/src/it/unimi/dsi/lang/MutableString.java b/src/it/unimi/dsi/lang/MutableString.java
index c4b399c..dc531f6 100644
--- a/src/it/unimi/dsi/lang/MutableString.java
+++ b/src/it/unimi/dsi/lang/MutableString.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.EOFException;
diff --git a/src/it/unimi/dsi/lang/ObjectParser.java b/src/it/unimi/dsi/lang/ObjectParser.java
index b4ba4d3..e4f2ab1 100644
--- a/src/it/unimi/dsi/lang/ObjectParser.java
+++ b/src/it/unimi/dsi/lang/ObjectParser.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
diff --git a/src/it/unimi/dsi/logging/ProgressLogger.java b/src/it/unimi/dsi/logging/ProgressLogger.java
index 9f3187a..3e732a2 100644
--- a/src/it/unimi/dsi/logging/ProgressLogger.java
+++ b/src/it/unimi/dsi/logging/ProgressLogger.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.logging;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.logging;
  *
  */
 
+package it.unimi.dsi.logging;
+
 import static it.unimi.dsi.Util.RUNTIME;
 
 import java.util.concurrent.TimeUnit;
diff --git a/src/it/unimi/dsi/parser/Attribute.java b/src/it/unimi/dsi/parser/Attribute.java
index 382fcd1..f0c6f49 100644
--- a/src/it/unimi/dsi/parser/Attribute.java
+++ b/src/it/unimi/dsi/parser/Attribute.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
+
 import it.unimi.dsi.lang.MutableString;
 
 /** An SGML attribute. */
diff --git a/src/it/unimi/dsi/parser/BulletParser.java b/src/it/unimi/dsi/parser/BulletParser.java
index c3aa858..770ce7c 100644
--- a/src/it/unimi/dsi/parser/BulletParser.java
+++ b/src/it/unimi/dsi/parser/BulletParser.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
 
 import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap;
 import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
diff --git a/src/it/unimi/dsi/parser/Element.java b/src/it/unimi/dsi/parser/Element.java
index efc696c..45c1637 100644
--- a/src/it/unimi/dsi/parser/Element.java
+++ b/src/it/unimi/dsi/parser/Element.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -19,6 +17,9 @@ package it.unimi.dsi.parser;
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  *
  */
+
+package it.unimi.dsi.parser;
+
 import it.unimi.dsi.fastutil.Hash;
 import it.unimi.dsi.fastutil.objects.ReferenceLinkedOpenHashSet;
 import it.unimi.dsi.lang.MutableString;
diff --git a/src/it/unimi/dsi/parser/Entity.java b/src/it/unimi/dsi/parser/Entity.java
index 09587b1..62b254f 100644
--- a/src/it/unimi/dsi/parser/Entity.java
+++ b/src/it/unimi/dsi/parser/Entity.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
+
 import it.unimi.dsi.lang.MutableString;
 
 /** An SGML character entity. */
diff --git a/src/it/unimi/dsi/parser/HTMLFactory.java b/src/it/unimi/dsi/parser/HTMLFactory.java
index 3a362be..45d63fa 100644
--- a/src/it/unimi/dsi/parser/HTMLFactory.java
+++ b/src/it/unimi/dsi/parser/HTMLFactory.java
@@ -1,6 +1,3 @@
-package it.unimi.dsi.parser;
-
-
 /*
  * DSI utilities
  *
@@ -21,6 +18,8 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
+
 import it.unimi.dsi.fastutil.Hash;
 import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
 import it.unimi.dsi.lang.MutableString;
diff --git a/src/it/unimi/dsi/parser/ParsingFactory.java b/src/it/unimi/dsi/parser/ParsingFactory.java
index a739fa1..990c478 100644
--- a/src/it/unimi/dsi/parser/ParsingFactory.java
+++ b/src/it/unimi/dsi/parser/ParsingFactory.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
+
 import it.unimi.dsi.lang.MutableString;
 
 /** A set of coherent methods to turn element-type, attribute and entity names to unique interned instances.
diff --git a/src/it/unimi/dsi/parser/WellFormedXmlFactory.java b/src/it/unimi/dsi/parser/WellFormedXmlFactory.java
index c7b3750..1e7715a 100644
--- a/src/it/unimi/dsi/parser/WellFormedXmlFactory.java
+++ b/src/it/unimi/dsi/parser/WellFormedXmlFactory.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
+
 import it.unimi.dsi.fastutil.Hash;
 import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
 import it.unimi.dsi.lang.MutableString;
diff --git a/src/it/unimi/dsi/parser/callback/Callback.java b/src/it/unimi/dsi/parser/callback/Callback.java
index 0bdbd6b..32a2bd9 100644
--- a/src/it/unimi/dsi/parser/callback/Callback.java
+++ b/src/it/unimi/dsi/parser/callback/Callback.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,15 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Map;
+
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.parser.Attribute;
 import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 
-import java.util.Map;
-
 /** A callback for the {@linkplain it.unimi.dsi.parser.BulletParser bullet parser}.
  *
  * <P>This interface is very loosely inspired to the SAX2 interface. However, it
diff --git a/src/it/unimi/dsi/parser/callback/ComposedCallbackBuilder.java b/src/it/unimi/dsi/parser/callback/ComposedCallbackBuilder.java
index 3d132bf..ca1fa12 100644
--- a/src/it/unimi/dsi/parser/callback/ComposedCallbackBuilder.java
+++ b/src/it/unimi/dsi/parser/callback/ComposedCallbackBuilder.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,14 +18,16 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Map;
+
 import it.unimi.dsi.fastutil.objects.ObjectArrayList;
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.parser.Attribute;
 import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 
-import java.util.Map;
-
 /** A builder for composed callbacks.
  *
  * <P>To compose a series of callbacks, you must first create an instance
@@ -45,10 +45,10 @@ public class ComposedCallbackBuilder {
 		final int size;
 
 		/** The callback array. */
-		private Callback[] callback;
+		private final Callback[] callback;
 
 		/** An array of boolean representing continuation of the corresponding callback in {@link #callback}. */
-		private boolean[] cont;
+		private final boolean[] cont;
 
 		private final ObjectArrayList<Callback> callbacks;
 
diff --git a/src/it/unimi/dsi/parser/callback/DebugCallbackDecorator.java b/src/it/unimi/dsi/parser/callback/DebugCallbackDecorator.java
index 5553f0f..222d1a3 100644
--- a/src/it/unimi/dsi/parser/callback/DebugCallbackDecorator.java
+++ b/src/it/unimi/dsi/parser/callback/DebugCallbackDecorator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,15 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Map;
+
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.parser.Attribute;
 import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 
-import java.util.Map;
-
 /** A decorator that prints on standard error all calls to the underlying callback.
  */
 public class DebugCallbackDecorator implements Callback {
diff --git a/src/it/unimi/dsi/parser/callback/DefaultCallback.java b/src/it/unimi/dsi/parser/callback/DefaultCallback.java
index 24e1d67..7693a2d 100644
--- a/src/it/unimi/dsi/parser/callback/DefaultCallback.java
+++ b/src/it/unimi/dsi/parser/callback/DefaultCallback.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,15 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Map;
+
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.parser.Attribute;
 import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 
-import java.util.Map;
-
 /**
  * A default, do-nothing-at-all callback.
  *
diff --git a/src/it/unimi/dsi/parser/callback/LinkExtractor.java b/src/it/unimi/dsi/parser/callback/LinkExtractor.java
index 6187057..a40cd79 100644
--- a/src/it/unimi/dsi/parser/callback/LinkExtractor.java
+++ b/src/it/unimi/dsi/parser/callback/LinkExtractor.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,11 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Map;
+import java.util.Set;
+
 import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.parser.Attribute;
@@ -27,9 +30,6 @@ import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 import it.unimi.dsi.util.TextPattern;
 
-import java.util.Map;
-import java.util.Set;
-
 /**
  * A callback extracting links.
  *
diff --git a/src/it/unimi/dsi/parser/callback/TextExtractor.java b/src/it/unimi/dsi/parser/callback/TextExtractor.java
index 621b3b3..6daac61 100644
--- a/src/it/unimi/dsi/parser/callback/TextExtractor.java
+++ b/src/it/unimi/dsi/parser/callback/TextExtractor.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,15 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Map;
+
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.parser.Attribute;
 import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 
-import java.util.Map;
-
 /** A callback extracting text and titles.
  *
  * <P>This callbacks extracts all text in the page, and the title.
diff --git a/src/it/unimi/dsi/stat/Jackknife.java b/src/it/unimi/dsi/stat/Jackknife.java
index 3b6e409..83568bc 100644
--- a/src/it/unimi/dsi/stat/Jackknife.java
+++ b/src/it/unimi/dsi/stat/Jackknife.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.stat;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.stat;
  *
  */
 
+package it.unimi.dsi.stat;
+
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
@@ -82,7 +82,7 @@ public class Jackknife {
 
 	@Override
 	public String toString() {
-		StringBuilder s = new StringBuilder();
+		final StringBuilder s = new StringBuilder();
 		for(int i = estimate.length; i++ != 0;) s.append(estimate[i]).append('\t').append(standardError[i]).append(System.getProperty("\n"));
 		return s.toString();
 	}
@@ -103,12 +103,7 @@ public class Jackknife {
 	}
 
 	/** A statistic that returns the sample. Useful to compute the average and the empirical standard error. */
-	public static Jackknife.Statistic IDENTITY = new Jackknife.Statistic() {
-		@Override
-		public BigDecimal[] compute(final BigDecimal[] sample, final MathContext unused) {
-			return sample;
-		}
-	};
+	public static Jackknife.Statistic IDENTITY = (sample, unused) -> sample;
 
 	/** An abstract statistic with a {@linkplain #compute(double[]) template method} that
 	 * accepts an array of doubles, returns an array of doubles and handles the data conversions that
@@ -118,10 +113,10 @@ public class Jackknife {
 		public abstract double[] compute(final double[] sample);
 
 		@Override
-		public BigDecimal[] compute(BigDecimal[] bigSample, final MathContext unused) {
+		public BigDecimal[] compute(final BigDecimal[] bigSample, final MathContext unused) {
 			return doubleArray2BigDecimalArray(compute(bigDecimalArray2DoubleArray(bigSample)));
 		}
-	};
+	}
 
 
 	/** Applies the jackknife to a statistic of interest using a list of samples using {@link #DEFAULT_MATH_CONTEXT} as context.
@@ -152,7 +147,7 @@ public class Jackknife {
 		final BigDecimal[] sum = new BigDecimal[l];
 		for(int p = l; p-- != 0;) sum[p] = BigDecimal.ZERO;
 		// Gather all samples
-		for(double[] sample: samples) {
+		for(final double[] sample: samples) {
 			if (sample.length != l) throw new IllegalArgumentException("Samples have different sizes: " + sample.length + " != " + l);
 			for(int p = l; p-- != 0;) sum[p] = sum[p].add(BigDecimal.valueOf(sample[p]), mc);
 		}
diff --git a/src/it/unimi/dsi/stat/SummaryStats.java b/src/it/unimi/dsi/stat/SummaryStats.java
index 0833943..6c432ed 100644
--- a/src/it/unimi/dsi/stat/SummaryStats.java
+++ b/src/it/unimi/dsi/stat/SummaryStats.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.stat;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.stat;
  *
  */
 
+package it.unimi.dsi.stat;
+
 import it.unimi.dsi.Util;
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.doubles.DoubleList;
@@ -49,7 +49,7 @@ public class SummaryStats implements Size64 {
 	 *
 	 * @param x the new value.
 	 */
-	public synchronized void add(double x) {
+	public synchronized void add(final double x) {
 		final double oldA = a;
 		a += (x - a) / ++size;
 		q += (x - a) * (x - oldA);
@@ -61,8 +61,8 @@ public class SummaryStats implements Size64 {
 	 *
 	 * @param a an array of new values.
 	 */
-	public void addAll(double[] a) {
-		for(double x: a) add(x);
+	public void addAll(final double[] a) {
+		for(final double x: a) add(x);
 	}
 
 	/** Adds values to the stream.
@@ -70,7 +70,7 @@ public class SummaryStats implements Size64 {
 	 * @param l a list of new values.
 	 */
 	public void addAll(final DoubleList l) {
-		for(double x: l) add(x);
+		for(final double x: l) add(x);
 	}
 
 	/** Returns the mean of the values added so far.
diff --git a/src/it/unimi/dsi/util/AbstractPrefixMap.java b/src/it/unimi/dsi/util/AbstractPrefixMap.java
index 3f77792..3a53229 100644
--- a/src/it/unimi/dsi/util/AbstractPrefixMap.java
+++ b/src/it/unimi/dsi/util/AbstractPrefixMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,10 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.Serializable;
+
 import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
 import it.unimi.dsi.fastutil.objects.AbstractObject2ObjectFunction;
 import it.unimi.dsi.fastutil.objects.AbstractObjectList;
@@ -27,8 +29,6 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectFunction;
 import it.unimi.dsi.fastutil.objects.ObjectList;
 import it.unimi.dsi.lang.MutableString;
 
-import java.io.Serializable;
-
 /** An abstract implementation of a prefix map.
  *
  * <p>This class provides the full serives of a {@link PrefixMap} by implementing just
@@ -105,7 +105,7 @@ public abstract class AbstractPrefixMap extends AbstractObject2LongFunction<Char
 
 			@Override
 			public boolean containsKey(final Object o) {
-				Interval interval = (Interval)o;
+				final Interval interval = (Interval)o;
 				return interval != Intervals.EMPTY_INTERVAL && interval.left >= 0 && interval.right < AbstractPrefixMap.this.size();
 			}
 
@@ -126,7 +126,7 @@ public abstract class AbstractPrefixMap extends AbstractObject2LongFunction<Char
 				return AbstractPrefixMap.this.size();
 			}
 			@Override
-			public MutableString get(int index) {
+			public MutableString get(final int index) {
 				return getTerm(index, new MutableString());
 			}
 		};
diff --git a/src/it/unimi/dsi/util/BloomFilter.java b/src/it/unimi/dsi/util/BloomFilter.java
index 3513f13..75bf9fb 100644
--- a/src/it/unimi/dsi/util/BloomFilter.java
+++ b/src/it/unimi/dsi/util/BloomFilter.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
-import it.unimi.dsi.bits.Fast;
-import it.unimi.dsi.fastutil.Size64;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.io.FastBufferedReader;
-import it.unimi.dsi.lang.MutableString;
-import it.unimi.dsi.logging.ProgressLogger;
+package it.unimi.dsi.util;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -48,6 +41,13 @@ import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 import com.martiansoftware.jsap.stringparsers.IntSizeStringParser;
 
+import it.unimi.dsi.bits.Fast;
+import it.unimi.dsi.fastutil.Size64;
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.io.FastBufferedReader;
+import it.unimi.dsi.lang.MutableString;
+import it.unimi.dsi.logging.ProgressLogger;
+
 /** A Bloom filter.
  *
  * <P>Instances of this class represent a set of elements (with false positives) using a Bloom
@@ -475,19 +475,19 @@ public class BloomFilter<T> implements Serializable, Size64 {
 					new UnflaggedOption("precision", JSAP.INTEGER_PARSER, JSAP.NO_DEFAULT, JSAP.REQUIRED, JSAP.NOT_GREEDY, "The precision of the filter.")
 		});
 
-		JSAPResult jsapResult = jsap.parse(arg);
+		final JSAPResult jsapResult = jsap.parse(arg);
 		if (jsap.messagePrinted()) return;
 
 		final int bufferSize = jsapResult.getInt("bufferSize");
 		final String filterName = jsapResult.getString("bloomFilter");
 		final Charset encoding = (Charset)jsapResult.getObject("encoding");
 
-		BloomFilter<Void> filter = BloomFilter.create(jsapResult.getInt("size"), jsapResult.getInt("precision"));
+		final BloomFilter<Void> filter = BloomFilter.create(jsapResult.getInt("size"), jsapResult.getInt("precision"));
 		final ProgressLogger pl = new ProgressLogger();
 		pl.itemsName = "terms";
 		pl.start("Reading terms...");
-		MutableString s = new MutableString();
-		FastBufferedReader reader = new FastBufferedReader(new InputStreamReader(System.in, encoding), bufferSize);
+		final MutableString s = new MutableString();
+		final FastBufferedReader reader = new FastBufferedReader(new InputStreamReader(System.in, encoding), bufferSize);
 		while(reader.readLine(s) != null) {
 			filter.add(s);
 			pl.lightUpdate();
diff --git a/src/it/unimi/dsi/util/ByteBufferLongBigList.java b/src/it/unimi/dsi/util/ByteBufferLongBigList.java
index b34f925..3d2f3bf 100644
--- a/src/it/unimi/dsi/util/ByteBufferLongBigList.java
+++ b/src/it/unimi/dsi/util/ByteBufferLongBigList.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.DataOutput;
 import java.io.IOException;
 import java.nio.ByteBuffer;
diff --git a/src/it/unimi/dsi/util/CircularCharArrayBuffer.java b/src/it/unimi/dsi/util/CircularCharArrayBuffer.java
index 2d2967f..3e99a00 100644
--- a/src/it/unimi/dsi/util/CircularCharArrayBuffer.java
+++ b/src/it/unimi/dsi/util/CircularCharArrayBuffer.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.util.Arrays;
 
 /** A circular char buffer that can be used to implement a sliding
@@ -46,7 +46,7 @@ public class CircularCharArrayBuffer {
 	 *
 	 * @param maxChar the buffer size.
 	 */
-	public CircularCharArrayBuffer(int maxChar) {
+	public CircularCharArrayBuffer(final int maxChar) {
 		buffer = new char[maxChar];
 		if (DEBUG) Arrays.fill(buffer, ' ');
 	}
@@ -58,7 +58,7 @@ public class CircularCharArrayBuffer {
 	 * @param offset the starting point.
 	 * @param length the (maximum) number of characters to be copied.
 	 */
-	public void add(char[] b, int offset, int length) {
+	public void add(final char[] b, int offset, final int length) {
 		if (buffer.length == 0) return;
 		int toBeCopied = length;
 		if (DEBUG) System.out.println("Called add(" + new String(b, offset, toBeCopied) + ")");
@@ -67,7 +67,7 @@ public class CircularCharArrayBuffer {
 			toBeCopied = buffer.length;
 		}
 		// Now length contains the number of bytes to be _really_ copied
-		int toEnd = Math.min(toBeCopied, buffer.length - (start + len) % buffer.length);
+		final int toEnd = Math.min(toBeCopied, buffer.length - (start + len) % buffer.length);
 		// toEnd is the number of bytes that are free from the first free position to the end of the buffer
 		System.arraycopy(b, offset, buffer, (start + len) % buffer.length, toEnd);
 		if (toBeCopied > toEnd) {
@@ -88,10 +88,10 @@ public class CircularCharArrayBuffer {
 	 * @param offset the starting index where copy should start from.
 	 * @param length the maximum number of characters to be copied.
 	 */
-	public void toCharArray(char[] b, int offset, int length) {
+	public void toCharArray(final char[] b, final int offset, final int length) {
 		if (buffer.length == 0) return;
-		int t = Math.min(length, len);
-		int toEnd = Math.min(t, buffer.length - start);
+		final int t = Math.min(length, len);
+		final int toEnd = Math.min(t, buffer.length - start);
 		System.arraycopy(buffer, start, b, offset, toEnd);
 		if (toEnd < t) System.arraycopy(buffer, 0, b, offset + toEnd, t - toEnd);
 	}
@@ -100,7 +100,7 @@ public class CircularCharArrayBuffer {
 	 *
 	 * @param b the buffer where the content is to be copied.
 	 */
-	public void toCharArray(char[] b) {
+	public void toCharArray(final char[] b) {
 		toCharArray(b, 0, b.length);
 	}
 
@@ -109,7 +109,7 @@ public class CircularCharArrayBuffer {
 	 * @return a copy of the buffer content.
 	 */
 	public char[] toCharArray() {
-		char[] b = new char[size()];
+		final char[] b = new char[size()];
 		toCharArray(b);
 		return b;
 	}
diff --git a/src/it/unimi/dsi/util/FrontCodedStringList.java b/src/it/unimi/dsi/util/FrontCodedStringList.java
index 5982889..6a71a13 100644
--- a/src/it/unimi/dsi/util/FrontCodedStringList.java
+++ b/src/it/unimi/dsi/util/FrontCodedStringList.java
@@ -1,3 +1,23 @@
+/*
+ * DSI utilities
+ *
+ * Copyright (C) 2002-2020 Sebastiano Vigna
+ *
+ *  This library is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU Lesser General Public License as published by the Free
+ *  Software Foundation; either version 3 of the License, or (at your option)
+ *  any later version.
+ *
+ *  This library is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 package it.unimi.dsi.util;
 
 import java.io.IOException;
@@ -24,26 +44,6 @@ import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 import com.martiansoftware.jsap.stringparsers.IntSizeStringParser;
 
-/*
- * DSI utilities
- *
- * Copyright (C) 2002-2020 Sebastiano Vigna
- *
- *  This library is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU Lesser General Public License as published by the Free
- *  Software Foundation; either version 3 of the License, or (at your option)
- *  any later version.
- *
- *  This library is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-
 import it.unimi.dsi.fastutil.bytes.ByteArrayFrontCodedList;
 import it.unimi.dsi.fastutil.chars.CharArrayFrontCodedList;
 import it.unimi.dsi.fastutil.io.BinIO;
diff --git a/src/it/unimi/dsi/util/HyperLogLogCounterArray.java b/src/it/unimi/dsi/util/HyperLogLogCounterArray.java
index 21cf099..203a72d 100644
--- a/src/it/unimi/dsi/util/HyperLogLogCounterArray.java
+++ b/src/it/unimi/dsi/util/HyperLogLogCounterArray.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,14 +18,16 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
 import it.unimi.dsi.Util;
 import it.unimi.dsi.bits.Fast;
 import it.unimi.dsi.bits.LongArrayBitVector;
 import it.unimi.dsi.fastutil.longs.LongBigList;
 
-import java.io.Serializable;
-import java.util.Arrays;
-
 /**
  * An array of approximate sets each represented using a HyperLogLog counter.
  *
@@ -95,7 +95,7 @@ public class HyperLogLogCounterArray implements Serializable {
 	/** A seed for hashing. */
 	protected long seed;
 	/** The mask OR'd with the output of the hash function so that {@link Long#numberOfTrailingZeros(long)} does not return too large a value. */
-	private long sentinelMask;
+	private final long sentinelMask;
 	/** Whether counters are aligned to longwords. */
 	protected final boolean longwordAligned;
 	/** A mask for the residual bits of a counter (the {@link #counterSize} <code>%</code> {@link Long#SIZE} lowest bits). */
@@ -254,7 +254,7 @@ public class HyperLogLogCounterArray implements Serializable {
 
 	/** Clears all registers. */
 	public void clear() {
-		for(long[] a: bits) Arrays.fill(a, 0);
+		for(final long[] a: bits) Arrays.fill(a, 0);
 	}
 
 	private final static long jenkins(final long x, final long seed) {
@@ -521,8 +521,8 @@ public class HyperLogLogCounterArray implements Serializable {
 			}
 
 			if (ASSERTS) {
-				LongArrayBitVector aa = LongArrayBitVector.wrap(source);
-				LongArrayBitVector bb = LongArrayBitVector.wrap(dest);
+				final LongArrayBitVector aa = LongArrayBitVector.wrap(source);
+				final LongArrayBitVector bb = LongArrayBitVector.wrap(dest);
 				for(int i = 0; i < counterSize; i++) assert aa.getBoolean(offset + i) == bb.getBoolean(offset + i);
 			}
 		}
@@ -598,7 +598,7 @@ public class HyperLogLogCounterArray implements Serializable {
 			final LongBigList a = LongArrayBitVector.wrap(x).asLongBigList(registerSize);
 			final LongBigList b = LongArrayBitVector.wrap(y).asLongBigList(registerSize);
 			for(int i = 0; i < m; i++) {
-				long pos = (i + 1) * (long)registerSize - 1;
+				final long pos = (i + 1) * (long)registerSize - 1;
 				assert (b.getLong(i) < a.getLong(i)) == ((accumulator[(int)(pos / Long.SIZE)] & 1L << pos % Long.SIZE) != 0);
 			}
 		}
@@ -616,8 +616,8 @@ public class HyperLogLogCounterArray implements Serializable {
 
 		if (ASSERTS) {
 			final long[] t = x.clone();
-			LongBigList a = LongArrayBitVector.wrap(t).asLongBigList(registerSize);
-			LongBigList b = LongArrayBitVector.wrap(y).asLongBigList(registerSize);
+			final LongBigList a = LongArrayBitVector.wrap(t).asLongBigList(registerSize);
+			final LongBigList b = LongArrayBitVector.wrap(y).asLongBigList(registerSize);
 			for(int i = 0; i < Long.SIZE * l / registerSize; i++) a.set(i, Math.max(a.getLong(i), b.getLong(i)));
 			// Note: this must be kept in sync with the line computing the result.
 			for(int i = l; i-- != 0;) assert t[i] == (~mask[i] & x[i] | mask[i] & y[i]);
diff --git a/src/it/unimi/dsi/util/ImmutableBinaryTrie.java b/src/it/unimi/dsi/util/ImmutableBinaryTrie.java
index 08e7f18..56de0ff 100644
--- a/src/it/unimi/dsi/util/ImmutableBinaryTrie.java
+++ b/src/it/unimi/dsi/util/ImmutableBinaryTrie.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,12 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.ListIterator;
+
 import it.unimi.dsi.bits.BitVector;
 import it.unimi.dsi.bits.LongArrayBitVector;
 import it.unimi.dsi.bits.TransformationStrategy;
@@ -29,10 +33,6 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList;
 import it.unimi.dsi.fastutil.objects.ObjectList;
 import it.unimi.dsi.lang.MutableString;
 
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.ListIterator;
-
 
 /** An immutable implementation of binary tries.
  *
@@ -165,14 +165,15 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 
 		if (elements.size() == 0) return null;
 
-		BitVector first = elements.get(0), curr;
+		final BitVector first = elements.get(0);
+		BitVector curr;
 		int prefix = (int) first.length(), change = -1, j;
 
 		// We rule out the case of a single word (it would work anyway, but it's faster)
 		if (elements.size() == 1) return new Node(pos < prefix ? LongArrayBitVector.copy(first.subVector(pos, prefix)) : null, size++);
 
 		// 	Find maximum common prefix. change records the point of change (for splitting the word set).
-		for(ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
+		for(final ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
 			curr = i.next();
 
 			if (curr.length() < prefix) prefix = (int) curr.length();
@@ -189,7 +190,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 			// and explicitly search for the actual change point, which is the first
 			// word with prefix-th bit true.
 			change = 1;
-			for(ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
+			for(final ListIterator<LongArrayBitVector> i = elements.listIterator(1); i.hasNext();) {
 				curr = i.next();
 				if (curr.getBoolean(prefix)) break;
 				change++;
@@ -231,7 +232,8 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 
 			path = n.path;
 			if (path != null) {
-				int minLength = Math.min(length - pos, n.pathLength), i;
+				final int minLength = Math.min(length - pos, n.pathLength);
+				int i;
 				for(i = 0; i < minLength; i++) if (word.getBoolean(pos + i) != get(path, i)) break;
 				// Incompatible with current path.
 				if (i < minLength) return -1;
@@ -318,7 +320,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 			path = n.path;
 
 			if (path != null) {
-				int maxLength = Math.min(length - pos, n.pathLength);
+				final int maxLength = Math.min(length - pos, n.pathLength);
 				int i;
 				for(i = 0; i < maxLength; i++) if (word.getBoolean(pos + i) != get(path, i)) break;
 				// Incompatible with current path--we return the empty interval.
@@ -436,7 +438,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 			}
 
 			if (path != null) {
-				int maxLength = Math.min(length - pos, n.pathLength);
+				final int maxLength = Math.min(length - pos, n.pathLength);
 				int i;
 				for(i = 0; i < maxLength; i++) if (mismatch = (word.getBoolean(pos + i) != get(path, i))) break;
 
@@ -635,7 +637,7 @@ public class ImmutableBinaryTrie<T> extends AbstractObject2LongFunction<T> imple
 
 	@Override
 	public String toString() {
-		MutableString s = new MutableString();
+		final MutableString s = new MutableString();
 		recToString(root, new MutableString(), s, new MutableString(), 0);
 		return s.toString();
 	}
diff --git a/src/it/unimi/dsi/util/ImmutableExternalPrefixMap.java b/src/it/unimi/dsi/util/ImmutableExternalPrefixMap.java
index e6f2f7a..991abc0 100644
--- a/src/it/unimi/dsi/util/ImmutableExternalPrefixMap.java
+++ b/src/it/unimi/dsi/util/ImmutableExternalPrefixMap.java
@@ -1,3 +1,23 @@
+/*
+ * DSI utilities
+ *
+ * Copyright (C) 2005-2020 Sebastiano Vigna
+ *
+ *  This library is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU Lesser General Public License as published by the Free
+ *  Software Foundation; either version 3 of the License, or (at your option)
+ *  any later version.
+ *
+ *  This library is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 package it.unimi.dsi.util;
 
 import java.io.File;
@@ -29,26 +49,6 @@ import com.martiansoftware.jsap.Switch;
 import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
-/*
- * DSI utilities
- *
- * Copyright (C) 2005-2020 Sebastiano Vigna
- *
- *  This library is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU Lesser General Public License as published by the Free
- *  Software Foundation; either version 3 of the License, or (at your option)
- *  any later version.
- *
- *  This library is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-
 import it.unimi.dsi.bits.BitVector;
 import it.unimi.dsi.bits.PrefixCoderTransformationStrategy;
 import it.unimi.dsi.compression.Decoder;
diff --git a/src/it/unimi/dsi/util/Interval.java b/src/it/unimi/dsi/util/Interval.java
index 083bbf1..d3b97fc 100644
--- a/src/it/unimi/dsi/util/Interval.java
+++ b/src/it/unimi/dsi/util/Interval.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,7 +18,13 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static it.unimi.dsi.util.Intervals.EMPTY_INTERVAL;
+
+import java.io.Serializable;
+import java.util.NoSuchElementException;
+
 import it.unimi.dsi.fastutil.ints.AbstractIntSortedSet;
 import it.unimi.dsi.fastutil.ints.IntBidirectionalIterator;
 import it.unimi.dsi.fastutil.ints.IntComparator;
@@ -29,9 +33,6 @@ import it.unimi.dsi.fastutil.ints.IntIterators;
 import it.unimi.dsi.fastutil.ints.IntSet;
 import it.unimi.dsi.fastutil.ints.IntSortedSet;
 
-import java.io.Serializable;
-import java.util.NoSuchElementException;
-
 
 /** An interval of integers. An interval is defined
  *  by two integers, called its {@link #left} and {@link #right}
@@ -327,18 +328,18 @@ public final class Interval extends AbstractIntSortedSet implements IntSortedSet
 		if (o instanceof Interval)
 			return ((Interval)o).left == left && ((Interval)o).right == right;
 		else if (o instanceof IntSortedSet) { // For sorted sets, we require the same order
-			IntSortedSet s = (IntSortedSet) o;
+			final IntSortedSet s = (IntSortedSet) o;
 			if (s.size() != length()) return false;
 			int n = length();
-			IntIterator i = iterator(), j = s.iterator();
+			final IntIterator i = iterator(), j = s.iterator();
 			while(n-- != 0) if (i.nextInt() != j.nextInt()) return false;
 			return true;
 		}
 		else if (o instanceof IntSet) { // For sets, we just require the same elements
-			IntSet s = (IntSet) o;
+			final IntSet s = (IntSet) o;
 			if (s.size() != length()) return false;
 			int n = length();
-			IntIterator i = iterator();
+			final IntIterator i = iterator();
 			while(n-- != 0) if (! s.contains(i.nextInt())) return false;
 			return true;
 		}
diff --git a/src/it/unimi/dsi/util/Intervals.java b/src/it/unimi/dsi/util/Intervals.java
index 2220137..d5a5c8b 100644
--- a/src/it/unimi/dsi/util/Intervals.java
+++ b/src/it/unimi/dsi/util/Intervals.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.util.Comparator;
 
 
diff --git a/src/it/unimi/dsi/util/KahanSummation.java b/src/it/unimi/dsi/util/KahanSummation.java
index b5434b1..b8ee471 100644
--- a/src/it/unimi/dsi/util/KahanSummation.java
+++ b/src/it/unimi/dsi/util/KahanSummation.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * Copyright (C) 2011-2020 Sebastiano Vigna
  *
@@ -18,6 +16,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 /** <a href="http://en.wikipedia.org/wiki/Kahan_summation_algorithm">Kahan's
  * summation algorithm</a> encapsulated in an object.  */
 
diff --git a/src/it/unimi/dsi/util/LiterallySignedStringMap.java b/src/it/unimi/dsi/util/LiterallySignedStringMap.java
index 7a072a1..862daa5 100644
--- a/src/it/unimi/dsi/util/LiterallySignedStringMap.java
+++ b/src/it/unimi/dsi/util/LiterallySignedStringMap.java
@@ -1,22 +1,3 @@
-package it.unimi.dsi.util;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.nio.charset.Charset;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.martiansoftware.jsap.FlaggedOption;
-import com.martiansoftware.jsap.JSAP;
-import com.martiansoftware.jsap.JSAPException;
-import com.martiansoftware.jsap.JSAPResult;
-import com.martiansoftware.jsap.Parameter;
-import com.martiansoftware.jsap.SimpleJSAP;
-import com.martiansoftware.jsap.Switch;
-import com.martiansoftware.jsap.UnflaggedOption;
-import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
-
 /*
  * DSI utilities
  *
@@ -37,6 +18,24 @@ import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.nio.charset.Charset;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.martiansoftware.jsap.FlaggedOption;
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+import com.martiansoftware.jsap.JSAPResult;
+import com.martiansoftware.jsap.Parameter;
+import com.martiansoftware.jsap.SimpleJSAP;
+import com.martiansoftware.jsap.Switch;
+import com.martiansoftware.jsap.UnflaggedOption;
+import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
 import it.unimi.dsi.fastutil.io.BinIO;
 import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
diff --git a/src/it/unimi/dsi/util/LongInterval.java b/src/it/unimi/dsi/util/LongInterval.java
index 9ea0d21..69b87f7 100644
--- a/src/it/unimi/dsi/util/LongInterval.java
+++ b/src/it/unimi/dsi/util/LongInterval.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,7 +18,13 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static it.unimi.dsi.util.LongIntervals.EMPTY_INTERVAL;
+
+import java.io.Serializable;
+import java.util.NoSuchElementException;
+
 import it.unimi.dsi.fastutil.longs.AbstractLongSortedSet;
 import it.unimi.dsi.fastutil.longs.LongBidirectionalIterator;
 import it.unimi.dsi.fastutil.longs.LongComparator;
@@ -29,9 +33,6 @@ import it.unimi.dsi.fastutil.longs.LongIterators;
 import it.unimi.dsi.fastutil.longs.LongSet;
 import it.unimi.dsi.fastutil.longs.LongSortedSet;
 
-import java.io.Serializable;
-import java.util.NoSuchElementException;
-
 
 
 /** An interval of longs. See {@link Interval} for details. */
@@ -322,18 +323,18 @@ public final class LongInterval extends AbstractLongSortedSet implements LongSor
 		if (o instanceof LongInterval)
 			return ((LongInterval)o).left == left && ((LongInterval)o).right == right;
 		else if (o instanceof LongSortedSet) { // For sorted sets, we require the same order
-			LongSortedSet s = (LongSortedSet) o;
+			final LongSortedSet s = (LongSortedSet) o;
 			if (s.size() != length()) return false;
 			long n = length();
-			LongIterator i = iterator(), j = s.iterator();
+			final LongIterator i = iterator(), j = s.iterator();
 			while(n-- != 0) if (i.nextLong() != j.nextLong()) return false;
 			return true;
 		}
 		else if (o instanceof LongSet) { // For sets, we just require the same elements
-			LongSet s = (LongSet) o;
+			final LongSet s = (LongSet) o;
 			if (s.size() != length()) return false;
 			long n = length();
-			LongIterator i = iterator();
+			final LongIterator i = iterator();
 			while(n-- != 0) if (! s.contains(i.nextLong())) return false;
 			return true;
 		}
diff --git a/src/it/unimi/dsi/util/LongIntervals.java b/src/it/unimi/dsi/util/LongIntervals.java
index f43aa0c..b926a36 100644
--- a/src/it/unimi/dsi/util/LongIntervals.java
+++ b/src/it/unimi/dsi/util/LongIntervals.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.util.Comparator;
 
 
diff --git a/src/it/unimi/dsi/util/PermutedFrontCodedStringList.java b/src/it/unimi/dsi/util/PermutedFrontCodedStringList.java
index c4b89ed..b411e47 100644
--- a/src/it/unimi/dsi/util/PermutedFrontCodedStringList.java
+++ b/src/it/unimi/dsi/util/PermutedFrontCodedStringList.java
@@ -1,16 +1,3 @@
-package it.unimi.dsi.util;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-import com.martiansoftware.jsap.JSAP;
-import com.martiansoftware.jsap.JSAPException;
-import com.martiansoftware.jsap.JSAPResult;
-import com.martiansoftware.jsap.Parameter;
-import com.martiansoftware.jsap.SimpleJSAP;
-import com.martiansoftware.jsap.Switch;
-import com.martiansoftware.jsap.UnflaggedOption;
-
 /*
  * DSI utilities
  *
@@ -31,6 +18,19 @@ import com.martiansoftware.jsap.UnflaggedOption;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+import com.martiansoftware.jsap.JSAPResult;
+import com.martiansoftware.jsap.Parameter;
+import com.martiansoftware.jsap.SimpleJSAP;
+import com.martiansoftware.jsap.Switch;
+import com.martiansoftware.jsap.UnflaggedOption;
+
 import it.unimi.dsi.Util;
 import it.unimi.dsi.fastutil.ints.IntIterators;
 import it.unimi.dsi.fastutil.ints.IntListIterator;
diff --git a/src/it/unimi/dsi/util/PrefixMap.java b/src/it/unimi/dsi/util/PrefixMap.java
index 92ca247..c873e7c 100644
--- a/src/it/unimi/dsi/util/PrefixMap.java
+++ b/src/it/unimi/dsi/util/PrefixMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import it.unimi.dsi.fastutil.objects.Object2ObjectFunction;
 
 /** A map from prefixes to string intervals (and possibly <i>vice versa</i>).
diff --git a/src/it/unimi/dsi/util/Properties.java b/src/it/unimi/dsi/util/Properties.java
index 3d2228c..9e5972e 100644
--- a/src/it/unimi/dsi/util/Properties.java
+++ b/src/it/unimi/dsi/util/Properties.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -103,8 +103,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 	// Methods to add properties represented by primitive types easily
 
 	public void addProperties(final String key, final String[] s) {
-		for(int i = 0; i < s.length; i++)
-			super.addProperty(key, s[i]);
+		for (final String element : s) super.addProperty(key, element);
 	}
 
 	public void addProperty(final String key, final boolean b) {
@@ -174,8 +173,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 	// Same methods, but with Enum keys
 
 	public void addProperties(final Enum<?> key, final String[] s) {
-		for(int i = 0; i < s.length; i++)
-			super.addProperty(key.name().toLowerCase(), s[i]);
+		for (final String element : s) super.addProperty(key.name().toLowerCase(), element);
 	}
 
 	public void addProperty(final Enum<?> key, final boolean b) {
@@ -252,11 +250,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getProperty(key.name().toLowerCase());
 	}
 
-	public void addProperty(final Enum<?> key, Object arg) {
+	public void addProperty(final Enum<?> key, final Object arg) {
 		addProperty(key.name().toLowerCase(), arg);
 	}
 
-	public BigDecimal getBigDecimal(final Enum<?> key, BigDecimal arg) {
+	public BigDecimal getBigDecimal(final Enum<?> key, final BigDecimal arg) {
 		return getBigDecimal(key.name().toLowerCase(), arg);
 	}
 
@@ -264,7 +262,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getBigDecimal(key.name().toLowerCase());
 	}
 
-	public BigInteger getBigInteger(final Enum<?> key, BigInteger arg) {
+	public BigInteger getBigInteger(final Enum<?> key, final BigInteger arg) {
 		return getBigInteger(key.name().toLowerCase(), arg);
 	}
 
@@ -272,11 +270,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getBigInteger(key.name().toLowerCase());
 	}
 
-	public boolean getBoolean(final Enum<?> key, boolean arg) {
+	public boolean getBoolean(final Enum<?> key, final boolean arg) {
 		return getBoolean(key.name().toLowerCase(), arg);
 	}
 
-	public Boolean getBoolean(final Enum<?> key, Boolean arg) {
+	public Boolean getBoolean(final Enum<?> key, final Boolean arg) {
 		return getBoolean(key.name().toLowerCase(), arg);
 	}
 
@@ -284,11 +282,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getBoolean(key.name().toLowerCase());
 	}
 
-	public byte getByte(final Enum<?> key, byte arg) {
+	public byte getByte(final Enum<?> key, final byte arg) {
 		return getByte(key.name().toLowerCase(), arg);
 	}
 
-	public Byte getByte(final Enum<?> key, Byte arg) {
+	public Byte getByte(final Enum<?> key, final Byte arg) {
 		return getByte(key.name().toLowerCase(), arg);
 	}
 
@@ -296,11 +294,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getByte(key.name().toLowerCase());
 	}
 
-	public double getDouble(final Enum<?> key, double arg) {
+	public double getDouble(final Enum<?> key, final double arg) {
 		return getDouble(key.name().toLowerCase(), arg);
 	}
 
-	public Double getDouble(final Enum<?> key, Double arg) {
+	public Double getDouble(final Enum<?> key, final Double arg) {
 		return getDouble(key.name().toLowerCase(), arg);
 	}
 
@@ -308,11 +306,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getDouble(key.name().toLowerCase());
 	}
 
-	public float getFloat(final Enum<?> key, float arg) {
+	public float getFloat(final Enum<?> key, final float arg) {
 		return getFloat(key.name().toLowerCase(), arg);
 	}
 
-	public Float getFloat(final Enum<?> key, Float arg) {
+	public Float getFloat(final Enum<?> key, final Float arg) {
 		return getFloat(key.name().toLowerCase(), arg);
 	}
 
@@ -320,7 +318,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getFloat(key.name().toLowerCase());
 	}
 
-	public int getInt(final Enum<?> key, int arg) {
+	public int getInt(final Enum<?> key, final int arg) {
 		return getInt(key.name().toLowerCase(), arg);
 	}
 
@@ -328,7 +326,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getInt(key.name().toLowerCase());
 	}
 
-	public Integer getInteger(final Enum<?> key, Integer arg) {
+	public Integer getInteger(final Enum<?> key, final Integer arg) {
 		return getInteger(key.name().toLowerCase(), arg);
 	}
 
@@ -336,7 +334,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getKeys(key.name().toLowerCase());
 	}
 
-	public List<Object> getList(final Enum<?> key, List<Object> arg) {
+	public List<Object> getList(final Enum<?> key, final List<Object> arg) {
 		return getList(key.name().toLowerCase(), arg);
 	}
 
@@ -344,11 +342,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getList(key.name().toLowerCase());
 	}
 
-	public long getLong(final Enum<?> key, long arg) {
+	public long getLong(final Enum<?> key, final long arg) {
 		return getLong(key.name().toLowerCase(), arg);
 	}
 
-	public Long getLong(final Enum<?> key, Long arg) {
+	public Long getLong(final Enum<?> key, final Long arg) {
 		return getLong(key.name().toLowerCase(), arg);
 	}
 
@@ -356,7 +354,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getLong(key.name().toLowerCase());
 	}
 
-	public java.util.Properties getProperties(final Enum<?> key, java.util.Properties arg) {
+	public java.util.Properties getProperties(final Enum<?> key, final java.util.Properties arg) {
 		return getProperties(key.name().toLowerCase(), arg);
 	}
 
@@ -364,11 +362,11 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getProperties(key.name().toLowerCase());
 	}
 
-	public short getShort(final Enum<?> key, short arg) {
+	public short getShort(final Enum<?> key, final short arg) {
 		return getShort(key.name().toLowerCase(), arg);
 	}
 
-	public Short getShort(final Enum<?> key, Short arg) {
+	public Short getShort(final Enum<?> key, final Short arg) {
 		return getShort(key.name().toLowerCase(), arg);
 	}
 
@@ -376,7 +374,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getShort(key.name().toLowerCase());
 	}
 
-	public String getString(final Enum<?> key, String arg) {
+	public String getString(final Enum<?> key, final String arg) {
 		return getString(key.name().toLowerCase(), arg);
 	}
 
@@ -388,7 +386,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		return getStringArray(key.name().toLowerCase());
 	}
 
-	public void setProperty(final Enum<?> key, Object arg) {
+	public void setProperty(final Enum<?> key, final Object arg) {
 		setProperty(key.name().toLowerCase(), arg);
 	}
 
@@ -404,7 +402,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 	@Override
 	public int hashCode() {
 		int h = 0;
-		for(Iterator<?> i = getKeys(); i.hasNext();) h = h * 31 + Arrays.hashCode(getStringArray((String)i.next()));
+		for(final Iterator<?> i = getKeys(); i.hasNext();) h = h * 31 + Arrays.hashCode(getStringArray((String)i.next()));
 		return h;
 	}
 
@@ -425,13 +423,13 @@ public class Properties extends PropertiesConfiguration implements Serializable
 	public boolean equals(final Object o) {
 		if (! (o instanceof Properties)) return false;
 		final Properties p = (Properties)o;
-		for(Iterator<?> i = getKeys(); i.hasNext();) {
-			String key = (String)i.next();
-			String[] value = p.getStringArray(key);
+		for(final Iterator<?> i = getKeys(); i.hasNext();) {
+			final String key = (String)i.next();
+			final String[] value = p.getStringArray(key);
 			if (value == null || ! Arrays.equals(getStringArray(key), value)) return false;
 		}
 
-		for(Iterator<?> i = p.getKeys(); i.hasNext();)
+		for(final Iterator<?> i = p.getKeys(); i.hasNext();)
 			if (getStringArray((String)i.next()) == null) return false;
 
 		return true;
@@ -442,7 +440,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		try {
 			save(s);
 		}
-		catch (ConfigurationException e) {
+		catch (final ConfigurationException e) {
 			throw new RuntimeException(e);
 		}
 	}
@@ -452,7 +450,7 @@ public class Properties extends PropertiesConfiguration implements Serializable
 		try {
 			load(s);
 		}
-		catch (ConfigurationException e) {
+		catch (final ConfigurationException e) {
 			throw new RuntimeException(e);
 		}
 	}
diff --git a/src/it/unimi/dsi/util/SemiExternalGammaList.java b/src/it/unimi/dsi/util/SemiExternalGammaList.java
index 36058b0..3373da6 100644
--- a/src/it/unimi/dsi/util/SemiExternalGammaList.java
+++ b/src/it/unimi/dsi/util/SemiExternalGammaList.java
@@ -1,9 +1,7 @@
-package it.unimi.dsi.util;
-
-/*		 
+/*
  * DSI utilities
  *
- * Copyright (C) 2007-2020 Sebastiano Vigna 
+ * Copyright (C) 2007-2020 Sebastiano Vigna
  *
  *  This library is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU Lesser General Public License as published by the Free
@@ -20,18 +18,20 @@ package it.unimi.dsi.util;
  *
  */
 
-import it.unimi.dsi.fastutil.longs.AbstractLongList;
-import it.unimi.dsi.io.InputBitStream;
-import it.unimi.dsi.io.OutputBitStream;
+package it.unimi.dsi.util;
 
 import java.io.EOFException;
 import java.io.IOException;
 
-/** Provides semi-external random access to a list of {@linkplain OutputBitStream#writeGamma(int) &gamma;-encoded} integers. 
- * 
+import it.unimi.dsi.fastutil.longs.AbstractLongList;
+import it.unimi.dsi.io.InputBitStream;
+import it.unimi.dsi.io.OutputBitStream;
+
+/** Provides semi-external random access to a list of {@linkplain OutputBitStream#writeGamma(int) &gamma;-encoded} integers.
+ *
  * <p>This class is a semi-external {@link it.unimi.dsi.fastutil.longs.LongList} that
  * MG4J uses to access files containing frequencies.
- *  
+ *
  * <p>Instead, this class accesses frequencies in their
  * compressed forms, and provides entry points for random access to each long. At construction
  * time, entry points are computed with a certain <em>step</em>, which is the number of longs
@@ -39,14 +39,14 @@ import java.io.IOException;
  * be necessary to read to access a given long.
  *
  * <p><strong>Warning:</strong> This class is not thread safe, and needs to be synchronised to be used in a
- * multithreaded environment. 
+ * multithreaded environment.
  *
  * @author Fabien Campagne
  * @author Sebastiano Vigna
  */
 public class SemiExternalGammaList extends AbstractLongList {
 	public final static int DEFAULT_STEP = 128;
-	
+
 	/** Position in the offset stream for each random access entry point (one each {@link #step} elements). */
 	private final long[] position;
 	/** Stream over the compressed offset information. */
@@ -57,7 +57,7 @@ public class SemiExternalGammaList extends AbstractLongList {
 	private final int numLongs;
 
 	/** Creates a new semi-external list.
-	 * 
+	 *
 	 * @param longs a bit stream containing &gamma;-encoded longs.
 	 * @param step the step used to build random-access entry points, or -1 to get {@link #DEFAULT_STEP}.
 	 * @param numLongs the overall number of offsets (i.e., the number of terms).
@@ -65,7 +65,7 @@ public class SemiExternalGammaList extends AbstractLongList {
 
 	public SemiExternalGammaList(final InputBitStream longs, final int step, final int numLongs) throws IOException {
 		this.step = step == -1 ? DEFAULT_STEP : step;
-		int slots = (numLongs + this.step - 1) / this.step;
+		final int slots = (numLongs + this.step - 1) / this.step;
 		this.position = new long[slots];
 		this.numLongs = numLongs;
 		this.ibs = longs;
@@ -78,19 +78,19 @@ public class SemiExternalGammaList extends AbstractLongList {
 		}
 	}
 
-	
+
 	/** Creates a new semi-external list.
-	 * 
+	 *
 	 * <p>This quick-and-dirty constructor estimates the number of longs by checking
 	 * for an {@link EOFException}.
-	 * 
+	 *
 	 * @param longs a bit stream containing &gamma;-encoded longs.
 	 */
-	
+
 	public SemiExternalGammaList(final InputBitStream longs) throws IOException {
 		this(longs, DEFAULT_STEP, estimateNumberOfLongs(longs));
 	}
-		
+
 	private static int estimateNumberOfLongs(final InputBitStream longs) {
 		int numLongs = 0;
 		try {
@@ -100,14 +100,14 @@ public class SemiExternalGammaList extends AbstractLongList {
 				numLongs++;
 			}
 		}
-		catch(EOFException e) {
+		catch(final EOFException e) {
 			return numLongs;
 		}
-		catch (IOException e) {
+		catch (final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	@Override
 	public final long getLong(final int index) {
 		if (index < 0 || index >= numLongs) throw new IndexOutOfBoundsException(Integer.toString(index));
@@ -118,11 +118,11 @@ public class SemiExternalGammaList extends AbstractLongList {
 			ibs.skipGammas(k);
 			return ibs.readLongGamma();
 		}
-		catch(IOException e) {
+		catch(final IOException e) {
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	@Override
 	public int size() {
 		return numLongs;
diff --git a/src/it/unimi/dsi/util/ShiftAddXorSignedStringMap.java b/src/it/unimi/dsi/util/ShiftAddXorSignedStringMap.java
index 3fbb69a..ddefbfb 100644
--- a/src/it/unimi/dsi/util/ShiftAddXorSignedStringMap.java
+++ b/src/it/unimi/dsi/util/ShiftAddXorSignedStringMap.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,17 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
-
-import it.unimi.dsi.bits.LongArrayBitVector;
-import it.unimi.dsi.fastutil.Function;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.fastutil.longs.LongBigList;
-import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
-import it.unimi.dsi.fastutil.objects.Object2LongFunction;
-import it.unimi.dsi.fastutil.objects.ObjectList;
-import it.unimi.dsi.io.FastBufferedReader;
-import it.unimi.dsi.io.LineIterator;
-import it.unimi.dsi.lang.MutableString;
+package it.unimi.dsi.util;
 
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -54,6 +42,17 @@ import com.martiansoftware.jsap.Switch;
 import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
+import it.unimi.dsi.bits.LongArrayBitVector;
+import it.unimi.dsi.fastutil.Function;
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.fastutil.longs.LongBigList;
+import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
+import it.unimi.dsi.fastutil.objects.Object2LongFunction;
+import it.unimi.dsi.fastutil.objects.ObjectList;
+import it.unimi.dsi.io.FastBufferedReader;
+import it.unimi.dsi.io.LineIterator;
+import it.unimi.dsi.lang.MutableString;
+
 /** A string map based on a function signed using Shift-Add-Xor hashes.
  *
  * <p>A minimal perfect hash function maps a set of string to an initial segment of the natural
@@ -124,7 +123,8 @@ public class ShiftAddXorSignedStringMap extends AbstractObject2LongFunction<Char
 	}
 
 	private long signature(final CharSequence s) {
-		int i, l = s.length();
+		int i;
+		final int l = s.length();
 		long h = 42;
 
 		for (i = l; i-- != 0;) h ^= (h << 5) + s.charAt(i) + (h >>> 2);
@@ -137,21 +137,21 @@ public class ShiftAddXorSignedStringMap extends AbstractObject2LongFunction<Char
 	}
 
 	@Override
-	public long getLong(Object o) {
+	public long getLong(final Object o) {
 		final CharSequence s = (CharSequence)o;
 		final long index = function.getLong(s);
 		return checkSignature(s, index) ? index : defRetValue;
 	}
 
 	@Override
-	public Long get(Object o) {
+	public Long get(final Object o) {
 		final CharSequence s = (CharSequence)o;
 		final long index = function.getLong(s);
 		return checkSignature(s, index) ? Long.valueOf(index) : null;
 	}
 
 	@Override
-	public boolean containsKey(Object o) {
+	public boolean containsKey(final Object o) {
 		final CharSequence s = (CharSequence)o;
 		return checkSignature(s, function.getLong(s));
 	}
@@ -180,7 +180,7 @@ public class ShiftAddXorSignedStringMap extends AbstractObject2LongFunction<Char
 			new UnflaggedOption("stringFile", JSAP.STRING_PARSER, JSAP.NO_DEFAULT, JSAP.NOT_REQUIRED, JSAP.NOT_GREEDY, "Read strings from this file instead of standard input."),
 		});
 
-		JSAPResult jsapResult = jsap.parse(arg);
+		final JSAPResult jsapResult = jsap.parse(arg);
 		if (jsap.messagePrinted()) return;
 
 		final int bufferSize = jsapResult.getInt("bufferSize");
diff --git a/src/it/unimi/dsi/util/SplitMix64Random.java b/src/it/unimi/dsi/util/SplitMix64Random.java
index 9c70b1d..bbd6c14 100644
--- a/src/it/unimi/dsi/util/SplitMix64Random.java
+++ b/src/it/unimi/dsi/util/SplitMix64Random.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,14 @@ package it.unimi.dsi.util;
  *
  */
 
-
-import it.unimi.dsi.Util;
-import it.unimi.dsi.fastutil.HashCommon;
+package it.unimi.dsi.util;
 
 import java.util.Random;
 import java.util.SplittableRandom;
 
+import it.unimi.dsi.Util;
+import it.unimi.dsi.fastutil.HashCommon;
+
 /** A fast, high-quality, non-splittable version of the <span style="font-variant: small-caps">SplitMix</span>
  * pseudorandom number generator used by {@link SplittableRandom}. Due to
  * the fixed increment constant and to different strategies in generating finite ranges, the methods of this generator
diff --git a/src/it/unimi/dsi/util/SplitMix64RandomGenerator.java b/src/it/unimi/dsi/util/SplitMix64RandomGenerator.java
index 057082d..ac20b57 100644
--- a/src/it/unimi/dsi/util/SplitMix64RandomGenerator.java
+++ b/src/it/unimi/dsi/util/SplitMix64RandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,17 +18,18 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import java.io.Serializable;
 import java.util.SplittableRandom;
 
+import org.apache.commons.math3.random.AbstractRandomGenerator;
+import org.apache.commons.math3.random.RandomGenerator;
+
 import it.unimi.dsi.Util;
 import it.unimi.dsi.fastutil.HashCommon;
 import it.unimi.dsi.logging.ProgressLogger;
 
-import org.apache.commons.math3.random.AbstractRandomGenerator;
-import org.apache.commons.math3.random.RandomGenerator;
-
 /** A fast, high-quality, non-splittable version of the <span style="font-variant: small-caps">SplitMix</span>
  * pseudorandom number generator used by {@link SplittableRandom}. Due to
  * the fixed increment constant and to different strategies in generating finite ranges, the methods of this generator
@@ -162,11 +161,11 @@ public class SplitMix64RandomGenerator extends AbstractRandomGenerator implement
 		x = state;
 	}
 
-	public static void main(String[] arg) {
-		long n = Long.parseLong(arg[0]);
+	public static void main(final String[] arg) {
+		final long n = Long.parseLong(arg[0]);
 		long x = 0;
-		ProgressLogger pl = new ProgressLogger();
-		SplitMix64RandomGenerator r = new SplitMix64RandomGenerator();
+		final ProgressLogger pl = new ProgressLogger();
+		final SplitMix64RandomGenerator r = new SplitMix64RandomGenerator();
 		for(int k = 10; k-- != 0;) {
 			pl.start("Measuring...");
 			for (long i = n; i-- != 0;)
diff --git a/src/it/unimi/dsi/util/StringMap.java b/src/it/unimi/dsi/util/StringMap.java
index 467f18f..3e301f3 100644
--- a/src/it/unimi/dsi/util/StringMap.java
+++ b/src/it/unimi/dsi/util/StringMap.java
@@ -1,7 +1,3 @@
-package it.unimi.dsi.util;
-
-import java.io.Serializable;
-
 /*
  * DSI utilities
  *
@@ -22,6 +18,10 @@ import java.io.Serializable;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.Serializable;
+
 import it.unimi.dsi.fastutil.objects.Object2LongFunction;
 import it.unimi.dsi.fastutil.objects.ObjectList;
 
diff --git a/src/it/unimi/dsi/util/StringMaps.java b/src/it/unimi/dsi/util/StringMaps.java
index f27b738..0835356 100644
--- a/src/it/unimi/dsi/util/StringMaps.java
+++ b/src/it/unimi/dsi/util/StringMaps.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,15 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
+import java.io.Serializable;
+
 import it.unimi.dsi.fastutil.objects.Object2ObjectFunction;
 import it.unimi.dsi.fastutil.objects.Object2ObjectFunctions;
 import it.unimi.dsi.fastutil.objects.ObjectList;
 import it.unimi.dsi.fastutil.objects.ObjectLists;
 
-import java.io.Serializable;
-
 /** A class providing static methods and objects that do useful things with {@linkplain StringMap string maps}
  * and {@linkplain PrefixMap prefix maps}.
  *
@@ -62,35 +62,35 @@ public class StringMaps {
 		}
 
 		@Override
-		public synchronized long getLong(Object s) {
+		public synchronized long getLong(final Object s) {
 			return stringMap.getLong(s);
 		}
 
 		@SuppressWarnings("deprecation")
 		@Override
-		public synchronized Long get(Object key) {
+		public synchronized Long get(final Object key) {
 			return stringMap.get(key);
 		}
 
 		@Override
-		public synchronized long put(CharSequence key, long value) {
+		public synchronized long put(final CharSequence key, final long value) {
 			return stringMap.put(key, value);
 		}
 
 		@SuppressWarnings("deprecation")
 		@Override
-		public synchronized Long put(CharSequence key, Long value) {
+		public synchronized Long put(final CharSequence key, final Long value) {
 			return stringMap.put(key, value);
 		}
 
 		@SuppressWarnings("deprecation")
 		@Override
-		public synchronized Long remove(Object key) {
+		public synchronized Long remove(final Object key) {
 			return stringMap.remove(key);
 		}
 
 		@Override
-		public synchronized long removeLong(Object key) {
+		public synchronized long removeLong(final Object key) {
 			return stringMap.removeLong(key);
 		}
 
@@ -100,7 +100,7 @@ public class StringMaps {
 		}
 
 		@Override
-		public synchronized boolean containsKey(Object key) {
+		public synchronized boolean containsKey(final Object key) {
 			return stringMap.containsKey(key);
 		}
 
@@ -110,7 +110,7 @@ public class StringMaps {
 		}
 
 		@Override
-		public synchronized void defaultReturnValue(long rv) {
+		public synchronized void defaultReturnValue(final long rv) {
 			stringMap.defaultReturnValue(rv);
 		}
 	}
diff --git a/src/it/unimi/dsi/util/TernaryIntervalSearchTree.java b/src/it/unimi/dsi/util/TernaryIntervalSearchTree.java
index dac4d12..a9122c8 100644
--- a/src/it/unimi/dsi/util/TernaryIntervalSearchTree.java
+++ b/src/it/unimi/dsi/util/TernaryIntervalSearchTree.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,10 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.io.FastBufferedReader;
-import it.unimi.dsi.lang.MutableString;
-import it.unimi.dsi.logging.ProgressLogger;
+package it.unimi.dsi.util;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -41,6 +36,11 @@ import com.martiansoftware.jsap.SimpleJSAP;
 import com.martiansoftware.jsap.UnflaggedOption;
 import com.martiansoftware.jsap.stringparsers.ForNameStringParser;
 
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.io.FastBufferedReader;
+import it.unimi.dsi.lang.MutableString;
+import it.unimi.dsi.logging.ProgressLogger;
+
 /** Ternary interval search trees.
  *
  * <p><em>Ternary search trees</em> are a data structure used to store words over an alphabet; they are
@@ -303,7 +303,7 @@ public class TernaryIntervalSearchTree extends AbstractPrefixMap implements Seri
 	}
 
 	@Override
-	public boolean containsKey(Object o) {
+	public boolean containsKey(final Object o) {
 		return getIndex((CharSequence)o) != -1;
 	}
 
@@ -444,12 +444,12 @@ public class TernaryIntervalSearchTree extends AbstractPrefixMap implements Seri
 				new UnflaggedOption("tree", JSAP.STRING_PARSER, JSAP.NO_DEFAULT, JSAP.REQUIRED, JSAP.NOT_GREEDY, "The filename for the serialised tree.")
 		});
 
-		JSAPResult jsapResult = jsap.parse(arg);
+		final JSAPResult jsapResult = jsap.parse(arg);
 		if (jsap.messagePrinted()) return;
 
 		final TernaryIntervalSearchTree tree = new TernaryIntervalSearchTree();
 
-		MutableString term = new MutableString();
+		final MutableString term = new MutableString();
 		final ProgressLogger pl = new ProgressLogger();
 		pl.itemsName = "terms";
 		@SuppressWarnings("resource")
diff --git a/src/it/unimi/dsi/util/TextPattern.java b/src/it/unimi/dsi/util/TextPattern.java
index e4deff6..d89331b 100644
--- a/src/it/unimi/dsi/util/TextPattern.java
+++ b/src/it/unimi/dsi/util/TextPattern.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import it.unimi.dsi.bits.Fast;
 import it.unimi.dsi.fastutil.chars.CharList;
 import it.unimi.dsi.lang.MutableString;
diff --git a/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandom.java b/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandom.java
index 375f8ac..942c58f 100644
--- a/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandom.java
+++ b/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.security.SecureRandom;
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGenerator.java b/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGenerator.java
index 0e8d00b..2e5e251 100644
--- a/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.security.SecureRandom;
 import java.util.Random;
diff --git a/src/it/unimi/dsi/util/XoRoShiRo128PlusRandom.java b/src/it/unimi/dsi/util/XoRoShiRo128PlusRandom.java
index 1c201e7..d1477fc 100644
--- a/src/it/unimi/dsi/util/XoRoShiRo128PlusRandom.java
+++ b/src/it/unimi/dsi/util/XoRoShiRo128PlusRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.security.SecureRandom;
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoRoShiRo128PlusRandomGenerator.java b/src/it/unimi/dsi/util/XoRoShiRo128PlusRandomGenerator.java
index abc9587..e2a8983 100644
--- a/src/it/unimi/dsi/util/XoRoShiRo128PlusRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XoRoShiRo128PlusRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.security.SecureRandom;
 import java.util.Random;
diff --git a/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandom.java b/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandom.java
index b9630a4..7180de5 100644
--- a/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandom.java
+++ b/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.security.SecureRandom;
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGenerator.java b/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGenerator.java
index ab9cdb9..ee5f25b 100644
--- a/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.security.SecureRandom;
 import java.util.Random;
diff --git a/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandom.java b/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandom.java
index ab84329..b3aa516 100644
--- a/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandom.java
+++ b/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.security.SecureRandom;
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGenerator.java b/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGenerator.java
index 298e20c..0bb6820 100644
--- a/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.security.SecureRandom;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoShiRo256PlusRandom.java b/src/it/unimi/dsi/util/XoShiRo256PlusRandom.java
index 7d14eac..a4ec8a6 100644
--- a/src/it/unimi/dsi/util/XoShiRo256PlusRandom.java
+++ b/src/it/unimi/dsi/util/XoShiRo256PlusRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.security.SecureRandom;
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoShiRo256PlusRandomGenerator.java b/src/it/unimi/dsi/util/XoShiRo256PlusRandomGenerator.java
index 57386bf..ba1c1a1 100644
--- a/src/it/unimi/dsi/util/XoShiRo256PlusRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XoShiRo256PlusRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.security.SecureRandom;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoShiRo256StarStarRandom.java b/src/it/unimi/dsi/util/XoShiRo256StarStarRandom.java
index 7bf9f1b..565f07a 100644
--- a/src/it/unimi/dsi/util/XoShiRo256StarStarRandom.java
+++ b/src/it/unimi/dsi/util/XoShiRo256StarStarRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.security.SecureRandom;
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XoShiRo256StarStarRandomGenerator.java b/src/it/unimi/dsi/util/XoShiRo256StarStarRandomGenerator.java
index 5d56d83..974da04 100644
--- a/src/it/unimi/dsi/util/XoShiRo256StarStarRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XoShiRo256StarStarRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.security.SecureRandom;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XorShift1024StarPhiRandom.java b/src/it/unimi/dsi/util/XorShift1024StarPhiRandom.java
index 82a25d0..89ec59a 100644
--- a/src/it/unimi/dsi/util/XorShift1024StarPhiRandom.java
+++ b/src/it/unimi/dsi/util/XorShift1024StarPhiRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import java.security.SecureRandom;
 import java.util.Random;
diff --git a/src/it/unimi/dsi/util/XorShift1024StarPhiRandomGenerator.java b/src/it/unimi/dsi/util/XorShift1024StarPhiRandomGenerator.java
index f8eea87..fdf2e4c 100644
--- a/src/it/unimi/dsi/util/XorShift1024StarPhiRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XorShift1024StarPhiRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import java.io.Serializable;
 import java.security.SecureRandom;
diff --git a/src/it/unimi/dsi/util/XorShift1024StarRandom.java b/src/it/unimi/dsi/util/XorShift1024StarRandom.java
index 1974532..5980546 100644
--- a/src/it/unimi/dsi/util/XorShift1024StarRandom.java
+++ b/src/it/unimi/dsi/util/XorShift1024StarRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.util.Random;
 
 import it.unimi.dsi.Util;
diff --git a/src/it/unimi/dsi/util/XorShift1024StarRandomGenerator.java b/src/it/unimi/dsi/util/XorShift1024StarRandomGenerator.java
index 36640b1..ff23ebc 100644
--- a/src/it/unimi/dsi/util/XorShift1024StarRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XorShift1024StarRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.io.Serializable;
 import java.util.Random;
 
diff --git a/src/it/unimi/dsi/util/XorShift128PlusRandom.java b/src/it/unimi/dsi/util/XorShift128PlusRandom.java
index 7d10a0b..12a821b 100644
--- a/src/it/unimi/dsi/util/XorShift128PlusRandom.java
+++ b/src/it/unimi/dsi/util/XorShift128PlusRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import java.util.Random;
 import java.util.SplittableRandom;
diff --git a/src/it/unimi/dsi/util/XorShift128PlusRandomGenerator.java b/src/it/unimi/dsi/util/XorShift128PlusRandomGenerator.java
index 55c66d5..7d156fd 100644
--- a/src/it/unimi/dsi/util/XorShift128PlusRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XorShift128PlusRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import java.util.Random;
 import java.util.SplittableRandom;
 
diff --git a/src/it/unimi/dsi/util/XorShift64StarRandom.java b/src/it/unimi/dsi/util/XorShift64StarRandom.java
index 73e8e57..4f09e37 100644
--- a/src/it/unimi/dsi/util/XorShift64StarRandom.java
+++ b/src/it/unimi/dsi/util/XorShift64StarRandom.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -21,11 +19,13 @@ package it.unimi.dsi.util;
  */
 
 
-import it.unimi.dsi.Util;
-import it.unimi.dsi.fastutil.HashCommon;
+package it.unimi.dsi.util;
 
 import java.util.Random;
 
+import it.unimi.dsi.Util;
+import it.unimi.dsi.fastutil.HashCommon;
+
 /** A fast, good-quality {@linkplain Random pseudorandom number generator}
  * that combines George Marsaglia's Xorshift
  * generators (described in <a href="http://www.jstatsoft.org/v08/i14/paper/">&ldquo;Xorshift RNGs&rdquo;</a>,
@@ -54,7 +54,7 @@ public class XorShift64StarRandom extends Random {
 	}
 
 	@Override
-	protected int next(int bits) {
+	protected int next(final int bits) {
 		return (int)(nextLong() & (1L << bits) - 1);
 	}
 
diff --git a/src/it/unimi/dsi/util/XorShift64StarRandomGenerator.java b/src/it/unimi/dsi/util/XorShift64StarRandomGenerator.java
index 26b0e86..fcb453b 100644
--- a/src/it/unimi/dsi/util/XorShift64StarRandomGenerator.java
+++ b/src/it/unimi/dsi/util/XorShift64StarRandomGenerator.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,14 +18,15 @@ package it.unimi.dsi.util;
  *
  */
 
-
-import it.unimi.dsi.Util;
-import it.unimi.dsi.fastutil.HashCommon;
+package it.unimi.dsi.util;
 
 import java.util.Random;
 
 import org.apache.commons.math3.random.AbstractRandomGenerator;
 
+import it.unimi.dsi.Util;
+import it.unimi.dsi.fastutil.HashCommon;
+
 /** A fast, good-quality {@linkplain Random pseudorandom number generator}
  * that combines George Marsaglia's Xorshift
  * generators (described in <a href="http://www.jstatsoft.org/v08/i14/paper/">&ldquo;Xorshift RNGs&rdquo;</a>,
diff --git a/src/it/unimi/dsi/util/concurrent/ReorderingBlockingQueue.java b/src/it/unimi/dsi/util/concurrent/ReorderingBlockingQueue.java
index ccf38d7..7dc8bb8 100644
--- a/src/it/unimi/dsi/util/concurrent/ReorderingBlockingQueue.java
+++ b/src/it/unimi/dsi/util/concurrent/ReorderingBlockingQueue.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util.concurrent;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util.concurrent;
  *
  */
 
+package it.unimi.dsi.util.concurrent;
+
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.ReentrantLock;
 
diff --git a/test/it/unimi/dsi/UtilTest.java b/test/it/unimi/dsi/UtilTest.java
index d44c7d5..23cee51 100644
--- a/test/it/unimi/dsi/UtilTest.java
+++ b/test/it/unimi/dsi/UtilTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi;
  *
  */
 
+package it.unimi.dsi;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
diff --git a/test/it/unimi/dsi/big/util/FrontCodedStringBigListTest.java b/test/it/unimi/dsi/big/util/FrontCodedStringBigListTest.java
index dfa83ea..492c823 100644
--- a/test/it/unimi/dsi/big/util/FrontCodedStringBigListTest.java
+++ b/test/it/unimi/dsi/big/util/FrontCodedStringBigListTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import static org.junit.Assert.assertEquals;
 
 import java.nio.charset.StandardCharsets;
diff --git a/test/it/unimi/dsi/big/util/ImmutableBinaryTrieTest.java b/test/it/unimi/dsi/big/util/ImmutableBinaryTrieTest.java
index 7efa0d8..2b1d1af 100644
--- a/test/it/unimi/dsi/big/util/ImmutableBinaryTrieTest.java
+++ b/test/it/unimi/dsi/big/util/ImmutableBinaryTrieTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
 
 import static org.junit.Assert.assertEquals;
 
@@ -35,11 +34,11 @@ import it.unimi.dsi.fastutil.objects.ObjectLists;
 
 public class ImmutableBinaryTrieTest {
 
-	public void testImmutableBinaryTrie(List<String> strings) {
+	public void testImmutableBinaryTrie(final List<String> strings) {
 		final ObjectArrayList<BitVector> vectors = new ObjectArrayList<>();
-		for(int i = 0; i < strings.size(); i++) {
-			final BitVector v = LongArrayBitVector.ofLength(strings.get(i).length());
-			for(int j = 0; j < strings.get(i).length(); j++) if (strings.get(i).charAt(j) == '1') v.set(j);
+		for (final String string : strings) {
+			final BitVector v = LongArrayBitVector.ofLength(string.length());
+			for(int j = 0; j < string.length(); j++) if (string.charAt(j) == '1') v.set(j);
 			vectors.add(v);
 		}
 
diff --git a/test/it/unimi/dsi/big/util/ImmutableExternalPrefixMapTest.java b/test/it/unimi/dsi/big/util/ImmutableExternalPrefixMapTest.java
index 7fcd0fe..7fe6401 100644
--- a/test/it/unimi/dsi/big/util/ImmutableExternalPrefixMapTest.java
+++ b/test/it/unimi/dsi/big/util/ImmutableExternalPrefixMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,15 +18,11 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
-import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet;
-import it.unimi.dsi.fastutil.objects.ObjectSets;
-import it.unimi.dsi.util.LongInterval;
-import it.unimi.dsi.util.LongIntervals;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -37,37 +31,40 @@ import java.util.Iterator;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
+import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet;
+import it.unimi.dsi.fastutil.objects.ObjectSets;
+import it.unimi.dsi.util.LongInterval;
+import it.unimi.dsi.util.LongIntervals;
+
 public class ImmutableExternalPrefixMapTest {
 
 	public void testLargeSet(final int blockSize) throws IOException {
-		Collection<String> c = Arrays.asList(TernaryIntervalSearchTreeTest.WORDS);
+		final Collection<String> c = Arrays.asList(TernaryIntervalSearchTreeTest.WORDS);
 		TernaryIntervalSearchTree t = new TernaryIntervalSearchTree(c);
 		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(c, blockSize);
 
-		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++) assertTrue(TernaryIntervalSearchTreeTest.WORDS[i], d.containsKey(TernaryIntervalSearchTreeTest.WORDS[i]));
+		for (final String element : TernaryIntervalSearchTreeTest.WORDS) assertTrue(element, d.containsKey(element));
 		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++) assertEquals(TernaryIntervalSearchTreeTest.WORDS[i], d.list().get(i).toString());
-		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++)
-			for(int j = 0; j < TernaryIntervalSearchTreeTest.WORDS[i].length(); j++) {
-				String s = TernaryIntervalSearchTreeTest.WORDS[i].substring(0, j + 1);
-				assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
-				s = s + " ";
-				assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
-				s = s.substring(0, s.length() - 1) + "~";
-				assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
-			}
+		for (final String element : TernaryIntervalSearchTreeTest.WORDS) for(int j = 0; j < element.length(); j++) {
+			String s = element.substring(0, j + 1);
+			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
+			s = s + " ";
+			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
+			s = s.substring(0, s.length() - 1) + "~";
+			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
+		}
 
 		// Similar tests, using all prefixes of all strings in WORDS.
-		Collection<String> p = new ObjectRBTreeSet<>();
-		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++)
-			for(int j = 0; j < TernaryIntervalSearchTreeTest.WORDS[i].length(); j++)
-				p.add(TernaryIntervalSearchTreeTest.WORDS[i].substring(0, j + 1));
+		final Collection<String> p = new ObjectRBTreeSet<>();
+		for (final String element : TernaryIntervalSearchTreeTest.WORDS) for(int j = 0; j < element.length(); j++)
+			p.add(element.substring(0, j + 1));
 
 		d = new ImmutableExternalPrefixMap(p, blockSize);
 		t = new TernaryIntervalSearchTree(p);
 
 		int j = 0;
-		for(Iterator<String> i = p.iterator(); i.hasNext();) {
-			String s = i.next();
+		for (final String s : p) {
 			assertTrue(s, d.containsKey(s));
 			assertEquals(s, d.list().get(j++).toString());
 			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
@@ -111,13 +108,13 @@ public class ImmutableExternalPrefixMapTest {
 
 	@Test
 	public void testPrefixes() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ba", "bb" }));
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ba", "bb" }));
 		assertEquals(LongInterval.valueOf(1, 2), d.getInterval("b"));
 	}
 
 	@Test
 	public void testLargeRootPrefixes() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "aab", "aac", "aad" }), 2);
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "aab", "aac", "aad" }), 2);
 		assertEquals(LongInterval.valueOf(0, 2), d.getInterval(""));
 		assertEquals(LongInterval.valueOf(0, 2), d.getInterval("aa"));
 		assertEquals(LongInterval.valueOf(0, 2), d.getInterval("aa"));
@@ -125,7 +122,7 @@ public class ImmutableExternalPrefixMapTest {
 
 	@Test
 	public void testSingleton() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(ObjectSets.singleton("a"), 1024);
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(ObjectSets.singleton("a"), 1024);
 		assertTrue(d.containsKey("a"));
 		assertFalse(d.containsKey("b"));
 		assertFalse(d.containsKey("0"));
@@ -133,7 +130,7 @@ public class ImmutableExternalPrefixMapTest {
 
 	@Test
 	public void testPrefixOutOfRange() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ac" }));
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ac" }));
 		assertEquals(LongIntervals.EMPTY_INTERVAL, d.getInterval("b"));
 		assertEquals(LongInterval.valueOf(0, 1), d.getInterval("a"));
 	}
diff --git a/test/it/unimi/dsi/big/util/LiterallySignedStringMapTest.java b/test/it/unimi/dsi/big/util/LiterallySignedStringMapTest.java
index 695d186..3c02cff 100644
--- a/test/it/unimi/dsi/big/util/LiterallySignedStringMapTest.java
+++ b/test/it/unimi/dsi/big/util/LiterallySignedStringMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,8 +18,18 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
 
 import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.junit.Test;
+
 import it.unimi.dsi.fastutil.Hash;
 import it.unimi.dsi.fastutil.Size64;
 import it.unimi.dsi.fastutil.io.BinIO;
@@ -32,28 +40,20 @@ import it.unimi.dsi.fastutil.objects.ObjectBigLists;
 import it.unimi.dsi.lang.MutableString;
 import it.unimi.dsi.util.FrontCodedStringList;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.junit.Test;
-
 public class LiterallySignedStringMapTest {
 
 	private final static class CharSequenceStrategy implements Hash.Strategy<CharSequence>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public boolean equals(CharSequence a, CharSequence b) {
+		public boolean equals(final CharSequence a, final CharSequence b) {
 			if (a == null) return b == null;
 			if (b == null) return false;
 			return a.toString().equals(b.toString());
 		}
 
 		@Override
-		public int hashCode(CharSequence o) {
+		public int hashCode(final CharSequence o) {
 			return o.toString().hashCode();
 		}
 	}
@@ -61,13 +61,13 @@ public class LiterallySignedStringMapTest {
 	@Test
 	public void testNumbers() throws IOException, ClassNotFoundException {
 		for(int n = 10; n < 10000; n *= 10) {
-			String[] s = new String[n];
+			final String[] s = new String[n];
 			for(int i = s.length; i-- != 0;) s[i] = Integer.toString(i);
 			Collections.shuffle(Arrays.asList(s));
 
-			FrontCodedStringList fcl = new FrontCodedStringList(Arrays.asList(s), 8, true);
+			final FrontCodedStringList fcl = new FrontCodedStringList(Arrays.asList(s), 8, true);
 			// Test with mph
-			Object2LongOpenCustomHashMap<CharSequence> mph = new Object2LongOpenCustomHashMap<>(new CharSequenceStrategy());
+			final Object2LongOpenCustomHashMap<CharSequence> mph = new Object2LongOpenCustomHashMap<>(new CharSequenceStrategy());
 			mph.defaultReturnValue(-1);
 			for(int i = 0; i < s.length; i++) mph.put(new MutableString(s[i]),  i);
 
@@ -76,7 +76,7 @@ public class LiterallySignedStringMapTest {
 			for(int i = s.length; i-- != 0;) assertEquals(i, map.getLong(s[i]));
 			for(int i = s.length + n; i-- != s.length;) assertEquals(-1, map.getLong(Integer.toString(i)));
 
-			File temp = File.createTempFile(getClass().getSimpleName(), "test");
+			final File temp = File.createTempFile(getClass().getSimpleName(), "test");
 			temp.deleteOnExit();
 			BinIO.storeObject(map, temp);
 			map = (LiterallySignedStringMap)BinIO.loadObject(temp);
@@ -90,23 +90,23 @@ public class LiterallySignedStringMapTest {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public long getLong(Object key) {
+		public long getLong(final Object key) {
 			try {
 				final long l = Long.parseLong(key.toString());
 				return l < 1L << 31 ? l : -1;
 			}
-			catch(Exception e) {
+			catch(final Exception e) {
 				return -1;
 			}
 		}
 
 		@Override
-		public boolean containsKey(Object key) {
+		public boolean containsKey(final Object key) {
 			try {
 				final long l = Long.parseLong(key.toString());
 				return l < 1L << 31;
 			}
-			catch(Exception e) {
+			catch(final Exception e) {
 				return false;
 			}
 		}
@@ -127,7 +127,7 @@ public class LiterallySignedStringMapTest {
 		new LiterallySignedStringMap(new LargeFunction(), new AbstractObjectBigList<MutableString>() {
 
 			@Override
-			public MutableString get(long index) {
+			public MutableString get(final long index) {
 				return new MutableString(Long.toString(index));
 			}
 
diff --git a/test/it/unimi/dsi/big/util/LongBigArraySignedStringMapTest.java b/test/it/unimi/dsi/big/util/LongBigArraySignedStringMapTest.java
index 840b466..3302263 100644
--- a/test/it/unimi/dsi/big/util/LongBigArraySignedStringMapTest.java
+++ b/test/it/unimi/dsi/big/util/LongBigArraySignedStringMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,10 +18,9 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.fastutil.longs.LongBigArrayBigList;
-import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
 
 import java.io.File;
 import java.io.IOException;
@@ -31,6 +28,10 @@ import java.util.Arrays;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.fastutil.longs.LongBigArrayBigList;
+import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
+
 public class LongBigArraySignedStringMapTest {
 
 	@SuppressWarnings("deprecation")
@@ -38,12 +39,12 @@ public class LongBigArraySignedStringMapTest {
 	public void testNumbers() throws IOException {
 
 		for(int width = 16; width <= Long.SIZE; width += 8) {
-			String[] s = new String[100000];
-			long[] v = new long[s.length];
+			final String[] s = new String[100000];
+			final long[] v = new long[s.length];
 			for(int i = s.length; i-- != 0;) s[(int)(v[i] = i)] = Integer.toString(i);
 
 			// Test with mph
-			Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
+			final Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
 			final long[][] signatures = LongBigListSignedStringMap.sign(Arrays.asList(s).iterator(), mph);
 
 			LongBigListSignedStringMap map = new LongBigListSignedStringMap(mph, LongBigArrayBigList.wrap(signatures));
@@ -51,7 +52,7 @@ public class LongBigArraySignedStringMapTest {
 			for(int i = s.length; i-- != 0;) assertEquals(i, map.getLong(Integer.toString(i)));
 			for(int i = s.length + 100; i-- != s.length;) assertEquals(-1, map.getLong(Integer.toString(i)));
 
-			File temp = File.createTempFile(getClass().getSimpleName(), "test");
+			final File temp = File.createTempFile(getClass().getSimpleName(), "test");
 			temp.deleteOnExit();
 
 			BinIO.storeLongs(signatures, temp);
@@ -70,18 +71,18 @@ public class LongBigArraySignedStringMapTest {
 	public void testSortedNumbers() throws IOException {
 
 		for(int width = 16; width <= Long.SIZE; width += 8) {
-			String[] s = new String[100000];
-			long[] v = new long[s.length];
+			final String[] s = new String[100000];
+			final long[] v = new long[s.length];
 			for(int i = s.length; i-- != 0;) s[(int)(v[i] = i)] = Integer.toString(i);
 
 			// Test with mph
-			Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
+			final Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
 
-			File temp = File.createTempFile(getClass().getSimpleName(), "test");
+			final File temp = File.createTempFile(getClass().getSimpleName(), "test");
 			temp.deleteOnExit();
 
 			LongBigListSignedStringMap.sign(Arrays.asList(s).iterator(), temp.toString());
-			LongBigListSignedStringMap map = new LongBigListSignedStringMap(mph, temp.toString());
+			final LongBigListSignedStringMap map = new LongBigListSignedStringMap(mph, temp.toString());
 
 			for(int i = s.length; i-- != 0;) assertEquals(i, map.getLong(Integer.toString(i)));
 			for(int i = s.length + 10000; i-- != s.length;) assertEquals(-1, map.getLong(Integer.toString(i)));
diff --git a/test/it/unimi/dsi/big/util/SemiExternalGammaBigListTest.java b/test/it/unimi/dsi/big/util/SemiExternalGammaBigListTest.java
index 1e9bebc..04b4537 100644
--- a/test/it/unimi/dsi/big/util/SemiExternalGammaBigListTest.java
+++ b/test/it/unimi/dsi/big/util/SemiExternalGammaBigListTest.java
@@ -1,9 +1,7 @@
-package it.unimi.dsi.big.util;
-
-/*		 
+/*
  * DSI utilities
  *
- * Copyright (C) 2002-2020 Sebastiano Vigna 
+ * Copyright (C) 2002-2020 Sebastiano Vigna
  *
  *  This library is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU Lesser General Public License as published by the Free
@@ -20,31 +18,34 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.longs.LongArrayList;
-import it.unimi.dsi.fastutil.longs.LongList;
-import it.unimi.dsi.io.InputBitStream;
-import it.unimi.dsi.io.OutputBitStream;
 
 import java.io.IOException;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.longs.LongArrayList;
+import it.unimi.dsi.fastutil.longs.LongList;
+import it.unimi.dsi.io.InputBitStream;
+import it.unimi.dsi.io.OutputBitStream;
+
 /**
  * @author Fabien Campagne
  * @author Sebastiano Vigna
  */
 public class SemiExternalGammaBigListTest {
 
-	private static InputBitStream buildInputStream(LongList longs) throws IOException {
-		byte[] array = new byte[longs.size() * 4];
+	private static InputBitStream buildInputStream(final LongList longs) throws IOException {
+		final byte[] array = new byte[longs.size() * 4];
 		@SuppressWarnings("resource")
+		final
 		OutputBitStream streamer = new OutputBitStream(array);
 		for (int i = 0; i < longs.size(); i++) streamer.writeLongGamma(longs.getLong(i));
-		int size = (int)(streamer.writtenBits() / 8) + ((streamer.writtenBits() % 8) == 0 ? 0 : 1);
-		byte[] smaller = new byte[size];
+		final int size = (int)(streamer.writtenBits() / 8) + ((streamer.writtenBits() % 8) == 0 ? 0 : 1);
+		final byte[] smaller = new byte[size];
 		System.arraycopy(array, 0, smaller, 0, size);
 
 		return new InputBitStream(smaller);
@@ -54,8 +55,8 @@ public class SemiExternalGammaBigListTest {
 	@Test
     public void testSemiExternalGammaBigListGammaCoding() throws IOException {
 
-		long[] longs = { 10, 300, 450, 650, 1000, 1290, 1699 };
-		LongList listLongs = new LongArrayList(longs);
+		final long[] longs = { 10, 300, 450, 650, 1000, 1290, 1699 };
+		final LongList listLongs = new LongArrayList(longs);
 
 		SemiExternalGammaBigList list = new SemiExternalGammaBigList(buildInputStream(listLongs), 1, listLongs.size());
 		for (long i = 0; i < longs.length; ++i) {
@@ -76,7 +77,7 @@ public class SemiExternalGammaBigListTest {
 		for (long i = 0; i < longs.length; ++i) {
 			assertEquals(("test failed for index: " + i), longs[(int) i], list.getLong(i));
 		}
-		
+
 		list = new SemiExternalGammaBigList(buildInputStream(listLongs), 8, listLongs.size());
 		for (long i = 0; i < longs.length; ++i) {
 			assertEquals(("test failed for index: " + i), longs[(int) i], list.getLong(i));
@@ -86,8 +87,8 @@ public class SemiExternalGammaBigListTest {
 	@Test
     public void testEmptySemiExternalGammaBigListGammaCoding() throws IOException {
 
-		long[] longs = {  };
-		LongList listOffsets = new LongArrayList(longs);
+		final long[] longs = {  };
+		final LongList listOffsets = new LongArrayList(longs);
 
 		new SemiExternalGammaBigList(buildInputStream(listOffsets), 1, listOffsets.size());
 		assertTrue(true);
diff --git a/test/it/unimi/dsi/big/util/ShiftAddXorSignedStringMapTest.java b/test/it/unimi/dsi/big/util/ShiftAddXorSignedStringMapTest.java
index f49e315..8d9c6a5 100644
--- a/test/it/unimi/dsi/big/util/ShiftAddXorSignedStringMapTest.java
+++ b/test/it/unimi/dsi/big/util/ShiftAddXorSignedStringMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,9 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.Size64;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
-import it.unimi.dsi.fastutil.objects.AbstractObjectBigList;
-import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,6 +28,12 @@ import java.util.Arrays;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.Size64;
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
+import it.unimi.dsi.fastutil.objects.AbstractObjectBigList;
+import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
+
 public class ShiftAddXorSignedStringMapTest {
 
 	@SuppressWarnings("deprecation")
@@ -40,18 +41,18 @@ public class ShiftAddXorSignedStringMapTest {
 	public void testNumbers() throws IOException, ClassNotFoundException {
 
 		for(int width = 16; width <= Long.SIZE; width += 8) {
-			String[] s = new String[1000];
-			long[] v = new long[s.length];
+			final String[] s = new String[1000];
+			final long[] v = new long[s.length];
 			for(int i = s.length; i-- != 0;) s[(int)(v[i] = i)] = Integer.toString(i);
 
 			// Test with mph
-			Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
+			final Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
 			ShiftAddXorSignedStringMap map = new ShiftAddXorSignedStringMap(Arrays.asList(s).iterator(), mph, width);
 
 			for(int i = s.length; i-- != 0;) assertEquals(i, map.getLong(Integer.toString(i)));
 			for(int i = s.length + 100; i-- != s.length;) assertEquals(-1, map.getLong(Integer.toString(i)));
 
-			File temp = File.createTempFile(getClass().getSimpleName(), "test");
+			final File temp = File.createTempFile(getClass().getSimpleName(), "test");
 			temp.deleteOnExit();
 			BinIO.storeObject(map, temp);
 			map = (ShiftAddXorSignedStringMap)BinIO.loadObject(temp);
@@ -66,23 +67,23 @@ public class ShiftAddXorSignedStringMapTest {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public long getLong(Object key) {
+		public long getLong(final Object key) {
 			try {
 				final long l = Long.parseLong((String)key);
 				return l < 1L << 31 ? l : -1;
 			}
-			catch(Exception e) {
+			catch(final Exception e) {
 				return -1;
 			}
 		}
 
 		@Override
-		public boolean containsKey(Object key) {
+		public boolean containsKey(final Object key) {
 			try {
 				final long l = Long.parseLong((String)key);
 				return l < 1L << 31;
 			}
-			catch(Exception e) {
+			catch(final Exception e) {
 				return false;
 			}
 		}
@@ -104,7 +105,7 @@ public class ShiftAddXorSignedStringMapTest {
 		new ShiftAddXorSignedStringMap(new AbstractObjectBigList<String>() {
 
 			@Override
-			public String get(long index) {
+			public String get(final long index) {
 				return Long.toString(index);
 			}
 
diff --git a/test/it/unimi/dsi/big/util/TernaryIntervalSearchTreeTest.java b/test/it/unimi/dsi/big/util/TernaryIntervalSearchTreeTest.java
index 826a7b0..383422e 100644
--- a/test/it/unimi/dsi/big/util/TernaryIntervalSearchTreeTest.java
+++ b/test/it/unimi/dsi/big/util/TernaryIntervalSearchTreeTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.big.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.big.util;
  *
  */
 
+package it.unimi.dsi.big.util;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/bits/AbstractBitVectorTest.java b/test/it/unimi/dsi/bits/AbstractBitVectorTest.java
index 83b0040..ef750d1 100644
--- a/test/it/unimi/dsi/bits/AbstractBitVectorTest.java
+++ b/test/it/unimi/dsi/bits/AbstractBitVectorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -34,12 +34,12 @@ public class AbstractBitVectorTest {
 		private long length = 129;
 
 		@Override
-		public boolean getBoolean(long index) { return index % 2 != 0; }
+		public boolean getBoolean(final long index) { return index % 2 != 0; }
 		@Override
 		public long length() { return length; }
 
 		@Override
-		public MinimalAlternatingBitVector length(long newLength) {
+		public MinimalAlternatingBitVector length(final long newLength) {
 			this.length  = newLength;
 			return this;
 		}
@@ -57,7 +57,7 @@ public class AbstractBitVectorTest {
 		try {
 			v.removeBoolean(0);
 		}
-		catch(UnsupportedOperationException e) {
+		catch(final UnsupportedOperationException e) {
 			ok = true;
 		}
 
@@ -67,7 +67,7 @@ public class AbstractBitVectorTest {
 		try {
 			v.set(0, 0);
 		}
-		catch(UnsupportedOperationException e) {
+		catch(final UnsupportedOperationException e) {
 			ok = true;
 		}
 
@@ -77,7 +77,7 @@ public class AbstractBitVectorTest {
 		try {
 			v.add(0, 0);
 		}
-		catch(UnsupportedOperationException e) {
+		catch(final UnsupportedOperationException e) {
 			ok = true;
 		}
 
@@ -89,7 +89,7 @@ public class AbstractBitVectorTest {
 		try {
 			v.size();
 		}
-		catch(IllegalStateException e) {
+		catch(final IllegalStateException e) {
 			ok = true;
 		}
 
@@ -99,7 +99,7 @@ public class AbstractBitVectorTest {
 		try {
 			v.asLongBigList(1).size();
 		}
-		catch(IllegalStateException e) {
+		catch(final IllegalStateException e) {
 			ok = true;
 		}
 
@@ -119,7 +119,7 @@ public class AbstractBitVectorTest {
 
 	@Test
 	public void testCount() {
-		MinimalAlternatingBitVector v = new MinimalAlternatingBitVector();
+		final MinimalAlternatingBitVector v = new MinimalAlternatingBitVector();
 		assertEquals(v.length() / 2, v.count());
 	}
 
@@ -135,7 +135,7 @@ public class AbstractBitVectorTest {
 
 	@Test
 	public void testCompareTo() {
-		MinimalAlternatingBitVector v = new MinimalAlternatingBitVector();
+		final MinimalAlternatingBitVector v = new MinimalAlternatingBitVector();
 		LongArrayBitVector w = LongArrayBitVector.copy(v);
 		assertEquals(0, w.compareTo(v));
 		assertEquals(0, v.compareTo(w));
@@ -152,7 +152,7 @@ public class AbstractBitVectorTest {
 
 	@Test
 	public void testSize64() {
-		MinimalAlternatingBitVector v = new MinimalAlternatingBitVector();
+		final MinimalAlternatingBitVector v = new MinimalAlternatingBitVector();
 		v.length(1L << 32);
 		assertEquals(1L << 32, v.size64());
 		assertEquals(1L << 31, ((Size64)v.asLongSet()).size64());
diff --git a/test/it/unimi/dsi/bits/BitVectorTestCase.java b/test/it/unimi/dsi/bits/BitVectorTestCase.java
index 48c4770..27d7d7b 100644
--- a/test/it/unimi/dsi/bits/BitVectorTestCase.java
+++ b/test/it/unimi/dsi/bits/BitVectorTestCase.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
@@ -219,7 +219,7 @@ public class BitVectorTestCase {
 
 		v.clear();
 		int[] bits = { 0,0,0,0,1,1,1,0,0,0,0,1,1,0,0 };
-		for(int i = 0; i < bits.length; i++) v.add(bits[i]);
+		for (final int bit : bits) v.add(bit);
 
 		LongArrayBitVector c = LongArrayBitVector.getInstance();
 		for(int i = 5; i < bits.length; i++) c.add(bits[i]);
@@ -229,7 +229,7 @@ public class BitVectorTestCase {
 
 		v.clear();
 		bits = new int[] { 0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0 };
-		for(int i = 0; i < bits.length; i++) v.add(bits[i]);
+		for (final int bit : bits) v.add(bit);
 		c = LongArrayBitVector.getInstance();
 		for(int i = 5; i < bits.length - 2; i++) c.add(bits[i]);
 
@@ -237,9 +237,9 @@ public class BitVectorTestCase {
 
 		assertEquals(v, v.copy());
 
-		long[] words = new long[] { 0xDEADBEEFDEADF00DL, 0xDEADBEEFDEADF00DL, 0xDEADBEEFDEADF00DL, };
-		long[] copyWords16 = new long[] { 0xF00DDEADBEEFDEADL, 0xF00DDEADBEEFDEADL, 0xBEEFDEADL };
-		long[] copyWords32 = new long[] { 0xDEADF00DDEADBEEFL, 0xDEADF00DDEADBEEFL };
+		final long[] words = new long[] { 0xDEADBEEFDEADF00DL, 0xDEADBEEFDEADF00DL, 0xDEADBEEFDEADF00DL, };
+		final long[] copyWords16 = new long[] { 0xF00DDEADBEEFDEADL, 0xF00DDEADBEEFDEADL, 0xBEEFDEADL };
+		final long[] copyWords32 = new long[] { 0xDEADF00DDEADBEEFL, 0xDEADF00DDEADBEEFL };
 
 		LongArrayBitVector.wrap(copyWords16, 64 * 2 + 32).equals(LongArrayBitVector.wrap(words, 64 * 3).copy(16, 16 + 64 * 2 + 32));
 		assertEquals(LongArrayBitVector.wrap(copyWords16, 64 * 2 + 32), LongArrayBitVector.wrap(words, 64 * 3).copy(16, 16 + 64 * 2 + 32));
@@ -264,13 +264,13 @@ public class BitVectorTestCase {
 		assertEquals(LongArrayBitVector.wrap(copyWords32, 64 * 1 + 32 + 1), LongArrayBitVector.wrap(words, 64 * 3).copy(32, 32 + 64 + 32 + 1));
 	}
 
-	public static void testBits(BitVector b) {
+	public static void testBits(final BitVector b) {
 		for(int i = 0; i < 100; i++) b.add(i % 2);
 		assertTrue(LongArrayBitVector.wrap(b.bits(), b.length()).toString(), Arrays.equals(new long[] { 0xAAAAAAAAAAAAAAAAL, 0x0000000AAAAAAAAAL }, b.bits()));
 	}
 
-	public static void testLongBigListView(BitVector b) {
-		LongBigList list = b.asLongBigList(10);
+	public static void testLongBigListView(final BitVector b) {
+		final LongBigList list = b.asLongBigList(10);
 		for(int i = 0; i < 100; i++) list.add(i);
 		for(int i = 0; i < 100; i++) assertEquals(i, list.getLong(i));
 
@@ -289,7 +289,7 @@ public class BitVectorTestCase {
 
 		list.size(100);
 		int k = 0;
-		LongBigListIterator i = list.listIterator();
+		final LongBigListIterator i = list.listIterator();
 		while(i.hasNext()) {
 			assertEquals(k, i.nextIndex());
 			assertEquals(++k, i.nextLong());
@@ -300,8 +300,8 @@ public class BitVectorTestCase {
 		}
 	}
 
-	public static void testLongSetView(BitVector b) {
-		LongSortedSet s = b.asLongSet();
+	public static void testLongSetView(final BitVector b) {
+		final LongSortedSet s = b.asLongSet();
 		assertNull(s.comparator());
 
 		for(int i = 0; i < 100; i++) s.add(i * 2);
@@ -352,7 +352,7 @@ public class BitVectorTestCase {
 
 	}
 
-	public static void testFirstLastPrefix(BitVector b) {
+	public static void testFirstLastPrefix(final BitVector b) {
 		b.clear();
 		b.length(60);
 		assertEquals(-1, b.firstOne());
@@ -484,10 +484,10 @@ public class BitVectorTestCase {
 		assertTrue(c.getBoolean(0));
 	}
 
-	public static void testLogicOperators(BitVector b) {
+	public static void testLogicOperators(final BitVector b) {
 		b.clear();
 		b.length(100);
-		BitVector c = b.copy();
+		final BitVector c = b.copy();
 		for(int i = 0; i < 50; i++) b.set(2 * i);
 		for(int i = 0; i < 50; i++) c.set(2 * i + 1);
 		BitVector r;
@@ -511,14 +511,14 @@ public class BitVectorTestCase {
 		for(int i = 0; i < 100; i++) assertFalse(r.getBoolean(i));
 	}
 
-	public static void testCount(BitVector b) {
+	public static void testCount(final BitVector b) {
 		b.clear();
 		b.length(100);
 		for(int i = 0; i < 50; i++) b.set(i * 2);
 		assertEquals(50, b.count());
 	}
 
-	public static void testSerialisation(BitVector b) throws IOException, ClassNotFoundException {
+	public static void testSerialisation(final BitVector b) throws IOException, ClassNotFoundException {
 		final File file = File.createTempFile(BitVectorTestCase.class.getSimpleName(), "test");
 		file.deleteOnExit();
 
@@ -538,8 +538,8 @@ public class BitVectorTestCase {
 		assertEquals(b, BinIO.loadObject(file));
 	}
 
-	public static void testReplace(BitVector b) {
-		Random r = new SplitMix64Random(1);
+	public static void testReplace(final BitVector b) {
+		final Random r = new SplitMix64Random(1);
 		LongArrayBitVector bv = LongArrayBitVector.getInstance(200);
 		for(int i = 0; i < 100; i++) bv.add(r.nextBoolean());
 		assertEquals(b.replace(bv), bv);
@@ -552,16 +552,16 @@ public class BitVectorTestCase {
 	}
 
 
-	public static void testAppend(BitVector b) {
+	public static void testAppend(final BitVector b) {
 		b.clear();
-		LongArrayBitVector v = LongArrayBitVector.ofLength(200);
+		final LongArrayBitVector v = LongArrayBitVector.ofLength(200);
 		for(int i = 0; i < 60; i++) v.set(i * 3);
 		b.append(v);
 		assertEquals(b, v);
 		b.clear();
 		b.add(true);
 		b.append(v);
-		LongArrayBitVector w = LongArrayBitVector.ofLength(201);
+		final LongArrayBitVector w = LongArrayBitVector.ofLength(201);
 		for(int i = 0; i < 60; i++) w.set(i * 3 + 1);
 		w.set(0);
 		assertEquals(w, b);
diff --git a/test/it/unimi/dsi/bits/BitVectorsTest.java b/test/it/unimi/dsi/bits/BitVectorsTest.java
index cf4c33e..8cae2bc 100644
--- a/test/it/unimi/dsi/bits/BitVectorsTest.java
+++ b/test/it/unimi/dsi/bits/BitVectorsTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,10 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import it.unimi.dsi.fastutil.io.FastByteArrayInputStream;
-import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
-import it.unimi.dsi.io.OfflineIterable;
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -34,6 +31,10 @@ import java.util.Iterator;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.FastByteArrayInputStream;
+import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
+import it.unimi.dsi.io.OfflineIterable;
+
 public class BitVectorsTest {
 
 	@Test
@@ -47,14 +48,14 @@ public class BitVectorsTest {
 				LongArrayBitVector.wrap(new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAAL }, 128),
 				LongArrayBitVector.wrap(new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAL }, 124) };
 
-		for(BitVector bv: a) {
+		for(final BitVector bv: a) {
 			BitVectors.writeFast(bv, dos);
 			dos.close();
 			assertEquals(bv, BitVectors.readFast(new DataInputStream(new FastByteArrayInputStream(fbaos.array))));
 			fbaos.reset();
 		}
 
-		for(BitVector bv: a) {
+		for(final BitVector bv: a) {
 			BitVectors.writeFast(bv, dos);
 			dos.close();
 			assertEquals(bv, BitVectors.readFast(new DataInputStream(new FastByteArrayInputStream(fbaos.array)), labv));
@@ -70,11 +71,11 @@ public class BitVectorsTest {
 				LongArrayBitVector.wrap(new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAAL }, 128),
 				LongArrayBitVector.wrap(new long[] { 0xAAAAAAAAAAAAAAAAL, 0xAAAAAAAAAAAAAAAL }, 124) };
 
-		OfflineIterable<BitVector,LongArrayBitVector> iterable = new OfflineIterable<>(BitVectors.OFFLINE_SERIALIZER, LongArrayBitVector.getInstance());
+		final OfflineIterable<BitVector,LongArrayBitVector> iterable = new OfflineIterable<>(BitVectors.OFFLINE_SERIALIZER, LongArrayBitVector.getInstance());
 		iterable.addAll(Arrays.asList(a));
 
-		Iterator<LongArrayBitVector> iterator = iterable.iterator();
-		for(int i = 0; i < a.length; i++) assertEquals(a[i], iterator.next());
+		final Iterator<LongArrayBitVector> iterator = iterable.iterator();
+		for (final BitVector element : a) assertEquals(element, iterator.next());
 		assertFalse(iterator.hasNext());
 		iterable.close();
 	}
diff --git a/test/it/unimi/dsi/bits/BooleanListBitVectorTest.java b/test/it/unimi/dsi/bits/BooleanListBitVectorTest.java
index 88341dd..2b32dc4 100644
--- a/test/it/unimi/dsi/bits/BooleanListBitVectorTest.java
+++ b/test/it/unimi/dsi/bits/BooleanListBitVectorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -31,7 +31,7 @@ public class BooleanListBitVectorTest {
 
 	@Test
 	public void testSetClearFlip() {
-		BooleanListBitVector v = BooleanListBitVector.getInstance();
+		final BooleanListBitVector v = BooleanListBitVector.getInstance();
 		v.size(1);
 		BitVectorTestCase.testSetClearFlip(v);
 		v.size(64);
@@ -47,7 +47,7 @@ public class BooleanListBitVectorTest {
 
 	@Test
 	public void testFillFlip() {
-		BooleanListBitVector v = BooleanListBitVector.getInstance();
+		final BooleanListBitVector v = BooleanListBitVector.getInstance();
 		v.size(100);
 		BitVectorTestCase.testFillFlip(v);
 		BitVectorTestCase.testFillFlip(v.subVector(0, 90));
@@ -71,7 +71,7 @@ public class BooleanListBitVectorTest {
 
 	@Test
 	public void testEquals2() {
-		BooleanListBitVector v = BooleanListBitVector.getInstance();
+		final BooleanListBitVector v = BooleanListBitVector.getInstance();
 		v.clear();
 		v.size(100);
 		v.fill(5, 80, true);
diff --git a/test/it/unimi/dsi/bits/ByteArrayTransformationStrategyTest.java b/test/it/unimi/dsi/bits/ByteArrayTransformationStrategyTest.java
index 4c53870..fd73055 100644
--- a/test/it/unimi/dsi/bits/ByteArrayTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/ByteArrayTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/bits/FastTest.java b/test/it/unimi/dsi/bits/FastTest.java
index 1fa8c18..bfa243d 100644
--- a/test/it/unimi/dsi/bits/FastTest.java
+++ b/test/it/unimi/dsi/bits/FastTest.java
@@ -1,10 +1,3 @@
-package it.unimi.dsi.bits;
-
-import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.util.SplitMix64RandomGenerator;
-
-import org.junit.Test;
-
 /*
  * DSI utilities
  *
@@ -25,6 +18,14 @@ import org.junit.Test;
  *
  */
 
+package it.unimi.dsi.bits;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import it.unimi.dsi.util.SplitMix64RandomGenerator;
+
 public class FastTest {
 
 	@Test
@@ -68,7 +69,7 @@ public class FastTest {
 		assertEquals(0, Fast.select(1, 0));
 		for(int i = 0; i < 64; i++) assertEquals(i, Fast.select(0xFFFFFFFFFFFFFFFFL, i));
 		for(int i = 1; i < 32; i++) assertEquals(2 * i + 1, Fast.select(0xAAAAAAAAAAAAAAAAL, i));
-		SplitMix64RandomGenerator r = new SplitMix64RandomGenerator(0);
+		final SplitMix64RandomGenerator r = new SplitMix64RandomGenerator(0);
 		for(int i = 100000; i-- != 0;) {
 			final long x = r.nextLong();
 			final int count = Long.bitCount(x);
diff --git a/test/it/unimi/dsi/bits/FixedLongTransformationStrategyTest.java b/test/it/unimi/dsi/bits/FixedLongTransformationStrategyTest.java
index 60bb962..c9f01ad 100644
--- a/test/it/unimi/dsi/bits/FixedLongTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/FixedLongTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -39,7 +39,7 @@ public class FixedLongTransformationStrategyTest {
 	@Test
 	public void testGetLong() {
 		final TransformationStrategy<Long> fixedLong = TransformationStrategies.fixedLong();
-		BitVector p = fixedLong.toBitVector(Long.valueOf(Long.reverse(0xDEADBEEFDEADF00DL)));
+		final BitVector p = fixedLong.toBitVector(Long.valueOf(Long.reverse(0xDEADBEEFDEADF00DL)));
 		for(int from = Long.SIZE; from-- != 0;)
 			for(int to = Long.SIZE; from < to--;)
 				assertTrue(p.getLong(from, to) == LongArrayBitVector.wrap(new long[] { 0xDEADBEEFDEADF00DL }).getLong(from, to));
diff --git a/test/it/unimi/dsi/bits/IsoTransformationStrategyTest.java b/test/it/unimi/dsi/bits/IsoTransformationStrategyTest.java
index 980d36d..a70497d 100644
--- a/test/it/unimi/dsi/bits/IsoTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/IsoTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,16 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.lang.MutableString;
 
 import org.junit.Test;
 
+import it.unimi.dsi.lang.MutableString;
+
 public class IsoTransformationStrategyTest {
 
 	@Test
diff --git a/test/it/unimi/dsi/bits/LongArrayBitVectorTest.java b/test/it/unimi/dsi/bits/LongArrayBitVectorTest.java
index c1e884e..bd51643 100644
--- a/test/it/unimi/dsi/bits/LongArrayBitVectorTest.java
+++ b/test/it/unimi/dsi/bits/LongArrayBitVectorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/bits/LongBigArrayBitVectorTest.java b/test/it/unimi/dsi/bits/LongBigArrayBitVectorTest.java
index 76b889e..1508fd6 100644
--- a/test/it/unimi/dsi/bits/LongBigArrayBitVectorTest.java
+++ b/test/it/unimi/dsi/bits/LongBigArrayBitVectorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/bits/PrefixFreeTransformationStrategyTest.java b/test/it/unimi/dsi/bits/PrefixFreeTransformationStrategyTest.java
index a4741d5..83ae1b0 100644
--- a/test/it/unimi/dsi/bits/PrefixFreeTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/PrefixFreeTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -30,9 +30,9 @@ public class PrefixFreeTransformationStrategyTest {
 
 	@Test
 	public void testGetBoolean() {
-		LongArrayBitVector v = LongArrayBitVector.of(0, 1, 0);
-		TransformationStrategy<BitVector> prefixFree = TransformationStrategies.prefixFree();
-		BitVector p = prefixFree.toBitVector(v);
+		final LongArrayBitVector v = LongArrayBitVector.of(0, 1, 0);
+		final TransformationStrategy<BitVector> prefixFree = TransformationStrategies.prefixFree();
+		final BitVector p = prefixFree.toBitVector(v);
 		assertTrue(p.getBoolean(0));
 		assertFalse(p.getBoolean(1));
 		assertTrue(p.getBoolean(2));
@@ -47,8 +47,8 @@ public class PrefixFreeTransformationStrategyTest {
 	public void testGetLong() {
 		LongArrayBitVector v = LongArrayBitVector.getInstance();
 		v.append(0xFFFFFFFFL, 32);
-		TransformationStrategy<BitVector> prefixFree = TransformationStrategies.prefixFree();
-		BitVector p = prefixFree.toBitVector(v);
+		final TransformationStrategy<BitVector> prefixFree = TransformationStrategies.prefixFree();
+		final BitVector p = prefixFree.toBitVector(v);
 		assertEquals(0xFFFFFFFFFFFFFFFFL, p.getLong(0, 64));
 		assertFalse(p.getBoolean(64));
 		assertEquals(0, p.getLong(64, 64));
diff --git a/test/it/unimi/dsi/bits/RawByteArrayTransformationStrategyTest.java b/test/it/unimi/dsi/bits/RawByteArrayTransformationStrategyTest.java
index d4e3afd..b4c14fa 100644
--- a/test/it/unimi/dsi/bits/RawByteArrayTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/RawByteArrayTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/bits/RawFixedLongTransformationStrategyTest.java b/test/it/unimi/dsi/bits/RawFixedLongTransformationStrategyTest.java
index 89d6358..511e161 100644
--- a/test/it/unimi/dsi/bits/RawFixedLongTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/RawFixedLongTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -39,7 +39,7 @@ public class RawFixedLongTransformationStrategyTest {
 	@Test
 	public void testGetLong() {
 		final TransformationStrategy<Long> rawFixedLong = TransformationStrategies.rawFixedLong();
-		BitVector p = rawFixedLong.toBitVector(Long.valueOf(0xDEADBEEFDEADF00DL));
+		final BitVector p = rawFixedLong.toBitVector(Long.valueOf(0xDEADBEEFDEADF00DL));
 		for(int from = Long.SIZE; from-- != 0;)
 			for(int to = Long.SIZE; from < to--;)
 				assertTrue(p.getLong(from, to) == LongArrayBitVector.wrap(new long[] { 0xDEADBEEFDEADF00DL }).getLong(from, to));
diff --git a/test/it/unimi/dsi/bits/RawISOTransformationStrategyTest.java b/test/it/unimi/dsi/bits/RawISOTransformationStrategyTest.java
index 5ce9e7b..728d623 100644
--- a/test/it/unimi/dsi/bits/RawISOTransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/RawISOTransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/bits/RawUtf16TransformationStrategyTest.java b/test/it/unimi/dsi/bits/RawUtf16TransformationStrategyTest.java
index f0f4b5b..30c1dfe 100644
--- a/test/it/unimi/dsi/bits/RawUtf16TransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/RawUtf16TransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,16 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.lang.MutableString;
 
 import org.junit.Test;
 
+import it.unimi.dsi.lang.MutableString;
+
 public class RawUtf16TransformationStrategyTest {
 
 	@Test
diff --git a/test/it/unimi/dsi/bits/RawUtf32TransformationStrategyTest.java b/test/it/unimi/dsi/bits/RawUtf32TransformationStrategyTest.java
index 6c271e7..c272c3b 100644
--- a/test/it/unimi/dsi/bits/RawUtf32TransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/RawUtf32TransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
diff --git a/test/it/unimi/dsi/bits/Utf16TransformationStrategyTest.java b/test/it/unimi/dsi/bits/Utf16TransformationStrategyTest.java
index 2f9c973..a608865 100644
--- a/test/it/unimi/dsi/bits/Utf16TransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/Utf16TransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,13 +18,16 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.lang.MutableString;
 
 import org.junit.Test;
 
+import it.unimi.dsi.lang.MutableString;
+
 public class Utf16TransformationStrategyTest {
 
 	@Test
diff --git a/test/it/unimi/dsi/bits/Utf32TransformationStrategyTest.java b/test/it/unimi/dsi/bits/Utf32TransformationStrategyTest.java
index 94d866b..e8b64c1 100644
--- a/test/it/unimi/dsi/bits/Utf32TransformationStrategyTest.java
+++ b/test/it/unimi/dsi/bits/Utf32TransformationStrategyTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.bits;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.bits;
  *
  */
 
+package it.unimi.dsi.bits;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
diff --git a/test/it/unimi/dsi/compression/CodecTestCase.java b/test/it/unimi/dsi/compression/CodecTestCase.java
index ffc7768..5b54697 100644
--- a/test/it/unimi/dsi/compression/CodecTestCase.java
+++ b/test/it/unimi/dsi/compression/CodecTestCase.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,7 +18,13 @@ package it.unimi.dsi.compression;
  *
  */
 
+package it.unimi.dsi.compression;
+
 import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.Random;
+
 import it.unimi.dsi.bits.BitVector;
 import it.unimi.dsi.fastutil.booleans.BooleanArrayList;
 import it.unimi.dsi.fastutil.booleans.BooleanIterator;
@@ -28,38 +32,36 @@ import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
 import it.unimi.dsi.io.InputBitStream;
 import it.unimi.dsi.io.OutputBitStream;
 
-import java.io.IOException;
-import java.util.Random;
-
 public abstract class CodecTestCase {
-	protected static void checkPrefixCodec(PrefixCodec codec, Random r) throws IOException {
-		int[] symbol = new int[100];
-		BooleanArrayList bits = new BooleanArrayList();
+	protected static void checkPrefixCodec(final PrefixCodec codec, final Random r) throws IOException {
+		final int[] symbol = new int[100];
+		final BooleanArrayList bits = new BooleanArrayList();
 		for(int i = 0; i < symbol.length; i++) symbol[i] = r.nextInt(codec.size());
-		for(int i = 0; i < symbol.length; i++) {
-			BitVector word = codec.codeWords()[symbol[i]];
+		for (final int element : symbol) {
+			final BitVector word = codec.codeWords()[element];
 			for(long j = 0; j < word.length(); j++) bits.add(word.getBoolean(j));
 		}
 
-		BooleanIterator booleanIterator = bits.iterator();
-		Decoder decoder = codec.decoder();
-		for(int i = 0; i < symbol.length; i++) {
-			assertEquals(symbol[i], decoder.decode(booleanIterator));
+		final BooleanIterator booleanIterator = bits.iterator();
+		final Decoder decoder = codec.decoder();
+		for (final int element : symbol) {
+			assertEquals(element, decoder.decode(booleanIterator));
 		}
 
-		FastByteArrayOutputStream fbaos = new FastByteArrayOutputStream();
+		final FastByteArrayOutputStream fbaos = new FastByteArrayOutputStream();
 		@SuppressWarnings("resource")
+		final
 		OutputBitStream obs = new OutputBitStream(fbaos, 0);
 		obs.write(bits.iterator());
 		obs.flush();
-		InputBitStream ibs = new InputBitStream(fbaos.array);
+		final InputBitStream ibs = new InputBitStream(fbaos.array);
 
-		for(int i = 0; i < symbol.length; i++) {
-			assertEquals(symbol[i], decoder.decode(ibs));
+		for (final int element : symbol) {
+			assertEquals(element, decoder.decode(ibs));
 		}
 	}
 
-	protected void checkLengths(int[] frequency, int[] codeLength, BitVector[] codeWord) {
+	protected void checkLengths(final int[] frequency, final int[] codeLength, final BitVector[] codeWord) {
 		for(int i = 0; i < frequency.length; i++)
 			assertEquals(Integer.toString(i), codeLength[i], codeWord[i].length());
 	}
diff --git a/test/it/unimi/dsi/compression/HuTuckerCodecTest.java b/test/it/unimi/dsi/compression/HuTuckerCodecTest.java
index 288a725..f0fe928 100644
--- a/test/it/unimi/dsi/compression/HuTuckerCodecTest.java
+++ b/test/it/unimi/dsi/compression/HuTuckerCodecTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.compression;
  *
  */
 
+package it.unimi.dsi.compression;
+
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
diff --git a/test/it/unimi/dsi/compression/HuffmanCodecTest.java b/test/it/unimi/dsi/compression/HuffmanCodecTest.java
index 33fd86c..89b78bb 100644
--- a/test/it/unimi/dsi/compression/HuffmanCodecTest.java
+++ b/test/it/unimi/dsi/compression/HuffmanCodecTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.compression;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.compression;
  *
  */
 
+package it.unimi.dsi.compression;
+
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
diff --git a/test/it/unimi/dsi/io/ByteBufferInputStreamTest.java b/test/it/unimi/dsi/io/ByteBufferInputStreamTest.java
index ebb8af4..228a38c 100644
--- a/test/it/unimi/dsi/io/ByteBufferInputStreamTest.java
+++ b/test/it/unimi/dsi/io/ByteBufferInputStreamTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,8 +18,9 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.util.SplitMix64Random;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -34,6 +33,8 @@ import java.util.Random;
 
 import org.junit.Test;
 
+import it.unimi.dsi.util.SplitMix64Random;
+
 /** Note: this test has little meaning unless you change ByteBufferInputStream.FIRST_SHIFT to 16.
  */
 
@@ -44,12 +45,12 @@ public class ByteBufferInputStreamTest {
 
 	@Test
 	public void testStream() throws FileNotFoundException, IOException {
-		File f = File.createTempFile(ByteBufferInputStreamTest.class.getName(), "tmp");
+		final File f = File.createTempFile(ByteBufferInputStreamTest.class.getName(), "tmp");
 		f.deleteOnExit();
 		final int l = 100000;
-		long seed = System.currentTimeMillis();
+		final long seed = System.currentTimeMillis();
 		if (DEBUG) System.err.println("Seed: " + seed);
-		Random random = new SplitMix64Random(seed);
+		final Random random = new SplitMix64Random(seed);
 
 		for(int n = 1; n < 8; n++) {
 			final FileOutputStream fos = new FileOutputStream(f);
@@ -63,8 +64,8 @@ public class ByteBufferInputStreamTest {
 			FileInputStream test = new FileInputStream(f);
 			FileChannel fc = test.getChannel();
 			int a1, a2, off, len, pos;
-			byte b1[] = new byte[32768];
-			byte b2[] = new byte[32768];
+			final byte b1[] = new byte[32768];
+			final byte b2[] = new byte[32768];
 
 			for(int k = 0; k < l / 10; k++) {
 
diff --git a/test/it/unimi/dsi/io/ByteDiskQueueTest.java b/test/it/unimi/dsi/io/ByteDiskQueueTest.java
index 1493305..99a1d05 100644
--- a/test/it/unimi/dsi/io/ByteDiskQueueTest.java
+++ b/test/it/unimi/dsi/io/ByteDiskQueueTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * Copyright (C) 2014-2020 Sebastiano Vigna
  *
@@ -18,10 +16,10 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.bytes.ByteArrayList;
-import it.unimi.dsi.util.SplitMix64Random;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,6 +28,9 @@ import java.util.ArrayList;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.bytes.ByteArrayList;
+import it.unimi.dsi.util.SplitMix64Random;
+
 
 public class ByteDiskQueueTest {
 
@@ -45,9 +46,9 @@ public class ByteDiskQueueTest {
 
 	@Test
 	public void testSomeEnqueueDequeue() throws IOException {
-		File queue = File.createTempFile(this.getClass().getName(), ".queue");
+		final File queue = File.createTempFile(this.getClass().getName(), ".queue");
 		queue.deleteOnExit();
-		ByteDiskQueue q = ByteDiskQueue.createNew(queue, 128, true);
+		final ByteDiskQueue q = ByteDiskQueue.createNew(queue, 128, true);
 		for(int s = 1; s < 1 << 12; s *= 2) {
 			q.clear();
 			for(int i = 0; i < s; i++) q.enqueue((byte)(i + 64));
@@ -58,12 +59,12 @@ public class ByteDiskQueueTest {
 
 	@Test
 	public void testSomeEnqueueIntDequeueInt() throws IOException {
-		File queue = File.createTempFile(this.getClass().getName(), ".queue");
+		final File queue = File.createTempFile(this.getClass().getName(), ".queue");
 		queue.deleteOnExit();
-		ByteDiskQueue q = ByteDiskQueue.createNew(queue, 128, true);
+		final ByteDiskQueue q = ByteDiskQueue.createNew(queue, 128, true);
 		for(int s = 1; s < 1 << 20; s *= 2) {
 			q.clear();
-			SplitMix64Random random = new SplitMix64Random(0);
+			final SplitMix64Random random = new SplitMix64Random(0);
 			for(int i = 0; i < s; i++) {
 				q.enqueueInt(random.nextInt() & -1 >>> 1);
 				q.enqueueInt(random.nextInt() & -1 >>> 16);
@@ -83,9 +84,9 @@ public class ByteDiskQueueTest {
 		final File queue = File.createTempFile(this.getClass().getName(), ".queue");
 		queue.deleteOnExit();
 		final ByteDiskQueue q = ByteDiskQueue.createNew(queue, 128, true);
-		byte[] a = new byte[] { 1 };
+		final byte[] a = new byte[] { 1 };
 		q.enqueue(a);
-		byte [] b = new byte[1];
+		final byte [] b = new byte[1];
 		q.dequeue(b);
 		assertArrayEquals(a, b);
 		q.close();
@@ -93,17 +94,17 @@ public class ByteDiskQueueTest {
 
 	@Test
 	public void testSomeArrayEnqueueDequeue() throws IOException {
-		File queue = File.createTempFile(this.getClass().getName(), ".queue");
+		final File queue = File.createTempFile(this.getClass().getName(), ".queue");
 		queue.deleteOnExit();
 
 		for(int bufferSize = 8; bufferSize < 256; bufferSize *=2) {
-			ByteDiskQueue q = ByteDiskQueue.createNew(queue, bufferSize, true);
+			final ByteDiskQueue q = ByteDiskQueue.createNew(queue, bufferSize, true);
 			for(int s = 1; s < 1 << 13; s *= 2) {
 				q.clear();
-				SplitMix64Random random = new SplitMix64Random(0);
-				ArrayList<byte[]> arrays = new ArrayList<>();
+				final SplitMix64Random random = new SplitMix64Random(0);
+				final ArrayList<byte[]> arrays = new ArrayList<>();
 				for(int i = 0; i < s; i++) {
-					byte[] a = new byte[random.nextInt(3 * bufferSize / 2)];
+					final byte[] a = new byte[random.nextInt(3 * bufferSize / 2)];
 					for(int j = a.length; j-- != 0;) a[j] = (byte)j;
 					arrays.add(a);
 				}
@@ -160,7 +161,7 @@ public class ByteDiskQueueTest {
 				else {
 					final byte[] a = new byte[(int)Math.min(q.size64(), random.nextInt(256))];
 					q.dequeue(a);
-					for(int i = 0; i < a.length; i++) assertEquals(a[i], l.removeByte(0));
+					for (final byte element : a) assertEquals(element, l.removeByte(0));
 				}
 				break;
 			case 3:
diff --git a/test/it/unimi/dsi/io/DelimitedWordReaderTest.java b/test/it/unimi/dsi/io/DelimitedWordReaderTest.java
index 51d5034..cc672ff 100644
--- a/test/it/unimi/dsi/io/DelimitedWordReaderTest.java
+++ b/test/it/unimi/dsi/io/DelimitedWordReaderTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
@@ -29,7 +29,7 @@ public class DelimitedWordReaderTest {
 
 	@Test
 	public void testToSpec() {
-		String className = DelimitedWordReader.class.getName();
+		final String className = DelimitedWordReader.class.getName();
 		assertEquals(className + "(\"_\")", new DelimitedWordReader("_").toSpec());
 		assertEquals(className + "(100,\"_\")", new DelimitedWordReader("100", "_").toSpec());
 	}
diff --git a/test/it/unimi/dsi/io/FastBufferedReaderTest.java b/test/it/unimi/dsi/io/FastBufferedReaderTest.java
index 603979b..3de80e0 100644
--- a/test/it/unimi/dsi/io/FastBufferedReaderTest.java
+++ b/test/it/unimi/dsi/io/FastBufferedReaderTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,10 +18,10 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.io.FastBufferedOutputStream;
-import it.unimi.dsi.lang.MutableString;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -34,12 +32,15 @@ import java.io.StringReader;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.FastBufferedOutputStream;
+import it.unimi.dsi.lang.MutableString;
+
 @SuppressWarnings("resource")
 public class FastBufferedReaderTest {
 
 	@Test
 	public void testToSpec() {
-		String className = FastBufferedReader.class.getName();
+		final String className = FastBufferedReader.class.getName();
 		assertEquals(className, new FastBufferedReader().toSpec());
 		assertEquals(className + "(100)", new FastBufferedReader(100).toSpec());
 		assertEquals(className + "(\"_\")", new FastBufferedReader("_").toSpec());
@@ -48,8 +49,8 @@ public class FastBufferedReaderTest {
 
 	@Test
 	public void testBufferZero() throws IOException {
-		String string = "test\ntest\n";
-		FastBufferedReader fbr = new FastBufferedReader(1);
+		final String string = "test\ntest\n";
+		final FastBufferedReader fbr = new FastBufferedReader(1);
 		fbr.setReader(new StringReader(string));
 		assertEquals(new MutableString("test"), fbr.readLine(new MutableString()));
 		assertEquals('t', fbr.read());
@@ -61,18 +62,19 @@ public class FastBufferedReaderTest {
 
 	@Test
 	public void testRandom() throws IOException {
-		File file = File.createTempFile(FastBufferedReaderTest.class.getSimpleName(), "tmp");
+		final File file = File.createTempFile(FastBufferedReaderTest.class.getSimpleName(), "tmp");
 		String s;
 		file.deleteOnExit();
-		MutableString ms = new MutableString(), ms2;
-		int l = (int)file.length();
-		FastBufferedReader br = new FastBufferedReader(new FileReader(file), 2);
-		BufferedReader test = new BufferedReader(new FileReader(file));
+		final MutableString ms = new MutableString();
+		MutableString ms2;
+		final int l = (int)file.length();
+		final FastBufferedReader br = new FastBufferedReader(new FileReader(file), 2);
+		final BufferedReader test = new BufferedReader(new FileReader(file));
 		int a1, a2, off, len, pos;
-		java.util.Random r = new java.util.Random(0);
+		final java.util.Random r = new java.util.Random(0);
 
 		// Create temp file
-		FastBufferedOutputStream fos = new FastBufferedOutputStream(new FileOutputStream(file));
+		final FastBufferedOutputStream fos = new FastBufferedOutputStream(new FileOutputStream(file));
 		for(int i = 1000000; i-- !=0;) {
 			final int c = r.nextInt(100);
 			if (c <= 1) {
@@ -83,8 +85,8 @@ public class FastBufferedReaderTest {
 		}
 		fos.close();
 
-		char b1[] = new char[32768];
-		char b2[] = new char[32768];
+		final char b1[] = new char[32768];
+		final char b2[] = new char[32768];
 
 		for(int t = 1000000; t-- != 0;) {
 
diff --git a/test/it/unimi/dsi/io/FileLinesByteArrayCollectionTest.java b/test/it/unimi/dsi/io/FileLinesByteArrayCollectionTest.java
index 6cf655b..b6caf47 100644
--- a/test/it/unimi/dsi/io/FileLinesByteArrayCollectionTest.java
+++ b/test/it/unimi/dsi/io/FileLinesByteArrayCollectionTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,9 +18,12 @@ package it.unimi.dsi.io;
  *
  */
 
-import it.unimi.dsi.big.io.FileLinesByteArrayCollection;
-import it.unimi.dsi.big.io.FileLinesByteArrayCollection.FileLinesIterator;
-import it.unimi.dsi.fastutil.io.BinIO;
+package it.unimi.dsi.io;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,13 +31,15 @@ import java.util.Arrays;
 
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import it.unimi.dsi.big.io.FileLinesByteArrayCollection;
+import it.unimi.dsi.big.io.FileLinesByteArrayCollection.FileLinesIterator;
+import it.unimi.dsi.fastutil.io.BinIO;
 
 public class FileLinesByteArrayCollectionTest {
 
 	@Test
 	public void test() throws IOException {
-		File file = File.createTempFile(FastBufferedReaderTest.class.getSimpleName(), "tmp");
+		final File file = File.createTempFile(FastBufferedReaderTest.class.getSimpleName(), "tmp");
 		file.deleteOnExit();
 
 		byte[] a = { '0', '\n', '1', '\n' };
diff --git a/test/it/unimi/dsi/io/InputBitStreamTest.java b/test/it/unimi/dsi/io/InputBitStreamTest.java
index 464bf81..76b9d96 100644
--- a/test/it/unimi/dsi/io/InputBitStreamTest.java
+++ b/test/it/unimi/dsi/io/InputBitStreamTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
diff --git a/test/it/unimi/dsi/io/OfflineIterableTest.java b/test/it/unimi/dsi/io/OfflineIterableTest.java
index e6c0662..6bb4694 100644
--- a/test/it/unimi/dsi/io/OfflineIterableTest.java
+++ b/test/it/unimi/dsi/io/OfflineIterableTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,10 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import it.unimi.dsi.fastutil.objects.ObjectIterator;
-import it.unimi.dsi.fastutil.objects.ObjectIterators;
-import it.unimi.dsi.lang.MutableString;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -34,32 +31,36 @@ import java.io.OutputStream;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.objects.ObjectIterator;
+import it.unimi.dsi.fastutil.objects.ObjectIterators;
+import it.unimi.dsi.lang.MutableString;
+
 public class OfflineIterableTest {
-	public void doIt(String[] strings) throws IOException {
-		OfflineIterable.Serializer<MutableString,MutableString> stringSerializer = new OfflineIterable.Serializer<MutableString,MutableString>() {
+	public void doIt(final String[] strings) throws IOException {
+		final OfflineIterable.Serializer<MutableString,MutableString> stringSerializer = new OfflineIterable.Serializer<MutableString,MutableString>() {
 			@Override
-			public void read(DataInput dis, MutableString x) throws IOException {
+			public void read(final DataInput dis, final MutableString x) throws IOException {
 				x.readSelfDelimUTF8((InputStream)dis);
 			}
 			@Override
-			public void write(MutableString x, DataOutput dos) throws IOException {
+			public void write(final MutableString x, final DataOutput dos) throws IOException {
 				x.writeSelfDelimUTF8((OutputStream)dos);
 			}
 		};
-		OfflineIterable<MutableString,MutableString> stringIterable = new OfflineIterable<>(stringSerializer, new MutableString());
-		for (String s: strings)
+		final OfflineIterable<MutableString,MutableString> stringIterable = new OfflineIterable<>(stringSerializer, new MutableString());
+		for (final String s: strings)
 			stringIterable.add(new MutableString(s));
 		ObjectIterator<String> shouldBe = ObjectIterators.wrap(strings);
-		for (MutableString m: stringIterable)
+		for (final MutableString m: stringIterable)
 			assertEquals(new MutableString(shouldBe.next()), m);
 		assertFalse(shouldBe.hasNext());
 
 		// Let's do it again.
 		stringIterable.clear();
-		for (String s: strings)
+		for (final String s: strings)
 			stringIterable.add(new MutableString(s));
 		shouldBe = ObjectIterators.wrap(strings);
-		for (MutableString m: stringIterable)
+		for (final MutableString m: stringIterable)
 			assertEquals(new MutableString(shouldBe.next()), m);
 		assertFalse(shouldBe.hasNext());
 
diff --git a/test/it/unimi/dsi/io/OutputBitStreamTest.java b/test/it/unimi/dsi/io/OutputBitStreamTest.java
index 6b47c5c..ee91b1d 100644
--- a/test/it/unimi/dsi/io/OutputBitStreamTest.java
+++ b/test/it/unimi/dsi/io/OutputBitStreamTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,22 +18,25 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
-import it.unimi.dsi.util.SplitMix64Random;
 
 import java.io.IOException;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
+import it.unimi.dsi.util.SplitMix64Random;
+
 @SuppressWarnings("resource")
 public class OutputBitStreamTest {
 
 	@Test
 	public void testPositionWrapped() throws IOException {
 		final byte[] a = new byte[2];
-		OutputBitStream obs = new OutputBitStream(a);
+		final OutputBitStream obs = new OutputBitStream(a);
 		obs.position(8);
 		obs.writeInt(1, 8);
 		assertArrayEquals(new byte[] { 0, 1 }, a);
@@ -48,7 +49,7 @@ public class OutputBitStreamTest {
 	@Test(expected=IllegalArgumentException.class)
 	public void testPositionUnaligned() throws IOException {
 		final byte[] a = new byte[2];
-		OutputBitStream obs = new OutputBitStream(a);
+		final OutputBitStream obs = new OutputBitStream(a);
 		obs.position(1);
 	}
 
diff --git a/test/it/unimi/dsi/io/SegmentedInputStreamTest.java b/test/it/unimi/dsi/io/SegmentedInputStreamTest.java
index b84bc5f..5996b22 100644
--- a/test/it/unimi/dsi/io/SegmentedInputStreamTest.java
+++ b/test/it/unimi/dsi/io/SegmentedInputStreamTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.io;
-
 /*
  * DSI utilities
  *
@@ -20,17 +18,20 @@ package it.unimi.dsi.io;
  *
  */
 
+package it.unimi.dsi.io;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.io.FastByteArrayInputStream;
 
 import java.io.IOException;
 
 import org.junit.Before;
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.FastByteArrayInputStream;
+
 public class SegmentedInputStreamTest {
 
-	private FastByteArrayInputStream stream = new FastByteArrayInputStream(
+	private final FastByteArrayInputStream stream = new FastByteArrayInputStream(
 			new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }
 	);
 
diff --git a/test/it/unimi/dsi/lang/EnumParserTest.java b/test/it/unimi/dsi/lang/EnumParserTest.java
index aff6cc4..f9dca3e 100644
--- a/test/it/unimi/dsi/lang/EnumParserTest.java
+++ b/test/it/unimi/dsi/lang/EnumParserTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
@@ -31,11 +31,11 @@ public class EnumParserTest {
 		A,
 		b,
 		C
-	};
+	}
 
 	@Test
 	public void test() throws Exception {
-		EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class);
+		final EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class);
 		assertEquals(TestEnum.A, enumStringParser.parse("A"));
 		assertEquals(TestEnum.b, enumStringParser.parse("b"));
 		assertEquals(TestEnum.C, enumStringParser.parse("C"));
@@ -43,19 +43,19 @@ public class EnumParserTest {
 
 	@Test(expected=ParseException.class)
 	public void testNoMatchBecauseOfCase() throws Exception {
-		EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class);
+		final EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class);
 		enumStringParser.parse("a");
 	}
 
 	@Test(expected=ParseException.class)
 	public void testNoMatchBecauseWrong() throws Exception {
-		EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class);
+		final EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class);
 		enumStringParser.parse("D");
 	}
 
 	@Test
 	public void testNorm() throws Exception {
-		EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class, true);
+		final EnumStringParser<TestEnum> enumStringParser = EnumStringParser.getParser(TestEnum.class, true);
 		assertEquals(TestEnum.A, enumStringParser.parse("a"));
 		assertEquals(TestEnum.C, enumStringParser.parse("c"));
 	}
diff --git a/test/it/unimi/dsi/lang/MutableStringTest.java b/test/it/unimi/dsi/lang/MutableStringTest.java
index 7996abd..57cebe0 100644
--- a/test/it/unimi/dsi/lang/MutableStringTest.java
+++ b/test/it/unimi/dsi/lang/MutableStringTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,20 +18,23 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertFalse;
-import it.unimi.dsi.fastutil.io.FastByteArrayInputStream;
-import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.FastByteArrayInputStream;
+import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream;
+
 public class MutableStringTest {
 	@Test
 	public void testSqueezeSpace() {
-		MutableString s = new MutableString(new char[] { 32, 13, 10, 32, 32, 32, 13, 10, 32, 32, 32, 13, 10, 32, 32, 32, 32, 32 });
+		final MutableString s = new MutableString(new char[] { 32, 13, 10, 32, 32, 32, 13, 10, 32, 32, 32, 13, 10, 32, 32, 32, 32, 32 });
 
 		assertEquals(new MutableString(" \r\n \r\n \r\n "), s.squeezeSpace());
 		assertEquals(new MutableString(" "), s.squeezeWhitespace());
@@ -41,8 +42,8 @@ public class MutableStringTest {
 
 	@Test
 	public void testSubsequence() {
-		MutableString s = new MutableString("abc");
-		CharSequence ss = s.subSequence(1, 3);
+		final MutableString s = new MutableString("abc");
+		final CharSequence ss = s.subSequence(1, 3);
 		assertEquals(new MutableString("bc"), ss);
 		assertEquals(1, ss.subSequence(1, 2).length());
 	}
diff --git a/test/it/unimi/dsi/lang/ObjectParserTest.java b/test/it/unimi/dsi/lang/ObjectParserTest.java
index d4459af..6ca144c 100644
--- a/test/it/unimi/dsi/lang/ObjectParserTest.java
+++ b/test/it/unimi/dsi/lang/ObjectParserTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.lang;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.lang;
  *
  */
 
+package it.unimi.dsi.lang;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
diff --git a/test/it/unimi/dsi/lang/TwoStrings.java b/test/it/unimi/dsi/lang/TwoStrings.java
index ced6070..357d023 100644
--- a/test/it/unimi/dsi/lang/TwoStrings.java
+++ b/test/it/unimi/dsi/lang/TwoStrings.java
@@ -1,7 +1,3 @@
-package it.unimi.dsi.lang;
-
-import java.util.Objects;
-
 /*
  * DSI utilities
  *
@@ -22,6 +18,10 @@ import java.util.Objects;
  *
  */
 
+package it.unimi.dsi.lang;
+
+import java.util.Objects;
+
 public class TwoStrings {
 	private final String a;
 	private final String b;
diff --git a/test/it/unimi/dsi/parser/BulletParserTest.java b/test/it/unimi/dsi/parser/BulletParserTest.java
index 60d38a4..c12a894 100644
--- a/test/it/unimi/dsi/parser/BulletParserTest.java
+++ b/test/it/unimi/dsi/parser/BulletParserTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.parser;
  *
  */
 
+package it.unimi.dsi.parser;
+
 import static org.junit.Assert.assertEquals;
 
 import java.io.FileNotFoundException;
diff --git a/test/it/unimi/dsi/parser/callback/BulletParserCallbackContentHandler.java b/test/it/unimi/dsi/parser/callback/BulletParserCallbackContentHandler.java
index a40dde2..1cf5f94 100644
--- a/test/it/unimi/dsi/parser/callback/BulletParserCallbackContentHandler.java
+++ b/test/it/unimi/dsi/parser/callback/BulletParserCallbackContentHandler.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,13 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
+import java.util.Iterator;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.DefaultHandler;
+
 import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
 import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
 import it.unimi.dsi.fastutil.objects.ReferenceSet;
@@ -28,11 +33,6 @@ import it.unimi.dsi.parser.Attribute;
 import it.unimi.dsi.parser.BulletParser;
 import it.unimi.dsi.parser.Element;
 
-import java.util.Iterator;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.helpers.DefaultHandler;
-
 /** An adapter from callbacks of the bullet parser to standard
  * SAX content handler. Can be used to run, eg., <code>tagsoup</code>
  * and the bullet parser against a page and check that the
@@ -68,7 +68,7 @@ public class BulletParserCallbackContentHandler extends DefaultHandler {
 
 	@Override
 	public void endElement(final String uri, final String localName, final String qName) {
-	    Element element = parser.factory.getElement(new MutableString(localName));
+	    final Element element = parser.factory.getElement(new MutableString(localName));
 		if (cdataElements.contains(element) && element == inCdata) inCdata = null;
 		callback.endElement(element);
 	}
@@ -95,14 +95,14 @@ public class BulletParserCallbackContentHandler extends DefaultHandler {
 		String value;
 		Attribute attribute;
 
-		for (Iterator<Attribute> i = parser.parsedAttributes.iterator(); i.hasNext();) {
+		for (final Iterator<Attribute> i = parser.parsedAttributes.iterator(); i.hasNext();) {
 			attribute = i.next();
 			value = attributes.getValue(attribute.toString());
 			if (value != null)
 				attrMap.put(attribute, new MutableString(value));
 		}
 
-		Element element = parser.factory.getElement(new MutableString(localName));
+		final Element element = parser.factory.getElement(new MutableString(localName));
 		if (cdataElements.contains(element)) inCdata = element;
 		callback.startElement(element, attrMap);
 	}
diff --git a/test/it/unimi/dsi/parser/callback/LinkExtractorTest.java b/test/it/unimi/dsi/parser/callback/LinkExtractorTest.java
index 3672443..a8d626c 100644
--- a/test/it/unimi/dsi/parser/callback/LinkExtractorTest.java
+++ b/test/it/unimi/dsi/parser/callback/LinkExtractorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,9 +18,9 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
-import it.unimi.dsi.parser.BulletParser;
 
 import java.io.IOException;
 
@@ -31,14 +29,17 @@ import org.junit.Test;
 
 import com.google.common.base.Charsets;
 
+import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
+import it.unimi.dsi.parser.BulletParser;
+
 public class LinkExtractorTest {
 
 	@Test
 	public void testExtractor() throws IOException {
-		char[] text = IOUtils.toCharArray(this.getClass().getResourceAsStream("LinkExtractorTest.data"), Charsets.UTF_8);
+		final char[] text = IOUtils.toCharArray(this.getClass().getResourceAsStream("LinkExtractorTest.data"), Charsets.UTF_8);
 
-		BulletParser parser = new BulletParser();
-		LinkExtractor linkExtractor = new LinkExtractor();
+		final BulletParser parser = new BulletParser();
+		final LinkExtractor linkExtractor = new LinkExtractor();
 		parser.setCallback(linkExtractor);
 		parser.parse(text);
 
diff --git a/test/it/unimi/dsi/parser/callback/TextExtractorTest.java b/test/it/unimi/dsi/parser/callback/TextExtractorTest.java
index 14e742d..691c5d7 100644
--- a/test/it/unimi/dsi/parser/callback/TextExtractorTest.java
+++ b/test/it/unimi/dsi/parser/callback/TextExtractorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.parser.callback;
-
 /*
  * DSI utilities
  *
@@ -20,18 +18,21 @@ package it.unimi.dsi.parser.callback;
  *
  */
 
+package it.unimi.dsi.parser.callback;
+
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.parser.BulletParser;
 
 import org.junit.Test;
 
+import it.unimi.dsi.parser.BulletParser;
+
 public class TextExtractorTest {
 
 	@Test
 	public void testBRBreaksFlow() {
-		char a[] = "ciao<BR>mamma<BR>".toCharArray();
-		BulletParser bulletParser = new BulletParser();
-		TextExtractor textExtractor = new TextExtractor();
+		final char a[] = "ciao<BR>mamma<BR>".toCharArray();
+		final BulletParser bulletParser = new BulletParser();
+		final TextExtractor textExtractor = new TextExtractor();
 		bulletParser.setCallback(textExtractor);
 		bulletParser.parse(a);
 		assertTrue(textExtractor.text.toString(), textExtractor.text.indexOf(' ') != -1);
diff --git a/test/it/unimi/dsi/stat/JackknifeTest.java b/test/it/unimi/dsi/stat/JackknifeTest.java
index 1811c03..d75bde4 100644
--- a/test/it/unimi/dsi/stat/JackknifeTest.java
+++ b/test/it/unimi/dsi/stat/JackknifeTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.stat;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.stat;
  *
  */
 
+package it.unimi.dsi.stat;
+
 import static org.junit.Assert.assertEquals;
 
 import java.util.ArrayList;
@@ -30,12 +30,12 @@ import org.junit.Test;
 public class JackknifeTest {
 	@Test
 	public void test() {
-		ArrayList<double[]> samples = new ArrayList<>();
+		final ArrayList<double[]> samples = new ArrayList<>();
 		samples.add(new double[] { 1 });
 		samples.add(new double[] { 2 });
 		samples.add(new double[] { 3 });
 		// Linear statistics must pass through the jackknife without bias.
-		Jackknife average = Jackknife.compute(samples, Jackknife.IDENTITY);
+		final Jackknife average = Jackknife.compute(samples, Jackknife.IDENTITY);
 		assertEquals(2, average.estimate[0], 1E-30);
 		assertEquals(Math.sqrt(((1 - 2) * (1 - 2) + (3 - 2) * (3 - 2)) / 6.), average.standardError[0], 1E-30);
 	}
diff --git a/test/it/unimi/dsi/stat/SummaryStatsTest.java b/test/it/unimi/dsi/stat/SummaryStatsTest.java
index bc09fed..256c1c6 100644
--- a/test/it/unimi/dsi/stat/SummaryStatsTest.java
+++ b/test/it/unimi/dsi/stat/SummaryStatsTest.java
@@ -1,6 +1,3 @@
-package it.unimi.dsi.stat;
-
-
 /*
  * DSI utilities
  *
@@ -21,6 +18,8 @@ package it.unimi.dsi.stat;
  *
  */
 
+package it.unimi.dsi.stat;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
@@ -28,7 +27,7 @@ import org.junit.Test;
 public class SummaryStatsTest {
 	@Test
 	public void test() {
-		SummaryStats summaryStats = new SummaryStats();
+		final SummaryStats summaryStats = new SummaryStats();
 		summaryStats.add(0);
 		assertEquals(0, summaryStats.sum(), 0);
 		assertEquals(0, summaryStats.mean(), 0);
diff --git a/test/it/unimi/dsi/util/BloomFilterTest.java b/test/it/unimi/dsi/util/BloomFilterTest.java
index 1e168e7..9a7a6d2 100644
--- a/test/it/unimi/dsi/util/BloomFilterTest.java
+++ b/test/it/unimi/dsi/util/BloomFilterTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,11 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
-import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
 
 import org.junit.Ignore;
 import org.junit.Test;
@@ -33,11 +31,14 @@ import com.google.common.hash.Funnels;
 import com.google.common.primitives.Bytes;
 import com.google.common.primitives.Longs;
 
+import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
+import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
+
 public class BloomFilterTest {
 
 	@Test
 	public void testAdd() {
-		BloomFilter<Void> bloomFilter = BloomFilter.create(10, 20); // High precision
+		final BloomFilter<Void> bloomFilter = BloomFilter.create(10, 20); // High precision
 		assertTrue(bloomFilter.add("test"));
 		assertFalse(bloomFilter.add("test"));
 		assertTrue(bloomFilter.add("foo"));
@@ -61,9 +62,9 @@ public class BloomFilterTest {
 
 	@Test
 	public void testConflictsStrings() {
-		BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
-		LongOpenHashSet longs = new LongOpenHashSet();
-		SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(1);
+		final BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
+		final LongOpenHashSet longs = new LongOpenHashSet();
+		final SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(1);
 
 		for(int i = 1000; i-- != 0;) {
 			final long l = random.nextLong();
@@ -78,12 +79,12 @@ public class BloomFilterTest {
 
 	@Test
 	public void testConflictsLongStrings() {
-		BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
-		ObjectOpenHashSet<String> strings = new ObjectOpenHashSet<>();
-		SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(2);
+		final BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
+		final ObjectOpenHashSet<String> strings = new ObjectOpenHashSet<>();
+		final SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(2);
 
 		for(int i = 1000; i-- != 0;) {
-			StringBuilder s = new StringBuilder();
+			final StringBuilder s = new StringBuilder();
 			for(int j = 0; j < 100; j++) s.append(Long.toBinaryString(random.nextLong()));
 			strings.add(s.toString());
 			bloomFilter.add(s);
@@ -95,9 +96,9 @@ public class BloomFilterTest {
 
 	@Test
 	public void testConflictsLongs() {
-		BloomFilter<Long> bloomFilter = new BloomFilter<>(1000, 8, Funnels.longFunnel());
-		LongOpenHashSet longs = new LongOpenHashSet();
-		SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(2);
+		final BloomFilter<Long> bloomFilter = new BloomFilter<>(1000, 8, Funnels.longFunnel());
+		final LongOpenHashSet longs = new LongOpenHashSet();
+		final SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(2);
 
 		for(int i = 1000; i-- != 0;) {
 			final long l = random.nextLong();
@@ -112,9 +113,9 @@ public class BloomFilterTest {
 
 	@Test
 	public void testConflictsByteArrays() {
-		BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
-		LongOpenHashSet longs = new LongOpenHashSet();
-		SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(4);
+		final BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
+		final LongOpenHashSet longs = new LongOpenHashSet();
+		final SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(4);
 
 		for(int i = 1000; i-- != 0;) {
 			final long l = random.nextLong();
@@ -129,9 +130,9 @@ public class BloomFilterTest {
 
 	@Test
 	public void testConflictsHashes() {
-		BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
-		LongOpenHashSet longs = new LongOpenHashSet();
-		SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(1);
+		final BloomFilter<Void> bloomFilter = BloomFilter.create(1000, 8);
+		final LongOpenHashSet longs = new LongOpenHashSet();
+		final SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(1);
 
 		for(int i = 1000; i-- != 0;) {
 			final long l = random.nextLong();
@@ -147,7 +148,7 @@ public class BloomFilterTest {
 
 	@Test
 	public void testNegativeSeed() {
-		BloomFilter<Long> bloomFilter = new BloomFilter<>(1000, 8, Funnels.longFunnel());
+		final BloomFilter<Long> bloomFilter = new BloomFilter<>(1000, 8, Funnels.longFunnel());
 		assertTrue(bloomFilter.add("test"));
 		assertFalse(bloomFilter.add("test"));
 	}
@@ -155,9 +156,9 @@ public class BloomFilterTest {
 	@Ignore
 	@Test
 	public void testConflictsBig() {
-		BloomFilter<Long> bloomFilter = new BloomFilter<>(1000000000, 30, Funnels.longFunnel());
-		LongOpenHashSet longs = new LongOpenHashSet();
-		SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(5);
+		final BloomFilter<Long> bloomFilter = new BloomFilter<>(1000000000, 30, Funnels.longFunnel());
+		final LongOpenHashSet longs = new LongOpenHashSet();
+		final SplitMix64RandomGenerator random = new SplitMix64RandomGenerator(5);
 
 		for(int i = 10000000; i-- != 0;) {
 			final long l = random.nextLong();
@@ -171,7 +172,7 @@ public class BloomFilterTest {
 
 	@Test
 	public void testZeroFunctions() {
-		BloomFilter<Void> bloomFilter = BloomFilter.create(10, 0);
+		final BloomFilter<Void> bloomFilter = BloomFilter.create(10, 0);
 		assertFalse(bloomFilter.add("test"));
 		assertEquals(0, bloomFilter.size64());
 	}
diff --git a/test/it/unimi/dsi/util/ByteBufferLongBigListTest.java b/test/it/unimi/dsi/util/ByteBufferLongBigListTest.java
index 9289c13..9d9a6b4 100644
--- a/test/it/unimi/dsi/util/ByteBufferLongBigListTest.java
+++ b/test/it/unimi/dsi/util/ByteBufferLongBigListTest.java
@@ -1,3 +1,23 @@
+/*
+ * DSI utilities
+ *
+ * Copyright (C) 2010-2020 Sebastiano Vigna
+ *
+ *  This library is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU Lesser General Public License as published by the Free
+ *  Software Foundation; either version 3 of the License, or (at your option)
+ *  any later version.
+ *
+ *  This library is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ *  for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
diff --git a/test/it/unimi/dsi/util/CircularCharArrayBufferTest.java b/test/it/unimi/dsi/util/CircularCharArrayBufferTest.java
index 95acb92..8f3dfab 100644
--- a/test/it/unimi/dsi/util/CircularCharArrayBufferTest.java
+++ b/test/it/unimi/dsi/util/CircularCharArrayBufferTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 
 import java.util.Iterator;
diff --git a/test/it/unimi/dsi/util/FrontCodedStringListTest.java b/test/it/unimi/dsi/util/FrontCodedStringListTest.java
index 01d53f0..ccea8fe 100644
--- a/test/it/unimi/dsi/util/FrontCodedStringListTest.java
+++ b/test/it/unimi/dsi/util/FrontCodedStringListTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,8 +18,9 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.lang.MutableString;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -29,14 +28,16 @@ import java.util.List;
 
 import org.junit.Test;
 
+import it.unimi.dsi.lang.MutableString;
+
 public class FrontCodedStringListTest {
 
 	@Test
 	public void testLargeSet() {
-		List<String> c = Arrays.asList(TernaryIntervalSearchTreeTest.WORDS.clone());
-		MutableString s = new MutableString();
+		final List<String> c = Arrays.asList(TernaryIntervalSearchTreeTest.WORDS.clone());
+		final MutableString s = new MutableString();
 		for(int p = 0; p < 2; p++) {
-			for(boolean utf8: new boolean[] { false, true })
+			for(final boolean utf8: new boolean[] { false, true })
 				for(int ratio = 1; ratio < 8; ratio++) {
 					final FrontCodedStringList fcl = new FrontCodedStringList(c.iterator(), ratio, utf8);
 					for(int i = 0; i < fcl.size(); i++) {
@@ -52,8 +53,8 @@ public class FrontCodedStringListTest {
 
 	@Test
 	public void testSurrogatePairs() {
-		List<String> c = Arrays.asList(new String[] { "a", "AB\uE000AB", "\uD800\uDF02", "\uD800\uDF03", "b" });
-		for(boolean utf8: new boolean[] { false, true })
+		final List<String> c = Arrays.asList(new String[] { "a", "AB\uE000AB", "\uD800\uDF02", "\uD800\uDF03", "b" });
+		for(final boolean utf8: new boolean[] { false, true })
 			for(int ratio = 1; ratio < 8; ratio++) {
 				final FrontCodedStringList fcl = new FrontCodedStringList(c.iterator(), ratio, utf8);
 				for(int i = 0; i < fcl.size(); i++) {
diff --git a/test/it/unimi/dsi/util/HyperLogLogCounterArrayTest.java b/test/it/unimi/dsi/util/HyperLogLogCounterArrayTest.java
index 58fc94d..5f7cec4 100644
--- a/test/it/unimi/dsi/util/HyperLogLogCounterArrayTest.java
+++ b/test/it/unimi/dsi/util/HyperLogLogCounterArrayTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Ignore;
diff --git a/test/it/unimi/dsi/util/ImmutableBinaryTrieTest.java b/test/it/unimi/dsi/util/ImmutableBinaryTrieTest.java
index c7c2b7e..44c46b8 100644
--- a/test/it/unimi/dsi/util/ImmutableBinaryTrieTest.java
+++ b/test/it/unimi/dsi/util/ImmutableBinaryTrieTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 
 import java.util.List;
@@ -34,11 +34,11 @@ import it.unimi.dsi.fastutil.objects.ObjectLists;
 
 public class ImmutableBinaryTrieTest {
 
-	public void testImmutableBinaryTrie(List<String> strings) {
+	public void testImmutableBinaryTrie(final List<String> strings) {
 		final ObjectArrayList<BitVector> vectors = new ObjectArrayList<>();
-		for(int i = 0; i < strings.size(); i++) {
-			final BitVector v = LongArrayBitVector.ofLength(strings.get(i).length());
-			for(int j = 0; j < strings.get(i).length(); j++) if (strings.get(i).charAt(j) == '1') v.set(j);
+		for (final String string : strings) {
+			final BitVector v = LongArrayBitVector.ofLength(string.length());
+			for(int j = 0; j < string.length(); j++) if (string.charAt(j) == '1') v.set(j);
 			vectors.add(v);
 		}
 
diff --git a/test/it/unimi/dsi/util/ImmutableExternalPrefixMapTest.java b/test/it/unimi/dsi/util/ImmutableExternalPrefixMapTest.java
index 1504af0..4010457 100644
--- a/test/it/unimi/dsi/util/ImmutableExternalPrefixMapTest.java
+++ b/test/it/unimi/dsi/util/ImmutableExternalPrefixMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,12 +18,11 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
-import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet;
-import it.unimi.dsi.fastutil.objects.ObjectSets;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -34,38 +31,39 @@ import java.util.Iterator;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet;
+import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet;
+import it.unimi.dsi.fastutil.objects.ObjectSets;
+
 
 public class ImmutableExternalPrefixMapTest {
 
 	public void testLargeSet(final int blockSize) throws IOException {
-		Collection<String> c = Arrays.asList(TernaryIntervalSearchTreeTest.WORDS);
+		final Collection<String> c = Arrays.asList(TernaryIntervalSearchTreeTest.WORDS);
 		TernaryIntervalSearchTree t = new TernaryIntervalSearchTree(c);
 		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(c, blockSize);
 
-		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++) assertTrue(TernaryIntervalSearchTreeTest.WORDS[i], d.containsKey(TernaryIntervalSearchTreeTest.WORDS[i]));
+		for (final String element : TernaryIntervalSearchTreeTest.WORDS) assertTrue(element, d.containsKey(element));
 		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++) assertEquals(TernaryIntervalSearchTreeTest.WORDS[i], d.list().get(i).toString());
-		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++)
-			for(int j = 0; j < TernaryIntervalSearchTreeTest.WORDS[i].length(); j++) {
-				String s = TernaryIntervalSearchTreeTest.WORDS[i].substring(0, j + 1);
-				assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
-				s = s + " ";
-				assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
-				s = s.substring(0, s.length() - 1) + "~";
-				assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
-			}
+		for (final String element : TernaryIntervalSearchTreeTest.WORDS) for(int j = 0; j < element.length(); j++) {
+			String s = element.substring(0, j + 1);
+			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
+			s = s + " ";
+			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
+			s = s.substring(0, s.length() - 1) + "~";
+			assertEquals(s, t.rangeMap().get(s), d.getInterval(s));
+		}
 
 		// Similar tests, using all prefixes of all strings in WORDS.
-		Collection<String> p = new ObjectRBTreeSet<>();
-		for(int i = 0; i < TernaryIntervalSearchTreeTest.WORDS.length; i++)
-			for(int j = 0; j < TernaryIntervalSearchTreeTest.WORDS[i].length(); j++)
-				p.add(TernaryIntervalSearchTreeTest.WORDS[i].substring(0, j + 1));
+		final Collection<String> p = new ObjectRBTreeSet<>();
+		for (final String element : TernaryIntervalSearchTreeTest.WORDS) for(int j = 0; j < element.length(); j++)
+			p.add(element.substring(0, j + 1));
 
 		d = new ImmutableExternalPrefixMap(p, blockSize);
 		t = new TernaryIntervalSearchTree(p);
 
 		int j = 0;
-		for(Iterator<String> i = p.iterator(); i.hasNext();) {
-			String s = i.next();
+		for (final String s : p) {
 			assertTrue(s, d.containsKey(s));
 			assertTrue(s, d.containsKey(s));
 			assertEquals(s, d.list().get(j++).toString());
@@ -110,13 +108,13 @@ public class ImmutableExternalPrefixMapTest {
 
 	@Test
 	public void testPrefixes() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ba", "bb" }));
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ba", "bb" }));
 		assertEquals(Interval.valueOf(1, 2), d.getInterval("b"));
 	}
 
 	@Test
 	public void testLargeRootPrefixes() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "aab", "aac", "aad" }), 2);
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "aab", "aac", "aad" }), 2);
 		assertEquals(Interval.valueOf(0, 2), d.getInterval(""));
 		assertEquals(Interval.valueOf(0, 2), d.getInterval("aa"));
 		assertEquals(Interval.valueOf(0, 2), d.getInterval("aa"));
@@ -124,7 +122,7 @@ public class ImmutableExternalPrefixMapTest {
 
 	@Test
 	public void testSingleton() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(ObjectSets.singleton("a"), 1024);
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(ObjectSets.singleton("a"), 1024);
 		assertTrue(d.containsKey("a"));
 		assertFalse(d.containsKey("b"));
 		assertFalse(d.containsKey("0"));
@@ -132,7 +130,7 @@ public class ImmutableExternalPrefixMapTest {
 
 	@Test
 	public void testPrefixOutOfRange() throws IOException {
-		ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ac" }));
+		final ImmutableExternalPrefixMap d = new ImmutableExternalPrefixMap(new ObjectLinkedOpenHashSet<CharSequence>(new String[] { "ab", "ac" }));
 		assertEquals(Intervals.EMPTY_INTERVAL, d.getInterval("b"));
 		assertEquals(Interval.valueOf(0, 1), d.getInterval("a"));
 	}
diff --git a/test/it/unimi/dsi/util/IntervalTest.java b/test/it/unimi/dsi/util/IntervalTest.java
index 1542604..440c7d2 100644
--- a/test/it/unimi/dsi/util/IntervalTest.java
+++ b/test/it/unimi/dsi/util/IntervalTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,20 +18,23 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static it.unimi.dsi.util.Intervals.EMPTY_INTERVAL;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
 import it.unimi.dsi.fastutil.ints.IntIterators;
 import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
 import it.unimi.dsi.fastutil.ints.IntRBTreeSet;
 import it.unimi.dsi.fastutil.ints.IntSortedSet;
 import it.unimi.dsi.fastutil.ints.IntSortedSets;
 
-import java.util.Arrays;
-
-import org.junit.Test;
-
 public class IntervalTest {
 
 	@Test
@@ -86,7 +87,7 @@ public class IntervalTest {
 		try {
 			EMPTY_INTERVAL.contains(0, 1);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -97,7 +98,7 @@ public class IntervalTest {
 		try {
 			EMPTY_INTERVAL.contains(0, 1, 2);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -112,7 +113,7 @@ public class IntervalTest {
 		try {
 			EMPTY_INTERVAL.compareTo(0);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -128,7 +129,7 @@ public class IntervalTest {
 		try {
 			EMPTY_INTERVAL.compareTo(0, 1);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -149,7 +150,7 @@ public class IntervalTest {
 		try {
 			EMPTY_INTERVAL.compareTo(0, 1, 2);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -170,9 +171,9 @@ public class IntervalTest {
 
 	}
 
-	private IntSortedSet toSortedSet(Interval interval) {
+	private IntSortedSet toSortedSet(final Interval interval) {
 		if (interval == EMPTY_INTERVAL) return IntSortedSets.EMPTY_SET;
-		IntSortedSet set = new IntRBTreeSet();
+		final IntSortedSet set = new IntRBTreeSet();
 		for(int i = interval.left; i <= interval.right; i++) set.add(i);
 		return set;
 	}
@@ -181,8 +182,8 @@ public class IntervalTest {
 	public void testSubsets() {
 		for(int i = 0; i < 10; i++)
 			for(int j = i - 1; j < 10; j++) {
-				Interval interval = j < i ? EMPTY_INTERVAL : Interval.valueOf(i, j);
-				IntSortedSet set = toSortedSet(interval);
+				final Interval interval = j < i ? EMPTY_INTERVAL : Interval.valueOf(i, j);
+				final IntSortedSet set = toSortedSet(interval);
 				assertEquals(set, interval);
 				assertTrue(Arrays.equals(IntIterators.unwrap(set.iterator()), IntIterators.unwrap(interval.iterator())));
 				assertEquals(new IntOpenHashSet(set), interval);
diff --git a/test/it/unimi/dsi/util/KahanSummationTest.java b/test/it/unimi/dsi/util/KahanSummationTest.java
index bc8d23a..6f07cad 100644
--- a/test/it/unimi/dsi/util/KahanSummationTest.java
+++ b/test/it/unimi/dsi/util/KahanSummationTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * Copyright (C) 2011-2020 Sebastiano Vigna
  *
@@ -18,6 +16,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
@@ -28,7 +28,7 @@ import org.junit.Test;
 public class KahanSummationTest {
 	@Test
 	public void testSum() {
-		KahanSummation sum = new KahanSummation();
+		final KahanSummation sum = new KahanSummation();
 		sum.add(1);
 		sum.add(2);
 		sum.add(3);
@@ -37,7 +37,7 @@ public class KahanSummationTest {
 
 	@Test
 	public void testDifficult() {
-		KahanSummation sum = new KahanSummation();
+		final KahanSummation sum = new KahanSummation();
 		sum.add(Double.MIN_NORMAL);
 		sum.add(Double.MIN_NORMAL);
 		sum.add(-Double.MIN_NORMAL);
diff --git a/test/it/unimi/dsi/util/LineIteratorTest.java b/test/it/unimi/dsi/util/LineIteratorTest.java
index 516dbb4..b55ce77 100644
--- a/test/it/unimi/dsi/util/LineIteratorTest.java
+++ b/test/it/unimi/dsi/util/LineIteratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,15 +18,18 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.io.FastBufferedReader;
-import it.unimi.dsi.io.LineIterator;
-import it.unimi.dsi.logging.ProgressLogger;
 
 import java.io.StringReader;
 
 import org.junit.Test;
 
+import it.unimi.dsi.io.FastBufferedReader;
+import it.unimi.dsi.io.LineIterator;
+import it.unimi.dsi.logging.ProgressLogger;
+
 
 public class LineIteratorTest {
 
@@ -45,7 +46,7 @@ public class LineIteratorTest {
 		testLineIterator(null);
 	}
 
-	public void testLineIterator(ProgressLogger pl) {
+	public void testLineIterator(final ProgressLogger pl) {
 		final LineIterator lineIterator = new LineIterator(new FastBufferedReader(new StringReader(TEXT)), pl);
 		int i = 0;
 		while(lineIterator.hasNext())
diff --git a/test/it/unimi/dsi/util/LiterallySignedStringMapTest.java b/test/it/unimi/dsi/util/LiterallySignedStringMapTest.java
index d7d8c29..42af0ae 100644
--- a/test/it/unimi/dsi/util/LiterallySignedStringMapTest.java
+++ b/test/it/unimi/dsi/util/LiterallySignedStringMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,11 +18,9 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.Hash;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.fastutil.objects.Object2LongOpenCustomHashMap;
-import it.unimi.dsi.lang.MutableString;
 
 import java.io.File;
 import java.io.IOException;
@@ -34,20 +30,25 @@ import java.util.Collections;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.Hash;
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.fastutil.objects.Object2LongOpenCustomHashMap;
+import it.unimi.dsi.lang.MutableString;
+
 public class LiterallySignedStringMapTest {
 
 	private final static class CharSequenceStrategy implements Hash.Strategy<CharSequence>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public boolean equals(CharSequence a, CharSequence b) {
+		public boolean equals(final CharSequence a, final CharSequence b) {
 			if (a == null) return b == null;
 			if (b == null) return false;
 			return a.toString().equals(b.toString());
 		}
 
 		@Override
-		public int hashCode(CharSequence o) {
+		public int hashCode(final CharSequence o) {
 			return o.toString().hashCode();
 		}
 	}
@@ -55,13 +56,13 @@ public class LiterallySignedStringMapTest {
 	@Test
 	public void testNumbers() throws IOException, ClassNotFoundException {
 		for(int n = 10; n < 10000; n *= 10) {
-			String[] s = new String[n];
+			final String[] s = new String[n];
 			for(int i = s.length; i-- != 0;) s[i] = Integer.toString(i);
 			Collections.shuffle(Arrays.asList(s));
 
-			FrontCodedStringList fcl = new FrontCodedStringList(Arrays.asList(s), 8, true);
+			final FrontCodedStringList fcl = new FrontCodedStringList(Arrays.asList(s), 8, true);
 			// Test with mph
-			Object2LongOpenCustomHashMap<CharSequence> mph = new Object2LongOpenCustomHashMap<>(new CharSequenceStrategy());
+			final Object2LongOpenCustomHashMap<CharSequence> mph = new Object2LongOpenCustomHashMap<>(new CharSequenceStrategy());
 			mph.defaultReturnValue(-1);
 			for(int i = 0; i < s.length; i++) mph.put(new MutableString(s[i]),  i);
 
@@ -70,7 +71,7 @@ public class LiterallySignedStringMapTest {
 			for(int i = s.length; i-- != 0;) assertEquals(i, map.getLong(s[i]));
 			for(int i = s.length + n; i-- != s.length;) assertEquals(-1, map.getLong(Integer.toString(i)));
 
-			File temp = File.createTempFile(getClass().getSimpleName(), "test");
+			final File temp = File.createTempFile(getClass().getSimpleName(), "test");
 			temp.deleteOnExit();
 			BinIO.storeObject(map, temp);
 			map = (LiterallySignedStringMap)BinIO.loadObject(temp);
diff --git a/test/it/unimi/dsi/util/LongIntervalTest.java b/test/it/unimi/dsi/util/LongIntervalTest.java
index 481c9c1..52db9d9 100644
--- a/test/it/unimi/dsi/util/LongIntervalTest.java
+++ b/test/it/unimi/dsi/util/LongIntervalTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,20 +18,22 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static it.unimi.dsi.util.LongIntervals.EMPTY_INTERVAL;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
 import it.unimi.dsi.fastutil.longs.LongIterators;
 import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
 import it.unimi.dsi.fastutil.longs.LongRBTreeSet;
 import it.unimi.dsi.fastutil.longs.LongSortedSet;
 import it.unimi.dsi.fastutil.longs.LongSortedSets;
 
-import org.junit.Test;
-
 public class LongIntervalTest {
 
 	@Test
@@ -86,7 +86,7 @@ public class LongIntervalTest {
 		try {
 			EMPTY_INTERVAL.contains(0, 1);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -97,7 +97,7 @@ public class LongIntervalTest {
 		try {
 			EMPTY_INTERVAL.contains(0, 1, 2);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -112,7 +112,7 @@ public class LongIntervalTest {
 		try {
 			EMPTY_INTERVAL.compareTo(0);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -128,7 +128,7 @@ public class LongIntervalTest {
 		try {
 			EMPTY_INTERVAL.compareTo(0, 1);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -149,7 +149,7 @@ public class LongIntervalTest {
 		try {
 			EMPTY_INTERVAL.compareTo(0, 1, 2);
 		}
-		catch(IllegalArgumentException e) {
+		catch(final IllegalArgumentException e) {
 			ok = true;
 		}
 		assertTrue(ok);
@@ -170,9 +170,9 @@ public class LongIntervalTest {
 
 	}
 
-	private LongSortedSet toSortedSet(LongInterval interval) {
+	private LongSortedSet toSortedSet(final LongInterval interval) {
 		if (interval == EMPTY_INTERVAL) return LongSortedSets.EMPTY_SET;
-		LongSortedSet set = new LongRBTreeSet();
+		final LongSortedSet set = new LongRBTreeSet();
 		for(long i = interval.left; i <= interval.right; i++) set.add(i);
 		return set;
 	}
@@ -181,8 +181,8 @@ public class LongIntervalTest {
 	public void testSubsets() {
 		for(int i = 0; i < 10; i++)
 			for(int j = i - 1; j < 10; j++) {
-				LongInterval interval = j < i ? EMPTY_INTERVAL : LongInterval.valueOf(i, j);
-				LongSortedSet set = toSortedSet(interval);
+				final LongInterval interval = j < i ? EMPTY_INTERVAL : LongInterval.valueOf(i, j);
+				final LongSortedSet set = toSortedSet(interval);
 				assertEquals(set, interval);
 				assertArrayEquals(LongIterators.unwrap(set.iterator()), LongIterators.unwrap(interval.iterator()));
 				assertEquals(new LongOpenHashSet(set), interval);
diff --git a/test/it/unimi/dsi/util/SemiExternalGammaListTest.java b/test/it/unimi/dsi/util/SemiExternalGammaListTest.java
index 120546f..0550fea 100644
--- a/test/it/unimi/dsi/util/SemiExternalGammaListTest.java
+++ b/test/it/unimi/dsi/util/SemiExternalGammaListTest.java
@@ -1,9 +1,7 @@
-package it.unimi.dsi.util;
-
-/*		 
+/*
  * DSI utilities
  *
- * Copyright (C) 2010-2020 Sebastiano Vigna 
+ * Copyright (C) 2010-2020 Sebastiano Vigna
  *
  *  This library is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU Lesser General Public License as published by the Free
@@ -17,45 +15,49 @@ package it.unimi.dsi.util;
  *
  *  You should have received a copy of the GNU Lesser General Public License
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.longs.LongArrayList;
-import it.unimi.dsi.fastutil.longs.LongList;
-import it.unimi.dsi.io.InputBitStream;
-import it.unimi.dsi.io.OutputBitStream;
 
 import java.io.IOException;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.longs.LongArrayList;
+import it.unimi.dsi.fastutil.longs.LongList;
+import it.unimi.dsi.io.InputBitStream;
+import it.unimi.dsi.io.OutputBitStream;
+
 /**
  * @author Fabien Campagne
  * @author Sebastiano Vigna
  */
 public class SemiExternalGammaListTest {
 
-	private static InputBitStream buildInputStream(LongList longs) throws IOException {
-		byte[] array = new byte[longs.size() * 4];
+	private static InputBitStream buildInputStream(final LongList longs) throws IOException {
+		final byte[] array = new byte[longs.size() * 4];
 		@SuppressWarnings("resource")
+		final
 		OutputBitStream streamer = new OutputBitStream(array);
 		for (int i = 0; i < longs.size(); i++) streamer.writeLongGamma(longs.getLong(i));
-		int size = (int)(streamer.writtenBits() / 8) + ((streamer.writtenBits() % 8) == 0 ? 0 : 1);
-		byte[] smaller = new byte[size];
+		final int size = (int)(streamer.writtenBits() / 8) + ((streamer.writtenBits() % 8) == 0 ? 0 : 1);
+		final byte[] smaller = new byte[size];
 		System.arraycopy(array, 0, smaller, 0, size);
 
 		return new InputBitStream(smaller);
 
 	}
 
-	
+
 	@Test
     public void testSemiExternalGammaListGammaCoding() throws IOException {
 
-		long[] longs = { 10, 300, 450, 650, 1000, 1290, 1699 };
-		LongList listLongs = new LongArrayList(longs);
+		final long[] longs = { 10, 300, 450, 650, 1000, 1290, 1699 };
+		final LongList listLongs = new LongArrayList(longs);
 
 		SemiExternalGammaList list = new SemiExternalGammaList(buildInputStream(listLongs), 1, listLongs.size());
 		for (int i = 0; i < longs.length; ++i) {
@@ -76,7 +78,7 @@ public class SemiExternalGammaListTest {
 		for (int i = 0; i < longs.length; ++i) {
 			assertEquals(("test failed for index: " + i), longs[i], list.getLong(i));
 		}
-		
+
 		list = new SemiExternalGammaList(buildInputStream(listLongs), 8, listLongs.size());
 		for (int i = 0; i < longs.length; ++i) {
 			assertEquals(("test failed for index: " + i), longs[i], list.getLong(i));
@@ -86,8 +88,8 @@ public class SemiExternalGammaListTest {
 	@Test
     public void testEmptySemiExternalGammaListGammaCoding() throws IOException {
 
-		long[] longs = {  };
-		LongList listOffsets = new LongArrayList(longs);
+		final long[] longs = {  };
+		final LongList listOffsets = new LongArrayList(longs);
 
 		new SemiExternalGammaList(buildInputStream(listOffsets), 1, listOffsets.size());
 		assertTrue(true);
diff --git a/test/it/unimi/dsi/util/ShiftAddXorSignedStringMapTest.java b/test/it/unimi/dsi/util/ShiftAddXorSignedStringMapTest.java
index 051c87f..e350981 100644
--- a/test/it/unimi/dsi/util/ShiftAddXorSignedStringMapTest.java
+++ b/test/it/unimi/dsi/util/ShiftAddXorSignedStringMapTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,9 +18,9 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
-import it.unimi.dsi.fastutil.io.BinIO;
-import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,6 +28,9 @@ import java.util.Arrays;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.io.BinIO;
+import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
+
 public class ShiftAddXorSignedStringMapTest {
 
 	@SuppressWarnings("deprecation")
@@ -37,18 +38,18 @@ public class ShiftAddXorSignedStringMapTest {
 	public void testNumbers() throws IOException, ClassNotFoundException {
 
 		for(int width = 16; width <= Long.SIZE; width += 8) {
-			String[] s = new String[1000];
-			long[] v = new long[s.length];
+			final String[] s = new String[1000];
+			final long[] v = new long[s.length];
 			for(int i = s.length; i-- != 0;) s[(int)(v[i] = i)] = Integer.toString(i);
 
 			// Test with mph
-			Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
+			final Object2LongOpenHashMap<String> mph = new Object2LongOpenHashMap<>(s, v);
 			ShiftAddXorSignedStringMap map = new ShiftAddXorSignedStringMap(Arrays.asList(s).iterator(), mph, width);
 
 			for(int i = s.length; i-- != 0;) assertEquals(i, map.getLong(Integer.toString(i)));
 			for(int i = s.length + 100; i-- != s.length;) assertEquals(-1, map.getLong(Integer.toString(i)));
 
-			File temp = File.createTempFile(getClass().getSimpleName(), "test");
+			final File temp = File.createTempFile(getClass().getSimpleName(), "test");
 			temp.deleteOnExit();
 			BinIO.storeObject(map, temp);
 			map = (ShiftAddXorSignedStringMap)BinIO.loadObject(temp);
diff --git a/test/it/unimi/dsi/util/SplitMix64RandomGeneratorTest.java b/test/it/unimi/dsi/util/SplitMix64RandomGeneratorTest.java
index cbbfee6..bf762f3 100644
--- a/test/it/unimi/dsi/util/SplitMix64RandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/SplitMix64RandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -32,11 +31,11 @@ public class SplitMix64RandomGeneratorTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
+		for (final long seed : seeds) {
+			final SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = splitMix.nextFloat();
+				final float d = splitMix.nextFloat();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -48,11 +47,11 @@ public class SplitMix64RandomGeneratorTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
+		for (final long seed : seeds) {
+			final SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = splitMix.nextDouble();
+				final double d = splitMix.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -64,11 +63,11 @@ public class SplitMix64RandomGeneratorTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
+		for (final long seed : seeds) {
+			final SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = splitMix.nextInt(101);
+				final int d = splitMix.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -80,13 +79,13 @@ public class SplitMix64RandomGeneratorTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
+		for (final long seed : seeds) {
+			final SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = splitMix.nextInt();
+				final int d = splitMix.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -100,13 +99,13 @@ public class SplitMix64RandomGeneratorTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
+		for (final long seed : seeds) {
+			final SplitMix64RandomGenerator splitMix = new SplitMix64RandomGenerator(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = splitMix.nextLong();
+				final long d = splitMix.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
@@ -120,8 +119,8 @@ public class SplitMix64RandomGeneratorTest {
 
 	@Test
 	public void testSameAsRandom() {
-		SplitMix64Random splitMixStarRandom = new SplitMix64Random(0);
-		SplitMix64RandomGenerator splitMixStar = new SplitMix64RandomGenerator(0);
+		final SplitMix64Random splitMixStarRandom = new SplitMix64Random(0);
+		final SplitMix64RandomGenerator splitMixStar = new SplitMix64RandomGenerator(0);
 		for(int i = 1000000; i-- != 0;) {
 			assertEquals(splitMixStar.nextLong(), splitMixStarRandom.nextLong());
 			assertEquals(0, splitMixStar.nextDouble(), splitMixStarRandom.nextDouble());
diff --git a/test/it/unimi/dsi/util/SplitMix64RandomTest.java b/test/it/unimi/dsi/util/SplitMix64RandomTest.java
index b48efbd..26e060a 100644
--- a/test/it/unimi/dsi/util/SplitMix64RandomTest.java
+++ b/test/it/unimi/dsi/util/SplitMix64RandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -32,11 +31,11 @@ public class SplitMix64RandomTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
+		for (final long seed : seeds) {
+			final SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = splitMixRandom.nextFloat();
+				final float d = splitMixRandom.nextFloat();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -48,11 +47,11 @@ public class SplitMix64RandomTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
+		for (final long seed : seeds) {
+			final SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = splitMixRandom.nextDouble();
+				final double d = splitMixRandom.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -64,11 +63,11 @@ public class SplitMix64RandomTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
+		for (final long seed : seeds) {
+			final SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = splitMixRandom.nextInt(101);
+				final int d = splitMixRandom.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -80,13 +79,13 @@ public class SplitMix64RandomTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
+		for (final long seed : seeds) {
+			final SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = splitMixRandom.nextInt();
+				final int d = splitMixRandom.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -100,13 +99,13 @@ public class SplitMix64RandomTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
+		for (final long seed : seeds) {
+			final SplitMix64Random splitMixRandom = new SplitMix64Random(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = splitMixRandom.nextLong();
+				final long d = splitMixRandom.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
diff --git a/test/it/unimi/dsi/util/TernaryIntervalSearchTreeTest.java b/test/it/unimi/dsi/util/TernaryIntervalSearchTreeTest.java
index a881385..8c92de5 100644
--- a/test/it/unimi/dsi/util/TernaryIntervalSearchTreeTest.java
+++ b/test/it/unimi/dsi/util/TernaryIntervalSearchTreeTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/TextPatternTest.java b/test/it/unimi/dsi/util/TextPatternTest.java
index ec4ae91..2791d7a 100644
--- a/test/it/unimi/dsi/util/TextPatternTest.java
+++ b/test/it/unimi/dsi/util/TextPatternTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,18 +18,21 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import it.unimi.dsi.fastutil.chars.CharArrayList;
 
 import org.junit.Test;
 
+import it.unimi.dsi.fastutil.chars.CharArrayList;
+
 public class TextPatternTest {
 	@Test
 	public void testSingleCharacterSearch() {
-		byte[] b = new byte[] { 1, (byte)'A', 2 };
-		String s = " A ";
-		TextPattern pattern = new TextPattern("A");
+		final byte[] b = new byte[] { 1, (byte)'A', 2 };
+		final String s = " A ";
+		final TextPattern pattern = new TextPattern("A");
 
 		assertEquals(-1, pattern.search(b, 0, 1));
 		assertEquals(-1, pattern.search(s, 0, 1));
@@ -46,9 +47,9 @@ public class TextPatternTest {
 
 	@Test
 	public void testSearch() {
-		byte[] b = new byte[] { 1, (byte)'A', 'B', 2 };
-		String s = " AB ";
-		TextPattern pattern = new TextPattern("AB");
+		final byte[] b = new byte[] { 1, (byte)'A', 'B', 2 };
+		final String s = " AB ";
+		final TextPattern pattern = new TextPattern("AB");
 
 		assertEquals(-1, pattern.search(b, 0, 2));
 		assertEquals(-1, pattern.search(s, 0, 2));
diff --git a/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGeneratorTest.java b/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGeneratorTest.java
index 57d7609..bc98704 100644
--- a/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomTest.java b/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomTest.java
index 1aee92b..71042ee 100644
--- a/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomTest.java
+++ b/test/it/unimi/dsi/util/XoRoShiRo128PlusPlusRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomGeneratorTest.java b/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomGeneratorTest.java
index ac7cc2f..d501205 100644
--- a/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomTest.java b/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomTest.java
index 2980ced..5281ac1 100644
--- a/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomTest.java
+++ b/test/it/unimi/dsi/util/XoRoShiRo128PlusRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGeneratorTest.java b/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGeneratorTest.java
index d45dcbb..c35c5ff 100644
--- a/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomTest.java b/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomTest.java
index fafe928..ee18943 100644
--- a/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomTest.java
+++ b/test/it/unimi/dsi/util/XoRoShiRo128StarStarRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGeneratorTest.java b/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGeneratorTest.java
index aa5853b..deb68fc 100644
--- a/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomTest.java b/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomTest.java
index 35137bf..c3a4b06 100644
--- a/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomTest.java
+++ b/test/it/unimi/dsi/util/XoShiRo256PlusPlusRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoShiRo256PlusRandomGeneratorTest.java b/test/it/unimi/dsi/util/XoShiRo256PlusRandomGeneratorTest.java
index ef7a89f..6dda305 100644
--- a/test/it/unimi/dsi/util/XoShiRo256PlusRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XoShiRo256PlusRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoShiRo256PlusRandomTest.java b/test/it/unimi/dsi/util/XoShiRo256PlusRandomTest.java
index be93acc..658de4d 100644
--- a/test/it/unimi/dsi/util/XoShiRo256PlusRandomTest.java
+++ b/test/it/unimi/dsi/util/XoShiRo256PlusRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoShiRo256StarStarRandomGeneratorTest.java b/test/it/unimi/dsi/util/XoShiRo256StarStarRandomGeneratorTest.java
index 44d32d0..7ed6443 100644
--- a/test/it/unimi/dsi/util/XoShiRo256StarStarRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XoShiRo256StarStarRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XoShiRo256StarStarRandomTest.java b/test/it/unimi/dsi/util/XoShiRo256StarStarRandomTest.java
index 9162965..e35ceb0 100644
--- a/test/it/unimi/dsi/util/XoShiRo256StarStarRandomTest.java
+++ b/test/it/unimi/dsi/util/XoShiRo256StarStarRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XorShift1024StarPhiRandomGeneratorTest.java b/test/it/unimi/dsi/util/XorShift1024StarPhiRandomGeneratorTest.java
index bace500..5630b55 100644
--- a/test/it/unimi/dsi/util/XorShift1024StarPhiRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XorShift1024StarPhiRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XorShift1024StarPhiRandomTest.java b/test/it/unimi/dsi/util/XorShift1024StarPhiRandomTest.java
index e87c9f9..eec6c81 100644
--- a/test/it/unimi/dsi/util/XorShift1024StarPhiRandomTest.java
+++ b/test/it/unimi/dsi/util/XorShift1024StarPhiRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XorShift1024StarRandomGeneratorTest.java b/test/it/unimi/dsi/util/XorShift1024StarRandomGeneratorTest.java
index f7c8b7d..b1d6078 100644
--- a/test/it/unimi/dsi/util/XorShift1024StarRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XorShift1024StarRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -32,11 +31,11 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = xorShift.nextFloat();
+				final float d = xorShift.nextFloat();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -48,11 +47,11 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = xorShift.nextDouble();
+				final double d = xorShift.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -64,11 +63,11 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = xorShift.nextInt(101);
+				final int d = xorShift.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -80,13 +79,13 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = xorShift.nextInt();
+				final int d = xorShift.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -100,13 +99,13 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandomGenerator xorShift = new XorShift1024StarRandomGenerator(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = xorShift.nextLong();
+				final long d = xorShift.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
@@ -120,8 +119,8 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testSameAsRandom() {
-		XorShift1024StarRandom xorShiftStarRandom = new XorShift1024StarRandom(0);
-		XorShift1024StarRandomGenerator xorShiftStar = new XorShift1024StarRandomGenerator(0);
+		final XorShift1024StarRandom xorShiftStarRandom = new XorShift1024StarRandom(0);
+		final XorShift1024StarRandomGenerator xorShiftStar = new XorShift1024StarRandomGenerator(0);
 		for(int i = 1000000; i-- != 0;) {
 			assertEquals(xorShiftStar.nextLong(), xorShiftStarRandom.nextLong());
 			assertEquals(0, xorShiftStar.nextDouble(), xorShiftStarRandom.nextDouble());
@@ -133,7 +132,7 @@ public class XorShift1024StarRandomGeneratorTest {
 
 	@Test
 	public void testJump() {
-		XorShift1024StarRandomGenerator xorShiftRandom0 = new XorShift1024StarRandomGenerator(0), xorShiftRandom1 = new XorShift1024StarRandomGenerator(0);
+		final XorShift1024StarRandomGenerator xorShiftRandom0 = new XorShift1024StarRandomGenerator(0), xorShiftRandom1 = new XorShift1024StarRandomGenerator(0);
 		xorShiftRandom0.nextLong();
 		xorShiftRandom0.jump();
 		xorShiftRandom1.jump();
diff --git a/test/it/unimi/dsi/util/XorShift1024StarRandomTest.java b/test/it/unimi/dsi/util/XorShift1024StarRandomTest.java
index 9507736..bb02a0b 100644
--- a/test/it/unimi/dsi/util/XorShift1024StarRandomTest.java
+++ b/test/it/unimi/dsi/util/XorShift1024StarRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -33,11 +32,11 @@ public class XorShift1024StarRandomTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = xorShiftRandom.nextFloat();
+				final float d = xorShiftRandom.nextFloat();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -49,11 +48,11 @@ public class XorShift1024StarRandomTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = xorShiftRandom.nextDouble();
+				final double d = xorShiftRandom.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -65,11 +64,11 @@ public class XorShift1024StarRandomTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = xorShiftRandom.nextInt(101);
+				final int d = xorShiftRandom.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -81,13 +80,13 @@ public class XorShift1024StarRandomTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = xorShiftRandom.nextInt();
+				final int d = xorShiftRandom.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -101,13 +100,13 @@ public class XorShift1024StarRandomTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift1024StarRandom xorShiftRandom = new XorShift1024StarRandom(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = xorShiftRandom.nextLong();
+				final long d = xorShiftRandom.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
@@ -121,7 +120,7 @@ public class XorShift1024StarRandomTest {
 
 	@Test
 	public void testJump() {
-		XorShift1024StarRandom xorShiftRandom0 = new XorShift1024StarRandom(0), xorShiftRandom1 = new XorShift1024StarRandom(0);
+		final XorShift1024StarRandom xorShiftRandom0 = new XorShift1024StarRandom(0), xorShiftRandom1 = new XorShift1024StarRandom(0);
 		xorShiftRandom0.nextLong();
 		xorShiftRandom0.jump();
 		xorShiftRandom1.jump();
diff --git a/test/it/unimi/dsi/util/XorShift128PlusRandomGeneratorTest.java b/test/it/unimi/dsi/util/XorShift128PlusRandomGeneratorTest.java
index 89c9ec4..cb11575 100644
--- a/test/it/unimi/dsi/util/XorShift128PlusRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XorShift128PlusRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -33,11 +32,11 @@ public class XorShift128PlusRandomGeneratorTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = xorShift.nextFloat();
+				final float d = xorShift.nextFloat();
 				assertTrue(Float.toString(d), d < 1);
 				assertTrue(Float.toString(d), d >= 0);
 				avg += d;
@@ -49,11 +48,11 @@ public class XorShift128PlusRandomGeneratorTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = xorShift.nextDouble();
+				final double d = xorShift.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -65,11 +64,11 @@ public class XorShift128PlusRandomGeneratorTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = xorShift.nextInt(101);
+				final int d = xorShift.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -81,13 +80,13 @@ public class XorShift128PlusRandomGeneratorTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = xorShift.nextInt();
+				final int d = xorShift.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -101,13 +100,13 @@ public class XorShift128PlusRandomGeneratorTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift128PlusRandomGenerator xorShift = new XorShift128PlusRandomGenerator(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = xorShift.nextLong();
+				final long d = xorShift.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
@@ -121,8 +120,8 @@ public class XorShift128PlusRandomGeneratorTest {
 
 	@Test
 	public void testSameAsRandom() {
-		XorShift128PlusRandom xorShiftStarRandom = new XorShift128PlusRandom(0);
-		XorShift128PlusRandomGenerator xorShiftStar = new XorShift128PlusRandomGenerator(0);
+		final XorShift128PlusRandom xorShiftStarRandom = new XorShift128PlusRandom(0);
+		final XorShift128PlusRandomGenerator xorShiftStar = new XorShift128PlusRandomGenerator(0);
 		for(int i = 1000000; i-- != 0;) {
 			assertEquals(xorShiftStar.nextLong(), xorShiftStarRandom.nextLong());
 			assertEquals(0, xorShiftStar.nextDouble(), xorShiftStarRandom.nextDouble());
diff --git a/test/it/unimi/dsi/util/XorShift128PlusRandomTest.java b/test/it/unimi/dsi/util/XorShift128PlusRandomTest.java
index b3b4cd3..b16a5dd 100644
--- a/test/it/unimi/dsi/util/XorShift128PlusRandomTest.java
+++ b/test/it/unimi/dsi/util/XorShift128PlusRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/test/it/unimi/dsi/util/XorShift64StarRandomGeneratorTest.java b/test/it/unimi/dsi/util/XorShift64StarRandomGeneratorTest.java
index baa9f7a..e2a39d7 100644
--- a/test/it/unimi/dsi/util/XorShift64StarRandomGeneratorTest.java
+++ b/test/it/unimi/dsi/util/XorShift64StarRandomGeneratorTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -33,11 +32,11 @@ public class XorShift64StarRandomGeneratorTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = xorShift.nextFloat();
+				final float d = xorShift.nextFloat();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -49,11 +48,11 @@ public class XorShift64StarRandomGeneratorTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = xorShift.nextDouble();
+				final double d = xorShift.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -65,11 +64,11 @@ public class XorShift64StarRandomGeneratorTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = xorShift.nextInt(101);
+				final int d = xorShift.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -81,13 +80,13 @@ public class XorShift64StarRandomGeneratorTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = xorShift.nextInt();
+				final int d = xorShift.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -101,13 +100,13 @@ public class XorShift64StarRandomGeneratorTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandomGenerator xorShift = new XorShift64StarRandomGenerator(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = xorShift.nextLong();
+				final long d = xorShift.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
@@ -121,8 +120,8 @@ public class XorShift64StarRandomGeneratorTest {
 
 	@Test
 	public void testSameAsRandom() {
-		XorShift64StarRandom xorShiftStarRandom = new XorShift64StarRandom(0);
-		XorShift64StarRandomGenerator xorShiftStar = new XorShift64StarRandomGenerator(0);
+		final XorShift64StarRandom xorShiftStarRandom = new XorShift64StarRandom(0);
+		final XorShift64StarRandomGenerator xorShiftStar = new XorShift64StarRandomGenerator(0);
 		for(int i = 1000000; i-- != 0;) {
 			assertEquals(xorShiftStar.nextLong(), xorShiftStarRandom.nextLong());
 			assertEquals(0, xorShiftStar.nextDouble(), xorShiftStarRandom.nextDouble());
diff --git a/test/it/unimi/dsi/util/XorShift64StarRandomTest.java b/test/it/unimi/dsi/util/XorShift64StarRandomTest.java
index 0f6f784..f6175c0 100644
--- a/test/it/unimi/dsi/util/XorShift64StarRandomTest.java
+++ b/test/it/unimi/dsi/util/XorShift64StarRandomTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,7 @@ package it.unimi.dsi.util;
  *
  */
 
+package it.unimi.dsi.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -32,11 +31,11 @@ public class XorShift64StarRandomTest {
 
 	@Test
 	public void testNextFloat() {
-		for (long seed : seeds) {
-			XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				float d = xorShiftRandom.nextFloat();
+				final float d = xorShiftRandom.nextFloat();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -48,11 +47,11 @@ public class XorShift64StarRandomTest {
 
 	@Test
 	public void testNextDouble() {
-		for (long seed : seeds) {
-			XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
 			double avg = 0;
 			for (int i = 1000000; i-- != 0;) {
-				double d = xorShiftRandom.nextDouble();
+				final double d = xorShiftRandom.nextDouble();
 				assertTrue(d < 1);
 				assertTrue(d >= 0);
 				avg += d;
@@ -64,11 +63,11 @@ public class XorShift64StarRandomTest {
 
 	@Test
 	public void testNextInt() {
-		for (long seed : seeds) {
-			XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
 			double avg = 0;
 			for (int i = 100000000; i-- != 0;) {
-				int d = xorShiftRandom.nextInt(101);
+				final int d = xorShiftRandom.nextInt(101);
 				assertTrue(d <= 100);
 				assertTrue(d >= 0);
 				avg += d;
@@ -80,13 +79,13 @@ public class XorShift64StarRandomTest {
 
 	@Test
 	public void testNextInt2() {
-		for (long seed : seeds) {
-			XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
 			final int[] count = new int[32];
 			long change = 0;
 			int prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				int d = xorShiftRandom.nextInt();
+				final int d = xorShiftRandom.nextInt();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 32; b-- != 0;)
 					if ((d & (1 << b)) != 0) count[b]++;
@@ -100,13 +99,13 @@ public class XorShift64StarRandomTest {
 
 	@Test
 	public void testNextLong() {
-		for (long seed : seeds) {
-			XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
+		for (final long seed : seeds) {
+			final XorShift64StarRandom xorShiftRandom = new XorShift64StarRandom(seed);
 			final int[] count = new int[64];
 			long change = 0;
 			long prev = 0;
 			for (int i = 1000000; i-- != 0;) {
-				long d = xorShiftRandom.nextLong();
+				final long d = xorShiftRandom.nextLong();
 				change += Long.bitCount(d ^ prev);
 				for (int b = 64; b-- != 0;)
 					if ((d & (1L << b)) != 0) count[b]++;
diff --git a/test/it/unimi/dsi/util/concurrent/ReorderingBlockingQueueTest.java b/test/it/unimi/dsi/util/concurrent/ReorderingBlockingQueueTest.java
index efe455f..6775560 100644
--- a/test/it/unimi/dsi/util/concurrent/ReorderingBlockingQueueTest.java
+++ b/test/it/unimi/dsi/util/concurrent/ReorderingBlockingQueueTest.java
@@ -1,5 +1,3 @@
-package it.unimi.dsi.util.concurrent;
-
 /*
  * DSI utilities
  *
@@ -20,6 +18,8 @@ package it.unimi.dsi.util.concurrent;
  *
  */
 
+package it.unimi.dsi.util.concurrent;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
-- 
GitLab