diff --git a/FCL/src/main/java/com/tungsten/fcl/util/ResourceNotFoundError.java b/FCL/src/main/java/com/tungsten/fcl/util/ResourceNotFoundError.java index 60045053..7a2672e3 100644 --- a/FCL/src/main/java/com/tungsten/fcl/util/ResourceNotFoundError.java +++ b/FCL/src/main/java/com/tungsten/fcl/util/ResourceNotFoundError.java @@ -19,7 +19,7 @@ package com.tungsten.fcl.util; import java.io.InputStream; -public class ResourceNotFoundError extends Error { +public final class ResourceNotFoundError extends Error { public ResourceNotFoundError(String message) { super(message); } diff --git a/FCL/src/main/java/com/tungsten/fcl/util/TaskCancellationAction.java b/FCL/src/main/java/com/tungsten/fcl/util/TaskCancellationAction.java index 262bfd79..b103330f 100644 --- a/FCL/src/main/java/com/tungsten/fcl/util/TaskCancellationAction.java +++ b/FCL/src/main/java/com/tungsten/fcl/util/TaskCancellationAction.java @@ -21,7 +21,7 @@ import com.tungsten.fcl.ui.TaskDialog; import java.util.function.Consumer; -public class TaskCancellationAction { +public final class TaskCancellationAction { public static TaskCancellationAction NORMAL = new TaskCancellationAction(() -> { }); diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/Holder.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/Holder.java index 8f75551c..6c92340f 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/Holder.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/Holder.java @@ -17,11 +17,26 @@ */ package com.tungsten.fclcore.util; +import com.tungsten.fclcore.fakefx.beans.InvalidationListener; +import com.tungsten.fclcore.fakefx.beans.Observable; + import java.util.Objects; -public final class Holder { +public final class Holder implements InvalidationListener { public T value; + public Holder() { + } + + public Holder(T value) { + this.value = value; + } + + @Override + public void invalidated(Observable observable) { + // no-op + } + @Override public int hashCode() { return Objects.hashCode(value); diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/InvocationDispatcher.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/InvocationDispatcher.java index 058b08e2..f126ebbc 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/InvocationDispatcher.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/InvocationDispatcher.java @@ -17,13 +17,12 @@ */ package com.tungsten.fclcore.util; -import java.util.Optional; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Supplier; -public class InvocationDispatcher implements Consumer { +public final class InvocationDispatcher implements Consumer { public static InvocationDispatcher runOn(Executor executor, Consumer action) { return new InvocationDispatcher<>(arg -> executor.execute(() -> { @@ -33,9 +32,8 @@ public class InvocationDispatcher implements Consumer { })); } - private Consumer> handler; - - private AtomicReference> pendingArg = new AtomicReference<>(); + private final Consumer> handler; + private final AtomicReference> pendingArg = new AtomicReference<>(); public InvocationDispatcher(Consumer> handler) { this.handler = handler; @@ -43,8 +41,8 @@ public class InvocationDispatcher implements Consumer { @Override public void accept(ARG arg) { - if (pendingArg.getAndSet(Optional.ofNullable(arg)) == null) { - handler.accept(() -> pendingArg.getAndSet(null).orElse(null)); + if (pendingArg.getAndSet(new Holder<>(arg)) == null) { + handler.accept(() -> pendingArg.getAndSet(null).value); } } } \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/StringUtils.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/StringUtils.java index 2cb0df5b..a6d96554 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/StringUtils.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/StringUtils.java @@ -404,7 +404,7 @@ public final class StringUtils { /** * Class for computing the longest common subsequence between strings. */ - public static class LongestCommonSubsequence { + public static final class LongestCommonSubsequence { // We reuse dynamic programming storage array here to reduce allocations. private final int[][] f; private final int maxLengthA; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/ToStringBuilder.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/ToStringBuilder.java index f8ebbb67..74143987 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/ToStringBuilder.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/ToStringBuilder.java @@ -17,7 +17,7 @@ */ package com.tungsten.fclcore.util; -public class ToStringBuilder { +public final class ToStringBuilder { private final StringBuilder stringBuilder; private boolean first = true; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/EnumOrdinalDeserializer.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/EnumOrdinalDeserializer.java index d6aa5a61..ed64e92d 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/EnumOrdinalDeserializer.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/EnumOrdinalDeserializer.java @@ -27,9 +27,9 @@ import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; -public class EnumOrdinalDeserializer> implements JsonDeserializer { +public final class EnumOrdinalDeserializer> implements JsonDeserializer { - private Map mapping = new HashMap<>(); + private final Map mapping = new HashMap<>(); public EnumOrdinalDeserializer(Class enumClass) { for (T constant : enumClass.getEnumConstants()) { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonMap.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonMap.java index a0d5c9ea..e7e24255 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonMap.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonMap.java @@ -26,7 +26,7 @@ import java.util.Map; * @param * @param */ -public class JsonMap extends HashMap { +public final class JsonMap extends HashMap { public JsonMap(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor); } diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonTypeAdapterFactory.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonTypeAdapterFactory.java index d36796f8..b577dc7f 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonTypeAdapterFactory.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/gson/JsonTypeAdapterFactory.java @@ -27,7 +27,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -public class JsonTypeAdapterFactory implements TypeAdapterFactory { +public final class JsonTypeAdapterFactory implements TypeAdapterFactory { public static final JsonTypeAdapterFactory INSTANCE = new JsonTypeAdapterFactory(); diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ChecksumMismatchException.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ChecksumMismatchException.java index 7f911465..b020b613 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ChecksumMismatchException.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ChecksumMismatchException.java @@ -23,7 +23,7 @@ import com.tungsten.fclcore.util.DigestUtils; import java.io.IOException; import java.nio.file.Path; -public class ChecksumMismatchException extends ArtifactMalformedException { +public final class ChecksumMismatchException extends ArtifactMalformedException { private final String algorithm; private final String expectedChecksum; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/HttpMultipartRequest.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/HttpMultipartRequest.java index 7097b482..3c8e62a9 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/HttpMultipartRequest.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/HttpMultipartRequest.java @@ -26,8 +26,8 @@ import java.net.HttpURLConnection; import static java.nio.charset.StandardCharsets.UTF_8; -public class HttpMultipartRequest implements Closeable { - private static final String endl = "\r\n"; +public final class HttpMultipartRequest implements Closeable { + private static final byte[] ENDL = {'\r', '\n'}; private final String boundary = "*****" + System.currentTimeMillis() + "*****"; private final HttpURLConnection urlConnection; @@ -44,7 +44,7 @@ public class HttpMultipartRequest implements Closeable { private void addLine(String content) throws IOException { stream.write(content.getBytes(UTF_8)); - stream.write(endl.getBytes(UTF_8)); + stream.write(ENDL); } public HttpMultipartRequest file(String name, String filename, String contentType, InputStream inputStream) throws IOException { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ResponseCodeException.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ResponseCodeException.java index 20dc982e..14690b8c 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ResponseCodeException.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/ResponseCodeException.java @@ -20,7 +20,7 @@ package com.tungsten.fclcore.util.io; import java.io.IOException; import java.net.URL; -public class ResponseCodeException extends IOException { +public final class ResponseCodeException extends IOException { private final URL url; private final int responseCode; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/Unzipper.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/Unzipper.java index b61faf36..c195519e 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/io/Unzipper.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/io/Unzipper.java @@ -24,7 +24,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; -public class Unzipper { +public final class Unzipper { private final Path zipFile, dest; private boolean replaceExistentFile = false; private boolean terminateIfSubDirectoryNotExists = false; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/skin/NormalizedSkin.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/skin/NormalizedSkin.java index df681a7c..0c5a3097 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/skin/NormalizedSkin.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/skin/NormalizedSkin.java @@ -23,7 +23,7 @@ import android.graphics.Bitmap; * Describes a Minecraft 1.8+ skin (64x64). * Old format skins are converted to the new format. */ -public class NormalizedSkin { +public final class NormalizedSkin { private static void copyImage(Bitmap src, Bitmap dst, int sx, int sy, int dx, int dy, int w, int h, boolean flipHorizontal) { for (int y = 0; y < h; y++) {