diff --git a/.github/scripts/generate-quality-report.py b/.github/scripts/generate-quality-report.py index ce74e9365c..f6565620fb 100755 --- a/.github/scripts/generate-quality-report.py +++ b/.github/scripts/generate-quality-report.py @@ -895,6 +895,18 @@ def _is_exempt(f: Finding) -> bool: print(f" - {v.rule}: {v.location} - {v.message}") exit(1) + pmd = parse_pmd() + if pmd: + forbidden_pmd_rules = { + "ClassWithOnlyPrivateConstructorsShouldBeFinal", + } + violations = [f for f in pmd.findings if f.rule in forbidden_pmd_rules] + if violations: + print("\n❌ Build failed due to forbidden PMD violations:") + for v in violations: + print(f" - {v.rule}: {v.location} - {v.message}") + exit(1) + if __name__ == "__main__": main() diff --git a/CodenameOne/src/com/codename1/charts/util/MathHelper.java b/CodenameOne/src/com/codename1/charts/util/MathHelper.java index 0998e7dd2b..02ce7c9eed 100644 --- a/CodenameOne/src/com/codename1/charts/util/MathHelper.java +++ b/CodenameOne/src/com/codename1/charts/util/MathHelper.java @@ -26,7 +26,7 @@ /** * Utility class for math operations. */ -public class MathHelper { +public final class MathHelper { /** A value that is used a null value. */ public static final double NULL_VALUE = -Double.MAX_VALUE + 1; /** diff --git a/CodenameOne/src/com/codename1/components/ClearableTextField.java b/CodenameOne/src/com/codename1/components/ClearableTextField.java index 02e1cfaa05..2c9dd37086 100644 --- a/CodenameOne/src/com/codename1/components/ClearableTextField.java +++ b/CodenameOne/src/com/codename1/components/ClearableTextField.java @@ -39,7 +39,7 @@ * * @author Shai Almog */ -public class ClearableTextField extends Container { +public final class ClearableTextField extends Container { private ClearableTextField() { super(new BorderLayout()); } diff --git a/CodenameOne/src/com/codename1/components/FileEncodedImage.java b/CodenameOne/src/com/codename1/components/FileEncodedImage.java index 6667675e3b..0e293fbe12 100644 --- a/CodenameOne/src/com/codename1/components/FileEncodedImage.java +++ b/CodenameOne/src/com/codename1/components/FileEncodedImage.java @@ -41,7 +41,7 @@ * * @author Shai Almog */ -public class FileEncodedImage extends EncodedImage { +public final class FileEncodedImage extends EncodedImage { private final String fileName; private final boolean keep; private byte[] data; diff --git a/CodenameOne/src/com/codename1/components/FileEncodedImageAsync.java b/CodenameOne/src/com/codename1/components/FileEncodedImageAsync.java index 1551d139b7..05e585eb89 100644 --- a/CodenameOne/src/com/codename1/components/FileEncodedImageAsync.java +++ b/CodenameOne/src/com/codename1/components/FileEncodedImageAsync.java @@ -41,7 +41,7 @@ * * @author Shai Almog */ -public class FileEncodedImageAsync extends EncodedImage { +public final class FileEncodedImageAsync extends EncodedImage { private static final Object LOCK = new Object(); private final String fileName; private boolean changePending; diff --git a/CodenameOne/src/com/codename1/components/InfiniteScrollAdapter.java b/CodenameOne/src/com/codename1/components/InfiniteScrollAdapter.java index 54986827ca..cb66480069 100644 --- a/CodenameOne/src/com/codename1/components/InfiniteScrollAdapter.java +++ b/CodenameOne/src/com/codename1/components/InfiniteScrollAdapter.java @@ -49,7 +49,7 @@ * * @author Shai Almog */ -public class InfiniteScrollAdapter { +public final class InfiniteScrollAdapter { private Container infiniteContainer; private Runnable fetchMore; private final Component ip; diff --git a/CodenameOne/src/com/codename1/components/ReplaceableImage.java b/CodenameOne/src/com/codename1/components/ReplaceableImage.java index 893ef939e0..382d483a48 100644 --- a/CodenameOne/src/com/codename1/components/ReplaceableImage.java +++ b/CodenameOne/src/com/codename1/components/ReplaceableImage.java @@ -32,7 +32,7 @@ * * @author Shai Almog */ -public class ReplaceableImage extends EncodedImage { +public final class ReplaceableImage extends EncodedImage { private boolean replaced; private byte[] data; private final boolean opaque; diff --git a/CodenameOne/src/com/codename1/components/StorageImage.java b/CodenameOne/src/com/codename1/components/StorageImage.java index 9486e7f15e..732c032c84 100644 --- a/CodenameOne/src/com/codename1/components/StorageImage.java +++ b/CodenameOne/src/com/codename1/components/StorageImage.java @@ -36,7 +36,7 @@ * * @author Shai Almog */ -public class StorageImage extends EncodedImage { +public final class StorageImage extends EncodedImage { private final String fileName; private final boolean keep; private byte[] data; diff --git a/CodenameOne/src/com/codename1/components/StorageImageAsync.java b/CodenameOne/src/com/codename1/components/StorageImageAsync.java index bc8454fc8c..b1d45a97f4 100644 --- a/CodenameOne/src/com/codename1/components/StorageImageAsync.java +++ b/CodenameOne/src/com/codename1/components/StorageImageAsync.java @@ -34,7 +34,7 @@ * * @author Shai Almog */ -public class StorageImageAsync extends EncodedImage { +public final class StorageImageAsync extends EncodedImage { private static final Object LOCK = new Object(); private final String fileName; private boolean changePending; diff --git a/CodenameOne/src/com/codename1/components/ToastBar.java b/CodenameOne/src/com/codename1/components/ToastBar.java index e79787908c..43a2ca62a4 100644 --- a/CodenameOne/src/com/codename1/components/ToastBar.java +++ b/CodenameOne/src/com/codename1/components/ToastBar.java @@ -82,7 +82,7 @@ * * @author shannah */ -public class ToastBar { +public final class ToastBar { /** * The default timeout for info/error messages diff --git a/CodenameOne/src/com/codename1/facebook/FaceBookAccess.java b/CodenameOne/src/com/codename1/facebook/FaceBookAccess.java index 1fcf018e80..0814951f53 100644 --- a/CodenameOne/src/com/codename1/facebook/FaceBookAccess.java +++ b/CodenameOne/src/com/codename1/facebook/FaceBookAccess.java @@ -53,7 +53,7 @@ * * @author Chen Fishbein */ -public class FaceBookAccess { +public final class FaceBookAccess { private static final String TEMP_STORAGE = "FaceBookAccesstmp"; private static String clientId = "132970916828080"; diff --git a/CodenameOne/src/com/codename1/io/FileSystemStorage.java b/CodenameOne/src/com/codename1/io/FileSystemStorage.java index d512f78f07..f5134002ca 100644 --- a/CodenameOne/src/com/codename1/io/FileSystemStorage.java +++ b/CodenameOne/src/com/codename1/io/FileSystemStorage.java @@ -47,7 +47,7 @@ * * @author Shai Almog */ -public class FileSystemStorage { +public final class FileSystemStorage { /** * Represents the type for the get root type method, this type generally represents the main * phone memory diff --git a/CodenameOne/src/com/codename1/io/NetworkManager.java b/CodenameOne/src/com/codename1/io/NetworkManager.java index 438917d40e..f2e6ca50a7 100644 --- a/CodenameOne/src/com/codename1/io/NetworkManager.java +++ b/CodenameOne/src/com/codename1/io/NetworkManager.java @@ -55,7 +55,7 @@ * * @author Shai Almog */ -public class NetworkManager { +public final class NetworkManager { /** * Indicates an unknown access point type */ diff --git a/CodenameOne/src/com/codename1/io/Socket.java b/CodenameOne/src/com/codename1/io/Socket.java index f4e0fbf733..140619266a 100644 --- a/CodenameOne/src/com/codename1/io/Socket.java +++ b/CodenameOne/src/com/codename1/io/Socket.java @@ -35,7 +35,7 @@ * * @author Shai Almog */ -public class Socket { +public final class Socket { private Socket() { } diff --git a/CodenameOne/src/com/codename1/io/services/CachedDataService.java b/CodenameOne/src/com/codename1/io/services/CachedDataService.java index 8dae13975b..721b58d312 100644 --- a/CodenameOne/src/com/codename1/io/services/CachedDataService.java +++ b/CodenameOne/src/com/codename1/io/services/CachedDataService.java @@ -38,7 +38,7 @@ * * @author Shai Almog */ -public class CachedDataService extends ConnectionRequest { +public final class CachedDataService extends ConnectionRequest { private final CachedData data = new CachedData(); private boolean responseProcessed; diff --git a/CodenameOne/src/com/codename1/location/GeofenceManager.java b/CodenameOne/src/com/codename1/location/GeofenceManager.java index 5d8dd9018d..347c12a8af 100644 --- a/CodenameOne/src/com/codename1/location/GeofenceManager.java +++ b/CodenameOne/src/com/codename1/location/GeofenceManager.java @@ -82,7 +82,7 @@ * * @author shannah */ -public class GeofenceManager implements Iterable { +public final class GeofenceManager implements Iterable { //private GeoStreamerAsyncDataSource dataSource; private static final String STORAGE_KEY = "$AsyncGeoStreamer.geofences$"; private static final String ACTIVE_FENCES_KEY = "$AsyncGeoStreamer.activegeofences$"; diff --git a/CodenameOne/src/com/codename1/processing/PrettyPrinter.java b/CodenameOne/src/com/codename1/processing/PrettyPrinter.java index 742abd064d..b77d722ea2 100644 --- a/CodenameOne/src/com/codename1/processing/PrettyPrinter.java +++ b/CodenameOne/src/com/codename1/processing/PrettyPrinter.java @@ -52,7 +52,7 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * * @author Eric Coolman (2012-03 - derivative work from original Sun source). */ -class PrettyPrinter { +final class PrettyPrinter { Map myHashMap; private PrettyPrinter(Map h) { diff --git a/CodenameOne/src/com/codename1/processing/Result.java b/CodenameOne/src/com/codename1/processing/Result.java index 96eddd8be2..2bb43575f9 100644 --- a/CodenameOne/src/com/codename1/processing/Result.java +++ b/CodenameOne/src/com/codename1/processing/Result.java @@ -92,7 +92,7 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * * @author Eric Coolman (2012-03 - derivative work from original Sun source). */ -public class Result { +public final class Result { public static final String JSON = "json"; public static final String XML = "xml"; diff --git a/CodenameOne/src/com/codename1/properties/PreferencesObject.java b/CodenameOne/src/com/codename1/properties/PreferencesObject.java index 5109441045..d3230c54ee 100644 --- a/CodenameOne/src/com/codename1/properties/PreferencesObject.java +++ b/CodenameOne/src/com/codename1/properties/PreferencesObject.java @@ -32,7 +32,7 @@ * * @author Shai Almog */ -public class PreferencesObject { +public final class PreferencesObject { private PropertyBusinessObject bo; private String prefix; private boolean bound; diff --git a/CodenameOne/src/com/codename1/properties/SQLMap.java b/CodenameOne/src/com/codename1/properties/SQLMap.java index 0ef30936c7..5cf3294965 100644 --- a/CodenameOne/src/com/codename1/properties/SQLMap.java +++ b/CodenameOne/src/com/codename1/properties/SQLMap.java @@ -42,7 +42,7 @@ * * @author Shai Almog */ -public class SQLMap { +public final class SQLMap { private boolean verbose = true; private Database db; diff --git a/CodenameOne/src/com/codename1/push/PushContent.java b/CodenameOne/src/com/codename1/push/PushContent.java index dd2d08b1d7..03f0ae7082 100644 --- a/CodenameOne/src/com/codename1/push/PushContent.java +++ b/CodenameOne/src/com/codename1/push/PushContent.java @@ -30,7 +30,7 @@ * * @author Steve Hannah */ -public class PushContent { +public final class PushContent { private static final String PROP_PREFIX = "com.codename1.push.prop."; private final String title; diff --git a/CodenameOne/src/com/codename1/system/DefaultCrashReporter.java b/CodenameOne/src/com/codename1/system/DefaultCrashReporter.java index 1a39f7c2a0..07dd4b79f2 100644 --- a/CodenameOne/src/com/codename1/system/DefaultCrashReporter.java +++ b/CodenameOne/src/com/codename1/system/DefaultCrashReporter.java @@ -43,7 +43,7 @@ * * @author Shai Almog */ -public class DefaultCrashReporter implements CrashReport { +public final class DefaultCrashReporter implements CrashReport { private static String errorText = "The application encountered an error, do you wish to report it?"; private static String sendButtonText = "Send"; private static String dontSendButtonText = "Don't Send"; diff --git a/CodenameOne/src/com/codename1/system/NativeLookup.java b/CodenameOne/src/com/codename1/system/NativeLookup.java index 8ffef44b24..1adc4152ff 100644 --- a/CodenameOne/src/com/codename1/system/NativeLookup.java +++ b/CodenameOne/src/com/codename1/system/NativeLookup.java @@ -38,7 +38,7 @@ * * @author Shai Almog */ -public class NativeLookup { +public final class NativeLookup { /** * Indicates whether stack traces should be printed when lookup fails */ diff --git a/CodenameOne/src/com/codename1/testing/TestUtils.java b/CodenameOne/src/com/codename1/testing/TestUtils.java index 8c71c872de..cdd5c002a1 100644 --- a/CodenameOne/src/com/codename1/testing/TestUtils.java +++ b/CodenameOne/src/com/codename1/testing/TestUtils.java @@ -49,7 +49,7 @@ * * @author Shai Almog */ -public class TestUtils { +public final class TestUtils { private static boolean verbose; private TestUtils() { diff --git a/CodenameOne/src/com/codename1/ui/FontImage.java b/CodenameOne/src/com/codename1/ui/FontImage.java index 6933e30e64..500f33e577 100644 --- a/CodenameOne/src/com/codename1/ui/FontImage.java +++ b/CodenameOne/src/com/codename1/ui/FontImage.java @@ -74,7 +74,7 @@ * * @author Shai Almog */ -public class FontImage extends Image { +public final class FontImage extends Image { /** * Material design icon font character code see * https://www.material.io/resources/icons/ for full list diff --git a/CodenameOne/src/com/codename1/ui/UIFragment.java b/CodenameOne/src/com/codename1/ui/UIFragment.java index 7950984479..3c6547851f 100644 --- a/CodenameOne/src/com/codename1/ui/UIFragment.java +++ b/CodenameOne/src/com/codename1/ui/UIFragment.java @@ -181,7 +181,7 @@ * @author shannah * @since 7.0 */ -public class UIFragment { +public final class UIFragment { // The root element of this template diff --git a/CodenameOne/src/com/codename1/ui/URLImage.java b/CodenameOne/src/com/codename1/ui/URLImage.java index 720d90e6ee..95d298dda6 100644 --- a/CodenameOne/src/com/codename1/ui/URLImage.java +++ b/CodenameOne/src/com/codename1/ui/URLImage.java @@ -70,7 +70,7 @@ * * @author Shai Almog */ -public class URLImage extends EncodedImage { +public final class URLImage extends EncodedImage { /** * Flag used by {@link #createCachedImage(java.lang.String, java.lang.String, com.codename1.ui.Image, int) }. diff --git a/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java b/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java index f8eea74be6..e381609409 100644 --- a/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java +++ b/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java @@ -40,7 +40,7 @@ * * @author Shai Almog */ -public class MorphTransition extends Transition { +public final class MorphTransition extends Transition { private int duration; private final HashMap fromTo = new HashMap(); private CC[] fromToComponents; diff --git a/CodenameOne/src/com/codename1/ui/html/HTMLInputFormat.java b/CodenameOne/src/com/codename1/ui/html/HTMLInputFormat.java index f6c4515e2b..58f02f4eff 100644 --- a/CodenameOne/src/com/codename1/ui/html/HTMLInputFormat.java +++ b/CodenameOne/src/com/codename1/ui/html/HTMLInputFormat.java @@ -37,7 +37,7 @@ * * @author Ofir Leitner */ -class HTMLInputFormat { +final class HTMLInputFormat { /** * The allowed literals in an input format defintion diff --git a/CodenameOne/src/com/codename1/ui/html/HTMLUtils.java b/CodenameOne/src/com/codename1/ui/html/HTMLUtils.java index 683268fd85..37bd0c72e4 100644 --- a/CodenameOne/src/com/codename1/ui/html/HTMLUtils.java +++ b/CodenameOne/src/com/codename1/ui/html/HTMLUtils.java @@ -31,7 +31,7 @@ * @author Ofir Leitner * @deprecated the HTML package is no longer used or maintained and may be removed in a future revision */ -public class HTMLUtils { +public final class HTMLUtils { /** * The char entities strings supported in XML. When a char entity is found these will be compared against first. diff --git a/CodenameOne/src/com/codename1/ui/plaf/RoundBorder.java b/CodenameOne/src/com/codename1/ui/plaf/RoundBorder.java index dc15281a83..6908b03572 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/RoundBorder.java +++ b/CodenameOne/src/com/codename1/ui/plaf/RoundBorder.java @@ -45,7 +45,7 @@ * * @author Shai Almog */ -public class RoundBorder extends Border { +public final class RoundBorder extends Border { private static final String CACHE_KEY = "cn1$$-rbcache"; // these allow us to have more than one border per component in cache which is important for selected/unselected/pressed values private static int instanceCounter; diff --git a/CodenameOne/src/com/codename1/ui/plaf/RoundRectBorder.java b/CodenameOne/src/com/codename1/ui/plaf/RoundRectBorder.java index 4d22101d86..a4285c06b4 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/RoundRectBorder.java +++ b/CodenameOne/src/com/codename1/ui/plaf/RoundRectBorder.java @@ -48,7 +48,7 @@ * * @author Shai Almog */ -public class RoundRectBorder extends Border { +public final class RoundRectBorder extends Border { private static final String CACHE_KEY = "cn1$$-rrbcache"; // these allow us to have more than one border per component in cache which is important for selected/unselected/pressed values private static int instanceCounter; diff --git a/CodenameOne/src/com/codename1/ui/spinner/DateTimeRenderer.java b/CodenameOne/src/com/codename1/ui/spinner/DateTimeRenderer.java index 6f66a7b824..143682d246 100644 --- a/CodenameOne/src/com/codename1/ui/spinner/DateTimeRenderer.java +++ b/CodenameOne/src/com/codename1/ui/spinner/DateTimeRenderer.java @@ -38,7 +38,7 @@ * @author Shai Almog * @deprecated use Picker instead */ -class DateTimeRenderer extends SpinnerRenderer { +final class DateTimeRenderer extends SpinnerRenderer { static final String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; diff --git a/CodenameOne/src/com/codename1/ui/util/Effects.java b/CodenameOne/src/com/codename1/ui/util/Effects.java index 9c928786fc..0602fb4846 100644 --- a/CodenameOne/src/com/codename1/ui/util/Effects.java +++ b/CodenameOne/src/com/codename1/ui/util/Effects.java @@ -36,7 +36,7 @@ * * @author Shai Almog */ -public class Effects { +public final class Effects { private Effects() { } diff --git a/CodenameOne/src/com/codename1/util/CallbackDispatcher.java b/CodenameOne/src/com/codename1/util/CallbackDispatcher.java index da3d3b2031..e6743cdb8d 100644 --- a/CodenameOne/src/com/codename1/util/CallbackDispatcher.java +++ b/CodenameOne/src/com/codename1/util/CallbackDispatcher.java @@ -29,7 +29,7 @@ * * @author shannah */ -public class CallbackDispatcher implements Runnable { +public final class CallbackDispatcher implements Runnable { private SuccessCallback success; private FailureCallback failure; private T arg; diff --git a/CodenameOne/src/com/codename1/util/EasyThread.java b/CodenameOne/src/com/codename1/util/EasyThread.java index 67b4acb5c3..1de655a29b 100644 --- a/CodenameOne/src/com/codename1/util/EasyThread.java +++ b/CodenameOne/src/com/codename1/util/EasyThread.java @@ -35,7 +35,7 @@ * * @author Shai Almog */ -public class EasyThread { +public final class EasyThread { private static final List globalErrorListenenrs = new ArrayList(); private final Object LOCK = new Object(); private List errorListenenrs; diff --git a/CodenameOne/src/com/codename1/util/TBitLevel.java b/CodenameOne/src/com/codename1/util/TBitLevel.java index d7e8e9ade1..39fc7fbe75 100644 --- a/CodenameOne/src/com/codename1/util/TBitLevel.java +++ b/CodenameOne/src/com/codename1/util/TBitLevel.java @@ -33,7 +33,7 @@ * All operations are provided in immutable way, and some in both mutable and * immutable. */ -class TBitLevel { +final class TBitLevel { /** * Just to denote that this class can't be instantiated. diff --git a/CodenameOne/src/com/codename1/util/TConversion.java b/CodenameOne/src/com/codename1/util/TConversion.java index 2f0e04ff14..35c74a79dd 100644 --- a/CodenameOne/src/com/codename1/util/TConversion.java +++ b/CodenameOne/src/com/codename1/util/TConversion.java @@ -21,7 +21,7 @@ * Static library that provides {@link TBigInteger} base conversion from/to any * integer represented in an {@link java.lang.String} Object. */ -class TConversion { +final class TConversion { /** * Holds the maximal exponent for each radix, so that radixdigitFitInInt[radix] diff --git a/CodenameOne/src/com/codename1/util/TElementary.java b/CodenameOne/src/com/codename1/util/TElementary.java index 6be5b7747b..1ef7e3e597 100644 --- a/CodenameOne/src/com/codename1/util/TElementary.java +++ b/CodenameOne/src/com/codename1/util/TElementary.java @@ -28,7 +28,7 @@ * In addition to this, some Inplace (mutable) methods are * provided. */ -class TElementary { +final class TElementary { /** * Just to denote that this class can't be instantiated diff --git a/CodenameOne/src/com/codename1/util/TLogical.java b/CodenameOne/src/com/codename1/util/TLogical.java index 659c0c5bb1..6c549ef635 100644 --- a/CodenameOne/src/com/codename1/util/TLogical.java +++ b/CodenameOne/src/com/codename1/util/TLogical.java @@ -28,7 +28,7 @@ *
  • xor
  • * */ -class TLogical { +final class TLogical { /** * Just to denote that this class can't be instantiated. diff --git a/CodenameOne/src/com/codename1/util/TMultiplication.java b/CodenameOne/src/com/codename1/util/TMultiplication.java index 57e36f1696..e31f0b0e14 100644 --- a/CodenameOne/src/com/codename1/util/TMultiplication.java +++ b/CodenameOne/src/com/codename1/util/TMultiplication.java @@ -20,7 +20,7 @@ /** * Static library that provides all multiplication of {@link TBigInteger} methods. */ -class TMultiplication { +final class TMultiplication { /** * Break point in digits (number of {@code int} elements) diff --git a/CodenameOne/src/com/codename1/util/TPrimality.java b/CodenameOne/src/com/codename1/util/TPrimality.java index c619da000e..02c720bccc 100644 --- a/CodenameOne/src/com/codename1/util/TPrimality.java +++ b/CodenameOne/src/com/codename1/util/TPrimality.java @@ -23,7 +23,7 @@ /** * Provides primality probabilistic methods. */ -class TPrimality { +final class TPrimality { /** * All prime numbers with bit length lesser than 10 bits.