From a09f772f40fdc39fa31e617c2222bfca6b889f08 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Mon, 26 Jan 2026 20:06:24 +0200 Subject: [PATCH] Fixes for PMD issues UselessOverridingMethod, UselessQualifiedThis etc. Also fixed AvoidBranchingStatementAsLastInLoop, AvoidUsingVolatile, DoNotCallGarbageCollectionExplicitly --- .github/scripts/generate-quality-report.py | 7 +++- .../src/com/codename1/capture/Capture.java | 2 + .../com/codename1/components/RSSReader.java | 7 ++-- .../components/StorageImageAsync.java | 2 + .../src/com/codename1/facebook/Album.java | 16 ++++++-- .../src/com/codename1/facebook/Page.java | 15 +++++-- .../src/com/codename1/facebook/Photo.java | 18 +++++++-- .../src/com/codename1/facebook/Post.java | 17 ++++++-- .../src/com/codename1/facebook/User.java | 24 ++++++++--- .../com/codename1/io/BufferedInputStream.java | 2 + .../io/services/CachedDataService.java | 8 ++-- .../io/services/TwitterRESTService.java | 7 ++-- .../codename1/location/GeofenceManager.java | 2 +- CodenameOne/src/com/codename1/push/Push.java | 7 ++-- .../src/com/codename1/social/Login.java | 6 +-- .../com/codename1/testing/TestReporting.java | 2 +- .../codename1/ui/AutoCompleteTextField.java | 4 +- .../com/codename1/ui/BrowserComponent.java | 5 --- .../src/com/codename1/ui/CheckBox.java | 5 --- .../ui/CommonProgressAnimations.java | 10 ----- .../src/com/codename1/ui/Container.java | 12 +----- CodenameOne/src/com/codename1/ui/Display.java | 2 +- CodenameOne/src/com/codename1/ui/Image.java | 7 +++- .../com/codename1/ui/InfiniteContainer.java | 4 +- CodenameOne/src/com/codename1/ui/List.java | 8 ---- .../src/com/codename1/ui/PeerComponent.java | 40 ------------------- CodenameOne/src/com/codename1/ui/Tabs.java | 2 +- .../src/com/codename1/ui/TextArea.java | 2 +- .../src/com/codename1/ui/TextSelection.java | 2 +- CodenameOne/src/com/codename1/ui/Toolbar.java | 4 +- .../src/com/codename1/ui/URLImage.java | 2 +- .../com/codename1/ui/html/HTMLComponent.java | 8 ++-- .../com/codename1/ui/html/HTMLElement.java | 9 ----- .../ui/html/ResourceThreadQueue.java | 2 +- .../codename1/ui/layouts/GridBagLayout.java | 6 +-- .../codename1/ui/layouts/mig/LayoutUtil.java | 4 +- .../com/codename1/ui/plaf/StyleParser.java | 4 +- .../src/com/codename1/ui/plaf/UIManager.java | 2 +- .../com/codename1/ui/spinner/BaseSpinner.java | 8 ---- .../com/codename1/util/CStringBuilder.java | 1 + maven/core-unittests/pmd.xml | 11 +++++ maven/core-unittests/spotbugs-exclude.xml | 17 ++++++++ 42 files changed, 159 insertions(+), 164 deletions(-) diff --git a/.github/scripts/generate-quality-report.py b/.github/scripts/generate-quality-report.py index d44163d5cf..fca959ca8f 100755 --- a/.github/scripts/generate-quality-report.py +++ b/.github/scripts/generate-quality-report.py @@ -919,7 +919,12 @@ def _is_exempt(f: Finding) -> bool: "UnusedFormalParameter", "SwitchStmtsShouldHaveDefault", "UnconditionalIfStatement", - "SimplifyConditional" + "SimplifyConditional", + "UselessOverridingMethod", + "UselessQualifiedThis", + "AvoidBranchingStatementAsLastInLoop", + "AvoidUsingVolatile", + "DoNotCallGarbageCollectionExplicitly" } violations = [f for f in pmd.findings if f.rule in forbidden_pmd_rules] if violations: diff --git a/CodenameOne/src/com/codename1/capture/Capture.java b/CodenameOne/src/com/codename1/capture/Capture.java index 6dd0eb1601..3777d5c1e2 100644 --- a/CodenameOne/src/com/codename1/capture/Capture.java +++ b/CodenameOne/src/com/codename1/capture/Capture.java @@ -249,6 +249,8 @@ public static void captureVideo(ActionListener response) { static class CallBack implements ActionListener, Runnable { String url; + // We need volatile due to the usage of double locking optimization + @SuppressWarnings("PMD.AvoidUsingVolatile") private volatile boolean completed; private int targetWidth = -1; private int targetHeight = -1; diff --git a/CodenameOne/src/com/codename1/components/RSSReader.java b/CodenameOne/src/com/codename1/components/RSSReader.java index 291e45ad30..1e0b1c43e3 100644 --- a/CodenameOne/src/com/codename1/components/RSSReader.java +++ b/CodenameOne/src/com/codename1/components/RSSReader.java @@ -502,12 +502,11 @@ public boolean equals(Object o) { return true; } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + (sourceForm != null ? sourceForm.hashCode() : 0); + return result; } } diff --git a/CodenameOne/src/com/codename1/components/StorageImageAsync.java b/CodenameOne/src/com/codename1/components/StorageImageAsync.java index 88ff48fc66..da4fd83568 100644 --- a/CodenameOne/src/com/codename1/components/StorageImageAsync.java +++ b/CodenameOne/src/com/codename1/components/StorageImageAsync.java @@ -40,7 +40,9 @@ public final class StorageImageAsync extends EncodedImage { private final Image placeholderImage; private boolean changePending; private boolean imageCreated; + @SuppressWarnings("PMD.AvoidUsingVolatile") private volatile byte[] imageData; + @SuppressWarnings("PMD.AvoidUsingVolatile") private volatile boolean queued; private StorageImageAsync(String fileName, Image placeholderImage) { diff --git a/CodenameOne/src/com/codename1/facebook/Album.java b/CodenameOne/src/com/codename1/facebook/Album.java index 0f3d5a268e..250df7fa6e 100644 --- a/CodenameOne/src/com/codename1/facebook/Album.java +++ b/CodenameOne/src/com/codename1/facebook/Album.java @@ -230,11 +230,19 @@ public boolean equals(Object o) { return super.equals(o); } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + from.hashCode(); + result = 31 * result + (description != null ? description.hashCode() : 0); + result = 31 * result + (location != null ? location.hashCode() : 0); + result = 31 * result + (link != null ? link.hashCode() : 0); + result = 31 * result + (cover_photo != null ? cover_photo.hashCode() : 0); + result = 31 * result + (privacy != null ? privacy.hashCode() : 0); + result = 31 * result + count; + result = 31 * result + (type != null ? type.hashCode() : 0); + result = 31 * result + (created_time != null ? created_time.hashCode() : 0); + result = 31 * result + (updated_time != null ? updated_time.hashCode() : 0); + return result; } } diff --git a/CodenameOne/src/com/codename1/facebook/Page.java b/CodenameOne/src/com/codename1/facebook/Page.java index d29bc02907..1ac39b5642 100644 --- a/CodenameOne/src/com/codename1/facebook/Page.java +++ b/CodenameOne/src/com/codename1/facebook/Page.java @@ -167,11 +167,18 @@ public boolean equals(Object o) { return super.equals(o); } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + (about != null ? about.hashCode() : 0); + result = 31 * result + (category != null ? category.hashCode() : 0); + result = 31 * result + (founded != null ? founded.hashCode() : 0); + result = 31 * result + likesCount; + result = 31 * result + (link != null ? link.hashCode() : 0); + result = 31 * result + (username != null ? username.hashCode() : 0); + result = 31 * result + (website != null ? website.hashCode() : 0); + result = 31 * result + (coverId != null ? coverId.hashCode() : 0); + result = 31 * result + (coverLink != null ? coverLink.hashCode() : 0); + return result; } } diff --git a/CodenameOne/src/com/codename1/facebook/Photo.java b/CodenameOne/src/com/codename1/facebook/Photo.java index 230ffa3a5d..bdb427c990 100644 --- a/CodenameOne/src/com/codename1/facebook/Photo.java +++ b/CodenameOne/src/com/codename1/facebook/Photo.java @@ -260,11 +260,21 @@ public boolean equals(Object o) { return super.equals(o); } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + from.hashCode(); + result = 31 * result + (iconUrl != null ? iconUrl.hashCode() : 0); + result = 31 * result + (pictureUrl != null ? pictureUrl.hashCode() : 0); + result = 31 * result + (sourceUrl != null ? sourceUrl.hashCode() : 0); + result = 31 * result + height; + result = 31 * result + width; + result = 31 * result + (link != null ? link.hashCode() : 0); + result = 31 * result + (created_time != null ? created_time.hashCode() : 0); + result = 31 * result + (updated_time != null ? updated_time.hashCode() : 0); + result = 31 * result + position; + result = 31 * result + (images != null ? images.hashCode() : 0); + result = 31 * result + (comments != null ? comments.hashCode() : 0); + return result; } } diff --git a/CodenameOne/src/com/codename1/facebook/Post.java b/CodenameOne/src/com/codename1/facebook/Post.java index 230df6db86..3d73123b6f 100644 --- a/CodenameOne/src/com/codename1/facebook/Post.java +++ b/CodenameOne/src/com/codename1/facebook/Post.java @@ -242,11 +242,20 @@ public boolean equals(Object o) { return super.equals(o); } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + (type != null ? type.hashCode() : 0); + result = 31 * result + (attribution != null ? attribution.hashCode() : 0); + result = 31 * result + (message != null ? message.hashCode() : 0); + result = 31 * result + (linkUrl != null ? linkUrl.hashCode() : 0); + result = 31 * result + (linkDescription != null ? linkDescription.hashCode() : 0); + result = 31 * result + (commentsCount != null ? commentsCount.hashCode() : 0); + result = 31 * result + (likes != null ? likes.hashCode() : 0); + result = 31 * result + (from != null ? from.hashCode() : 0); + result = 31 * result + (to != null ? to.hashCode() : 0); + result = 31 * result + (created_time != null ? created_time.hashCode() : 0); + result = 31 * result + (picture != null ? picture.hashCode() : 0); + return result; } } diff --git a/CodenameOne/src/com/codename1/facebook/User.java b/CodenameOne/src/com/codename1/facebook/User.java index fc2e4ec6e1..06b587cd12 100644 --- a/CodenameOne/src/com/codename1/facebook/User.java +++ b/CodenameOne/src/com/codename1/facebook/User.java @@ -300,12 +300,26 @@ public boolean equals(Object o) { return super.equals(o); } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + (username != null ? username.hashCode() : 0); + result = 31 * result + (first_name != null ? first_name.hashCode() : 0); + result = 31 * result + (last_name != null ? last_name.hashCode() : 0); + result = 31 * result + (link != null ? link.hashCode() : 0); + result = 31 * result + (about != null ? about.hashCode() : 0); + result = 31 * result + (birthday != null ? birthday.hashCode() : 0); + result = 31 * result + (email != null ? email.hashCode() : 0); + result = 31 * result + (website != null ? website.hashCode() : 0); + result = 31 * result + (bio != null ? bio.hashCode() : 0); + result = 31 * result + (quotes != null ? quotes.hashCode() : 0); + result = 31 * result + (gender != null ? gender.hashCode() : 0); + result = 31 * result + (relationship_status != null ? relationship_status.hashCode() : 0); + result = 31 * result + (int) (timezone ^ (timezone >>> 32)); + result = 31 * result + (last_updated != null ? last_updated.hashCode() : 0); + result = 31 * result + (locale != null ? locale.hashCode() : 0); + result = 31 * result + (location != null ? location.hashCode() : 0); + result = 31 * result + (hometown != null ? hometown.hashCode() : 0); + return result; } - } diff --git a/CodenameOne/src/com/codename1/io/BufferedInputStream.java b/CodenameOne/src/com/codename1/io/BufferedInputStream.java index e73f5dc851..a10717d2e4 100644 --- a/CodenameOne/src/com/codename1/io/BufferedInputStream.java +++ b/CodenameOne/src/com/codename1/io/BufferedInputStream.java @@ -35,6 +35,8 @@ */ public class BufferedInputStream extends InputStream { private static int streamCount = 0; + + @SuppressWarnings("PMD.AvoidUsingVolatile") private static volatile int defaultBufferSize = 8192; private final String name; private int actualAvailable = defaultBufferSize; diff --git a/CodenameOne/src/com/codename1/io/services/CachedDataService.java b/CodenameOne/src/com/codename1/io/services/CachedDataService.java index 221ef954c5..c2b2392138 100644 --- a/CodenameOne/src/com/codename1/io/services/CachedDataService.java +++ b/CodenameOne/src/com/codename1/io/services/CachedDataService.java @@ -97,12 +97,12 @@ public boolean equals(Object o) { return true; } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + data.hashCode(); + result = 31 * result + (responseProcessed ? 1 : 0); + return result; } /** diff --git a/CodenameOne/src/com/codename1/io/services/TwitterRESTService.java b/CodenameOne/src/com/codename1/io/services/TwitterRESTService.java index fe3ec08692..5b55250d93 100644 --- a/CodenameOne/src/com/codename1/io/services/TwitterRESTService.java +++ b/CodenameOne/src/com/codename1/io/services/TwitterRESTService.java @@ -137,12 +137,11 @@ public boolean equals(Object o) { return true; } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + (parseTree != null ? parseTree.hashCode() : 0); + return result; } /** diff --git a/CodenameOne/src/com/codename1/location/GeofenceManager.java b/CodenameOne/src/com/codename1/location/GeofenceManager.java index 7db92cdb5a..f9a22fce26 100644 --- a/CodenameOne/src/com/codename1/location/GeofenceManager.java +++ b/CodenameOne/src/com/codename1/location/GeofenceManager.java @@ -95,7 +95,7 @@ public final class GeofenceManager implements Iterable { */ private static final int defaultTimeout = 10000; private static int MAX_ACTIVE_GEOFENCES = 19; - private static volatile GeofenceManager instance; + private static GeofenceManager instance; // Reference to the last bubble set. Geofence lastBubble; /** diff --git a/CodenameOne/src/com/codename1/push/Push.java b/CodenameOne/src/com/codename1/push/Push.java index 95602681ea..41d8ac46ad 100644 --- a/CodenameOne/src/com/codename1/push/Push.java +++ b/CodenameOne/src/com/codename1/push/Push.java @@ -469,12 +469,11 @@ public boolean equals(Object o) { return true; } - /** - * {@inheritDoc} - */ @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + (successful ? 1 : 0); + return result; } } diff --git a/CodenameOne/src/com/codename1/social/Login.java b/CodenameOne/src/com/codename1/social/Login.java index 56dc8c8150..329950ddae 100644 --- a/CodenameOne/src/com/codename1/social/Login.java +++ b/CodenameOne/src/com/codename1/social/Login.java @@ -230,7 +230,7 @@ public void doLogout() { } else { setAccessToken(null); } - Preferences.delete(Login.this.getClass().getName() + "Token"); + Preferences.delete(getClass().getName() + "Token"); } /** @@ -320,7 +320,7 @@ public void setAccessToken(AccessToken token) { */ public void validateToken() throws IOException { - String token = Preferences.get(Login.this.getClass().getName() + "Token", null); + String token = Preferences.get(getClass().getName() + "Token", null); if (token == null || !validateToken(token)) { AccessToken accessTok = getAccessToken(); if (accessTok != null && accessTok.getRefreshToken() != null) { @@ -330,7 +330,7 @@ public void validateToken() throws IOException { System.out.println("Attempting to refresh the access token"); AccessToken newTok = refreshReq.get(5000); setAccessToken(newTok); - Preferences.set(Login.this.getClass().getName() + "Token", getAccessToken().getToken()); + Preferences.set(getClass().getName() + "Token", getAccessToken().getToken()); return; } catch (Throwable t) { } diff --git a/CodenameOne/src/com/codename1/testing/TestReporting.java b/CodenameOne/src/com/codename1/testing/TestReporting.java index 72686957e0..44d98a9ce4 100644 --- a/CodenameOne/src/com/codename1/testing/TestReporting.java +++ b/CodenameOne/src/com/codename1/testing/TestReporting.java @@ -37,7 +37,7 @@ * @author Shai Almog */ public class TestReporting { - private static volatile TestReporting instanceOverride; + private static TestReporting instanceOverride; private final Hashtable testsExecuted = new Hashtable(); /** diff --git a/CodenameOne/src/com/codename1/ui/AutoCompleteTextField.java b/CodenameOne/src/com/codename1/ui/AutoCompleteTextField.java index 57305c6c1d..b3025222d6 100644 --- a/CodenameOne/src/com/codename1/ui/AutoCompleteTextField.java +++ b/CodenameOne/src/com/codename1/ui/AutoCompleteTextField.java @@ -346,7 +346,7 @@ private void removePopup() { f = popup.getComponentForm(); } if (f != null) { - Container lay = f.getLayeredPane(AutoCompleteTextField.this.getClass(), true); + Container lay = f.getLayeredPane(getClass(), true); Container parent = popup.getParent(); if (parent != null) { lay.removeComponent(parent); @@ -447,7 +447,7 @@ public void actionPerformed(ActionEvent evt) { if (f != null) { if (popup.getParent() == null) { - Container lay = f.getLayeredPane(AutoCompleteTextField.this.getClass(), true); + Container lay = f.getLayeredPane(getClass(), true); lay.setLayout(new LayeredLayout()); Container wrapper = new Container(); wrapper.add(popup); diff --git a/CodenameOne/src/com/codename1/ui/BrowserComponent.java b/CodenameOne/src/com/codename1/ui/BrowserComponent.java index cc3968e469..9a3dcad12b 100644 --- a/CodenameOne/src/com/codename1/ui/BrowserComponent.java +++ b/CodenameOne/src/com/codename1/ui/BrowserComponent.java @@ -543,11 +543,6 @@ private SuccessCallback popReturnValueCallback(int id) { return null; } - @Override - protected void initComponent() { - super.initComponent(); - } - @Override protected void deinitialize() { uninstallMessageListener(); diff --git a/CodenameOne/src/com/codename1/ui/CheckBox.java b/CodenameOne/src/com/codename1/ui/CheckBox.java index ae3bb8e131..42ec5a2f41 100644 --- a/CodenameOne/src/com/codename1/ui/CheckBox.java +++ b/CodenameOne/src/com/codename1/ui/CheckBox.java @@ -204,11 +204,6 @@ protected String paramString() { return super.paramString() + ", selected = " + selected; } - @Override - void initComponentImpl() { - super.initComponentImpl(); - } - private void updateSide() { Boolean v = getUIManager().isThemeConstant("checkBoxOppositeSideBool"); if (v != null) { diff --git a/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java b/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java index 08cd98a9c9..2a826f6d3d 100644 --- a/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java +++ b/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java @@ -169,11 +169,6 @@ public static CircleProgress markComponentLoading(Component cmp) { return (CircleProgress) markComponentLoading(cmp, CircleProgress.class); } - @Override - public void paint(Graphics g) { - super.paint(g); - } - @Override public boolean animate() { step += stepSize; @@ -296,11 +291,6 @@ public boolean animate() { return true; } - @Override - public void paint(Graphics g) { - super.paint(g); - } - @Override protected void paintBackground(Graphics g) { strlen = loremIpsum.length(); diff --git a/CodenameOne/src/com/codename1/ui/Container.java b/CodenameOne/src/com/codename1/ui/Container.java index 4408e22004..2e9d0f8fee 100644 --- a/CodenameOne/src/com/codename1/ui/Container.java +++ b/CodenameOne/src/com/codename1/ui/Container.java @@ -1206,7 +1206,7 @@ void replace(final Component current, final Component next, boolean avoidRepaint Object constraint = layout.getComponentConstraint(current); if (constraint != null) { removeComponentImplNoAnimationSafety(current); - layout.addLayoutComponent(constraint, next, Container.this); + layout.addLayoutComponent(constraint, next, this); } else { removeComponentImplNoAnimationSafety(current); } @@ -3389,16 +3389,6 @@ public void paintComponentBackground(Graphics g) { } } - @Override - protected void paintBackground(Graphics g) { - super.paintBackground(g); - } - - @Override - protected void paintBorderBackground(Graphics g) { - super.paintBorderBackground(g); - } - /** * {@inheritDoc} */ diff --git a/CodenameOne/src/com/codename1/ui/Display.java b/CodenameOne/src/com/codename1/ui/Display.java index 8d619336ac..17e89beecf 100644 --- a/CodenameOne/src/com/codename1/ui/Display.java +++ b/CodenameOne/src/com/codename1/ui/Display.java @@ -997,7 +997,7 @@ public boolean isInTransition() { } // Seems to be a false positive on this rule - @SuppressWarnings("PMD.SimplifyConditional") + @SuppressWarnings({"PMD.SimplifyConditional", "PMD.AvoidBranchingStatementAsLastInLoop"}) private void paintTransitionAnimation() { Animation ani = animationQueue.get(0); if (!ani.animate()) { diff --git a/CodenameOne/src/com/codename1/ui/Image.java b/CodenameOne/src/com/codename1/ui/Image.java index 2305d1aa06..00c4638dcb 100644 --- a/CodenameOne/src/com/codename1/ui/Image.java +++ b/CodenameOne/src/com/codename1/ui/Image.java @@ -132,6 +132,7 @@ public static Image createIndexed(int width, int height, int[] palette, byte[] d * @return newly created image object * @throws java.io.IOException */ + @SuppressWarnings("PMD.DoNotCallGarbageCollectionExplicitly") public static Image createImage(String path) throws IOException { try { return new Image(Display.impl.createImage(path)); @@ -166,6 +167,7 @@ public static Image createImage(Object nativeImage) { * @return the newly created image * @throws java.io.IOException */ + @SuppressWarnings("PMD.DoNotCallGarbageCollectionExplicitly") public static Image createImage(InputStream stream) throws IOException { try { return new Image(Display.impl.createImage(stream)); @@ -173,7 +175,7 @@ public static Image createImage(InputStream stream) throws IOException { // Images have a major bug on many phones where they sometimes throw // an OOM with no reason. A system.gc followed by the same call over // solves the problem. This has something to do with the fact that - // there is no Image.dispose method in existance. + // there is no Image.dispose method in existence. System.gc(); System.gc(); return new Image(Display.impl.createImage(stream)); @@ -188,6 +190,7 @@ public static Image createImage(InputStream stream) throws IOException { * @param height the image height * @return an image from an RGB image */ + @SuppressWarnings("PMD.DoNotCallGarbageCollectionExplicitly") public static Image createImage(int[] rgb, int width, int height) { try { return new Image(Display.impl.createImage(rgb, width, height)); @@ -242,6 +245,7 @@ public static boolean isAlphaMutableImageSupported() { * @param fillColor the color with which the image should be initially filled * @return an image in a given width and height dimension */ + @SuppressWarnings("PMD.DoNotCallGarbageCollectionExplicitly") public static Image createImage(int width, int height, int fillColor) { try { return new Image(Display.impl.createMutableImage(width, height, fillColor)); @@ -264,6 +268,7 @@ public static Image createImage(int width, int height, int fillColor) { * @param len the length of the data in the array * @return the newly created image */ + @SuppressWarnings("PMD.DoNotCallGarbageCollectionExplicitly") public static Image createImage(byte[] bytes, int offset, int len) { try { Object o = Display.impl.createImage(bytes, offset, len); diff --git a/CodenameOne/src/com/codename1/ui/InfiniteContainer.java b/CodenameOne/src/com/codename1/ui/InfiniteContainer.java index c4bc1d1d9c..dc6364ab85 100644 --- a/CodenameOne/src/com/codename1/ui/InfiniteContainer.java +++ b/CodenameOne/src/com/codename1/ui/InfiniteContainer.java @@ -153,7 +153,7 @@ public void run() { }); } else { removeAll(); - InfiniteScrollAdapter.addMoreComponents(InfiniteContainer.this, cmps, shouldContinue(cmps)); + InfiniteScrollAdapter.addMoreComponents(this, cmps, shouldContinue(cmps)); requestingResults = false; } } @@ -187,7 +187,7 @@ public void run() { } }); } else { - InfiniteScrollAdapter.addMoreComponents(InfiniteContainer.this, cmps, shouldContinue(cmps)); + InfiniteScrollAdapter.addMoreComponents(this, cmps, shouldContinue(cmps)); requestingResults = false; } } diff --git a/CodenameOne/src/com/codename1/ui/List.java b/CodenameOne/src/com/codename1/ui/List.java index eea6bfd30e..54a4433b59 100644 --- a/CodenameOne/src/com/codename1/ui/List.java +++ b/CodenameOne/src/com/codename1/ui/List.java @@ -1632,14 +1632,6 @@ void focusGainedInternal() { } } - /** - * {@inheritDoc} - */ - @Override - void focusLostInternal() { - super.focusLostInternal(); - } - /** * Returns the gap between items * diff --git a/CodenameOne/src/com/codename1/ui/PeerComponent.java b/CodenameOne/src/com/codename1/ui/PeerComponent.java index 7f3ab579f1..4cbf53af8b 100644 --- a/CodenameOne/src/com/codename1/ui/PeerComponent.java +++ b/CodenameOne/src/com/codename1/ui/PeerComponent.java @@ -132,22 +132,6 @@ public boolean animate() { return false; } - /** - * {@inheritDoc} - */ - @Override - protected Dimension calcPreferredSize() { - return super.calcPreferredSize(); - } - - /** - * {@inheritDoc} - */ - @Override - protected Dimension calcScrollSize() { - return super.calcScrollSize(); - } - /** * {@inheritDoc} */ @@ -164,30 +148,6 @@ protected void deinitialize() { protected void fireClicked() { } - /** - * {@inheritDoc} - */ - @Override - protected void focusGained() { - super.focusGained(); - } - - /** - * {@inheritDoc} - */ - @Override - protected void focusLost() { - super.focusLost(); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean handlesInput() { - return super.handlesInput(); - } - /** * {@inheritDoc} */ diff --git a/CodenameOne/src/com/codename1/ui/Tabs.java b/CodenameOne/src/com/codename1/ui/Tabs.java index ed40169bef..4ce229fc20 100644 --- a/CodenameOne/src/com/codename1/ui/Tabs.java +++ b/CodenameOne/src/com/codename1/ui/Tabs.java @@ -1045,7 +1045,7 @@ public void setSelectedIndex(int index, boolean slideToSelected) { } slideToDestMotion = createTabSlideMotion(start, end); slideToDestMotion.start(); - form.registerAnimatedInternal(Tabs.this); + form.registerAnimatedInternal(this); active = index; } else { if (selectionListener != null) { diff --git a/CodenameOne/src/com/codename1/ui/TextArea.java b/CodenameOne/src/com/codename1/ui/TextArea.java index 38229b491b..13f1826fcd 100644 --- a/CodenameOne/src/com/codename1/ui/TextArea.java +++ b/CodenameOne/src/com/codename1/ui/TextArea.java @@ -2234,7 +2234,7 @@ protected boolean shouldRenderComponentSelection() { * @since 7.0 */ protected Spans calculateTextSelectionSpan(TextSelection sel) { - return getUIManager().getLookAndFeel().calculateTextAreaSpan(sel, TextArea.this); + return getUIManager().getLookAndFeel().calculateTextAreaSpan(sel, this); } /** diff --git a/CodenameOne/src/com/codename1/ui/TextSelection.java b/CodenameOne/src/com/codename1/ui/TextSelection.java index b4069b08b0..78c7eedc2d 100644 --- a/CodenameOne/src/com/codename1/ui/TextSelection.java +++ b/CodenameOne/src/com/codename1/ui/TextSelection.java @@ -698,7 +698,7 @@ public void selectAll() { selectedBounds.setBounds(0, 0, selectionRoot.getWidth(), selectionRoot.getHeight()); update(); selectionRoot.getComponentForm().revalidateLater(); - textSelectionListeners.fireActionEvent(new ActionEvent(TextSelection.this, Type.Change)); + textSelectionListeners.fireActionEvent(new ActionEvent(this, Type.Change)); } /** diff --git a/CodenameOne/src/com/codename1/ui/Toolbar.java b/CodenameOne/src/com/codename1/ui/Toolbar.java index 5cadf61170..3a689f5ee2 100644 --- a/CodenameOne/src/com/codename1/ui/Toolbar.java +++ b/CodenameOne/src/com/codename1/ui/Toolbar.java @@ -594,9 +594,9 @@ public void actionPerformed(ActionEvent evt) { */ public void showSearchBar(final ActionListener callback) { SearchBar s = new CallbackSearchBar(this, callback); - Form f = Toolbar.this.getComponentForm(); + Form f = getComponentForm(); setHidden(true); - f.removeComponentFromForm(Toolbar.this); + f.removeComponentFromForm(this); f.setToolbar(s); s.initSearchBar(); if (f == Display.INSTANCE.getCurrent()) { //NOPMD CompareObjectsWithEquals diff --git a/CodenameOne/src/com/codename1/ui/URLImage.java b/CodenameOne/src/com/codename1/ui/URLImage.java index 1cf0abc950..1c739b620b 100644 --- a/CodenameOne/src/com/codename1/ui/URLImage.java +++ b/CodenameOne/src/com/codename1/ui/URLImage.java @@ -569,7 +569,7 @@ public void run() { } } catch (IOException ioErr) { if (exceptionHandler != null) { - exceptionHandler.onError(URLImage.this, ioErr); + exceptionHandler.onError(this, ioErr); } else { throw new RuntimeException(ioErr.toString(), ioErr); } diff --git a/CodenameOne/src/com/codename1/ui/html/HTMLComponent.java b/CodenameOne/src/com/codename1/ui/html/HTMLComponent.java index de93c23b61..1af7a6b291 100644 --- a/CodenameOne/src/com/codename1/ui/html/HTMLComponent.java +++ b/CodenameOne/src/com/codename1/ui/html/HTMLComponent.java @@ -1032,7 +1032,7 @@ void setPage(final DocumentInfo docInfo) { this.pageURL = docInfo.getFullUrl(); if (handler instanceof AsyncDocumentRequestHandler) { setPageStatus(HTMLCallback.STATUS_REQUESTED); - ((AsyncDocumentRequestHandler) handler).resourceRequestedAsync(docInfo, HTMLComponent.this); + ((AsyncDocumentRequestHandler) handler).resourceRequestedAsync(docInfo, this); } else { Display.getInstance().startThread(new Runnable() { @@ -1321,9 +1321,9 @@ void displayPage() { } if (!marqueeComponents.isEmpty()) { - getComponentForm().registerAnimated(HTMLComponent.this); + getComponentForm().registerAnimated(this); int dir = getUIManager().getLookAndFeel().isRTL() ? 1 : -1; - marqueeMotion = Motion.createLinearMotion(0, dir * HTMLComponent.this.getWidth(), MARQUEE_DELAY / 2); + marqueeMotion = Motion.createLinearMotion(0, dir * getWidth(), MARQUEE_DELAY / 2); marqueeMotion.start(); } @@ -1348,7 +1348,7 @@ public boolean animate() { } if (marqueeMotion.isFinished()) { int dir = getUIManager().getLookAndFeel().isRTL() ? 1 : -1; - marqueeMotion = Motion.createLinearMotion(dir * -HTMLComponent.this.getWidth(), dir * HTMLComponent.this.getWidth(), MARQUEE_DELAY); + marqueeMotion = Motion.createLinearMotion(dir * -getWidth(), dir * getWidth(), MARQUEE_DELAY); marqueeMotion.start(); } diff --git a/CodenameOne/src/com/codename1/ui/html/HTMLElement.java b/CodenameOne/src/com/codename1/ui/html/HTMLElement.java index 81d9a64c72..f4a808df29 100644 --- a/CodenameOne/src/com/codename1/ui/html/HTMLElement.java +++ b/CodenameOne/src/com/codename1/ui/html/HTMLElement.java @@ -1051,15 +1051,6 @@ void addAssociatedComponentAt(int index, Component cmp) { comps.insertElementAt(cmp, index); } - - @Override - public void addChild(Element childElement) { - //if (((HTMLElement)childElement).getId()!=TAG_UNSUPPORTED) { - super.addChild(childElement); - //} - - } - /** * Returns whether this element supports the common core attributes. * These are attributes most HTML tags support, with a few exceptions that are checked here. diff --git a/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java b/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java index 40531eace5..8e1a02cfe5 100644 --- a/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java +++ b/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java @@ -360,7 +360,7 @@ static class ResourceThread implements Runnable, IOCallback { String imageUrl; DocumentRequestHandler handler; ResourceThreadQueue threadQueue; - volatile boolean cancelled; + boolean cancelled; HTMLComponent htmlC; Image img; DocumentInfo cssDocInfo; diff --git a/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java b/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java index 882a72ad6c..48e4c8e399 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java +++ b/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java @@ -48,9 +48,9 @@ public class GridBagLayout extends Layout { public int[] columnWidths; public int[] rowHeights; // Direct modification is forbidden - protected volatile Hashtable comptable; - protected volatile GridBagConstraints defaultConstraints; - protected volatile GridBagLayoutInfo layoutInfo; + protected Hashtable comptable; + protected GridBagConstraints defaultConstraints; + protected GridBagLayoutInfo layoutInfo; private ParentInfo lastParentInfo; public GridBagLayout() { diff --git a/CodenameOne/src/com/codename1/ui/layouts/mig/LayoutUtil.java b/CodenameOne/src/com/codename1/ui/layouts/mig/LayoutUtil.java index b7ce0dae40..e18c33bfba 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/mig/LayoutUtil.java +++ b/CodenameOne/src/com/codename1/ui/layouts/mig/LayoutUtil.java @@ -62,8 +62,8 @@ public final class LayoutUtil { */ static final int NOT_SET = Integer.MIN_VALUE + 12346; // Magic value... private static final IdentityHashMap SER_MAP = new IdentityHashMap(2); - private static volatile HashMap CR_MAP = null; - private static volatile HashMap DT_MAP = null; // The Containers that have design time. Value not used. + private static HashMap CR_MAP = null; + private static HashMap DT_MAP = null; // The Containers that have design time. Value not used. private static int eSz = 0; private static int globalDebugMillis = 0; diff --git a/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java b/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java index 3a7147e1d0..c29daeceb3 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java +++ b/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java @@ -1947,7 +1947,7 @@ private static double round(double d, int decimalPlaces) { * @return */ private String splicedImageToString() { - return getType() + " " + getSpliceImage() + " " + BorderInfo.this.getSpliceInsets(); + return getType() + " " + getSpliceImage() + " " + getSpliceInsets(); } /** @@ -2386,7 +2386,7 @@ public Border createBorder(Resources theme) { * @return 4-element array of insets. Indices {@link Component#TOP}, {@link Component#BOTTOM}, {@link Component#LEFT}, and {@link Component#RIGHT}. */ public double[] getSpliceInsets(double[] out) { - String[] parts = Util.split(BorderInfo.this.getSpliceInsets(), " "); + String[] parts = Util.split(getSpliceInsets(), " "); out[Component.TOP] = Double.parseDouble(parts[0]); out[Component.RIGHT] = Double.parseDouble(parts[1]); diff --git a/CodenameOne/src/com/codename1/ui/plaf/UIManager.java b/CodenameOne/src/com/codename1/ui/plaf/UIManager.java index 192053ad9b..9cf2d1002c 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/UIManager.java +++ b/CodenameOne/src/com/codename1/ui/plaf/UIManager.java @@ -60,7 +60,7 @@ */ public class UIManager { - static volatile UIManager instance; + static UIManager instance; /** * This member is used by the resource editor */ diff --git a/CodenameOne/src/com/codename1/ui/spinner/BaseSpinner.java b/CodenameOne/src/com/codename1/ui/spinner/BaseSpinner.java index 6926fc5b1f..acbec5041c 100644 --- a/CodenameOne/src/com/codename1/ui/spinner/BaseSpinner.java +++ b/CodenameOne/src/com/codename1/ui/spinner/BaseSpinner.java @@ -77,14 +77,6 @@ protected void initComponent() { void initSpinner() { } - /** - * {@inheritDoc} - */ - @Override - public void setUIID(String id) { - super.setUIID(id); - } - /** * {@inheritDoc} */ diff --git a/CodenameOne/src/com/codename1/util/CStringBuilder.java b/CodenameOne/src/com/codename1/util/CStringBuilder.java index ee8b25bc6d..813403998c 100644 --- a/CodenameOne/src/com/codename1/util/CStringBuilder.java +++ b/CodenameOne/src/com/codename1/util/CStringBuilder.java @@ -466,6 +466,7 @@ public CStringBuilder reverse() { * @return the string representation of the data in this builder. */ @Override + @SuppressWarnings("PMD.UselessOverridingMethod") public String toString() { /* Note: This method is required to workaround a compiler bug * in the RI javac (at least in 1.5.0_06) that will generate a diff --git a/maven/core-unittests/pmd.xml b/maven/core-unittests/pmd.xml index ba35c8793b..2c088bd470 100644 --- a/maven/core-unittests/pmd.xml +++ b/maven/core-unittests/pmd.xml @@ -5,6 +5,17 @@ xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> PMD rules for core unit tests. + + + + + + + + + diff --git a/maven/core-unittests/spotbugs-exclude.xml b/maven/core-unittests/spotbugs-exclude.xml index 2034340f51..a828df096d 100644 --- a/maven/core-unittests/spotbugs-exclude.xml +++ b/maven/core-unittests/spotbugs-exclude.xml @@ -243,6 +243,23 @@ + + + + + + + + + + + + + + + +