From cc1a15824475c7a2763c07df573cba96426de32a Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Sun, 1 Jan 2023 16:19:37 -0600 Subject: [PATCH 01/11] Update pom template with annotation processors --- .../resource/framework/pom.xml.template | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/resources/resource/framework/pom.xml.template b/src/main/resources/resource/framework/pom.xml.template index 818d800767..eaa2f6c963 100644 --- a/src/main/resources/resource/framework/pom.xml.template +++ b/src/main/resources/resource/framework/pom.xml.template @@ -167,6 +167,7 @@ + @@ -320,7 +321,21 @@ 11 true true - -parameters + -parameters + + + + + + + + + + + + + + From ea5667320c26db531501157fae9210511c3364ec Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Sun, 1 Jan 2023 16:19:48 -0600 Subject: [PATCH 02/11] Regen pom --- pom.xml | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cad68bce62..d17fcbf9ef 100644 --- a/pom.xml +++ b/pom.xml @@ -1309,6 +1309,16 @@ async-http-client 2.12.3 + + org.checkerframework + checker-qual + 3.28.0 + + + org.checkerframework + checker + 3.28.0 + @@ -1771,6 +1781,7 @@ + @@ -1924,7 +1935,21 @@ 11 true true - -parameters + -parameters + + + org.checkerframework.checker.nullness.NullnessChecker + + + org.checkerframework.checker.interning.InterningChecker + + + org.checkerframework.checker.fenum.FenumChecker + + + org.checkerframework.checker.formatter.FormatterChecker + + From 695ac8cb7839b44c7e0a5522317f4639b3aac301 Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 10:44:30 -0600 Subject: [PATCH 03/11] Add Checker dependencies --- src/main/java/org/myrobotlab/service/meta/RuntimeMeta.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/myrobotlab/service/meta/RuntimeMeta.java b/src/main/java/org/myrobotlab/service/meta/RuntimeMeta.java index eb52030d8d..1f967b6cfd 100644 --- a/src/main/java/org/myrobotlab/service/meta/RuntimeMeta.java +++ b/src/main/java/org/myrobotlab/service/meta/RuntimeMeta.java @@ -49,6 +49,11 @@ public RuntimeMeta() { // ws client sockets addDependency("org.asynchttpclient", "async-http-client", "2.12.3"); + // Checker framework + addDependency("org.checkerframework", "checker-qual", "3.28.0"); + addDependency("org.checkerframework", "checker", "3.28.0"); + addDependency("org.checkerframework", "checker-util", "3.28.0"); + } } From baf54346ab545dc743e2e2157d18111b941330eb Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 10:45:08 -0600 Subject: [PATCH 04/11] Add checker annotation processors, disable null checker and fenum checker --- .../resource/framework/pom.xml.template | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/resources/resource/framework/pom.xml.template b/src/main/resources/resource/framework/pom.xml.template index eaa2f6c963..fb2c5c5fc1 100644 --- a/src/main/resources/resource/framework/pom.xml.template +++ b/src/main/resources/resource/framework/pom.xml.template @@ -323,19 +323,19 @@ true -parameters - - - - - - - - - - - - - + + + + + org.checkerframework.checker.interning.InterningChecker + + + + + + org.checkerframework.checker.formatter.FormatterChecker + + From 0cd13e09715f43de89a2dc6ba23c01f2bc103813 Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 10:45:20 -0600 Subject: [PATCH 05/11] Regen pom --- pom.xml | 973 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 489 insertions(+), 484 deletions(-) diff --git a/pom.xml b/pom.xml index d17fcbf9ef..708c89d5ef 100644 --- a/pom.xml +++ b/pom.xml @@ -1,102 +1,102 @@ - - - 4.0.0 - org.myrobotlab - mrl - 0.0.1-SNAPSHOT - MyRobotLab - Open Source Creative Machine Control - - - false - - - - 1.1. - - ${maven.build.timestamp} - yyyyMMddHHmm - ${timestamp} - ${version.prefix}${build.number} - ${git.branch} - ${NODE_NAME} - ${NODE_LABELS} - - - - 11 - 11 - UTF-8 - - - + + + 4.0.0 + org.myrobotlab + mrl + 0.0.1-SNAPSHOT + MyRobotLab + Open Source Creative Machine Control + + + false + + + + 1.1. + + ${maven.build.timestamp} + yyyyMMddHHmm + ${timestamp} + ${version.prefix}${build.number} + ${git.branch} + ${NODE_NAME} + ${NODE_LABELS} + + + + 11 + 11 + UTF-8 + + + @@ -135,9 +135,9 @@ https://m2.dv8tion.net/releases - - - + + + @@ -1319,6 +1319,11 @@ checker 3.28.0 + + org.checkerframework + checker-util + 3.28.0 + @@ -1714,385 +1719,385 @@ - - - - - - false - src/main/resources - - - false - src/main/java - - ** - - - **/*.java - - - - - - false - src/test/resources - - - false - src/test/java - - ** - - - **/*.java - - - - - - - - - org.codehaus.mojo - properties-maven-plugin - 1.0.0 - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.1.0 - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - no-duplicate-declared-dependencies - - enforce - - - - - - - - - - - - - org.codehaus.mojo - properties-maven-plugin - - - initialize - - read-project-properties - - - - build.properties - - - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.1.0 - - - package - - shade - - - myrobotlab - - true - myrobotlab-full - false - - - - - org.myrobotlab.service.Runtime - ${version} - ${version} - - ${build.number} - ${maven.build.timestamp} - ${agent.name} - ${user.name} - - - ${git.tags} - ${git.branch} - ${git.dirty} - ${git.remote.origin.url} - ${git.commit.id} - ${git.commit.id.abbrev} - ${git.commit.id.full} - ${git.commit.id.describe} - ${git.commit.id.describe-short} - ${git.commit.user.name} - ${git.commit.user.email} - - ${git.commit.time} - ${git.closest.tag.name} - ${git.closest.tag.commit.count} - ${git.build.user.name} - ${git.build.user.email} - ${git.build.time} - ${git.build.version} - - - - - - - *:* - - module-info.class - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - assembly.xml - - myrobotlab - false - - - - trigger-assembly - package - - single - - - - - - - true - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 11 - 11 - true - true - -parameters - - - org.checkerframework.checker.nullness.NullnessChecker - - - org.checkerframework.checker.interning.InterningChecker - - - org.checkerframework.checker.fenum.FenumChecker - - - org.checkerframework.checker.formatter.FormatterChecker - - - - - - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - - - pl.project13.maven - git-commit-id-plugin - 3.0.1 - - - initialize - get-the-git-infos - - revision - - - - - ${project.basedir}/.git - git - false - true - ${project.build.outputDirectory}/git.properties - - - false - false - -dirty - - - - - - maven-surefire-plugin - - - -Djava.library.path=libraries/native -Djna.library.path=libraries/native ${argLine} - - **/*Test.java - - - **/integration/* - - - - - - 2.9 - - - - org.apache.maven.plugins - maven-clean-plugin - 2.3 - - - - data/.myrobotlab - false - - - libraries - - ** - - false - - - data - - ** - - - - resource - - ** - - - - src/main/resources/resource/framework - - **/serviceData.json - - false - - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.8 - - - - prepare-agent - - - - - report - test - - report - - - - - - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.21.0 - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.1 - - - - - myrobotlab - http://myrobotlab.org - - - github - https://github.com/MyRobotLab/myrobotlab/issues - - + + + + + + false + src/main/resources + + + false + src/main/java + + ** + + + **/*.java + + + + + + false + src/test/resources + + + false + src/test/java + + ** + + + **/*.java + + + + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.0.0 + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.1.0 + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + no-duplicate-declared-dependencies + + enforce + + + + + + + + + + + + + org.codehaus.mojo + properties-maven-plugin + + + initialize + + read-project-properties + + + + build.properties + + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + myrobotlab + + true + myrobotlab-full + false + + + + + org.myrobotlab.service.Runtime + ${version} + ${version} + + ${build.number} + ${maven.build.timestamp} + ${agent.name} + ${user.name} + + + ${git.tags} + ${git.branch} + ${git.dirty} + ${git.remote.origin.url} + ${git.commit.id} + ${git.commit.id.abbrev} + ${git.commit.id.full} + ${git.commit.id.describe} + ${git.commit.id.describe-short} + ${git.commit.user.name} + ${git.commit.user.email} + + ${git.commit.time} + ${git.closest.tag.name} + ${git.closest.tag.commit.count} + ${git.build.user.name} + ${git.build.user.email} + ${git.build.time} + ${git.build.version} + + + + + + + *:* + + module-info.class + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + assembly.xml + + myrobotlab + false + + + + trigger-assembly + package + + single + + + + + + + true + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 11 + 11 + true + true + -parameters + + + + + + org.checkerframework.checker.interning.InterningChecker + + + + + + org.checkerframework.checker.formatter.FormatterChecker + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.3 + + + + pl.project13.maven + git-commit-id-plugin + 3.0.1 + + + initialize + get-the-git-infos + + revision + + + + + ${project.basedir}/.git + git + false + true + ${project.build.outputDirectory}/git.properties + + + false + false + -dirty + + + + + + maven-surefire-plugin + + + -Djava.library.path=libraries/native -Djna.library.path=libraries/native ${argLine} + + **/*Test.java + + + **/integration/* + + + + + + 2.9 + + + + org.apache.maven.plugins + maven-clean-plugin + 2.3 + + + + data/.myrobotlab + false + + + libraries + + ** + + false + + + data + + ** + + + + resource + + ** + + + + src/main/resources/resource/framework + + **/serviceData.json + + false + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.8 + + + + prepare-agent + + + + + report + test + + report + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.21.0 + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.1 + + + + + myrobotlab + http://myrobotlab.org + + + github + https://github.com/MyRobotLab/myrobotlab/issues + + From 707380a219d2d23f201c5d70d13b527a5baba3b6 Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 10:46:32 -0600 Subject: [PATCH 06/11] Suppress warnings on Swing guis --- src/main/java/org/myrobotlab/service/SwingGui.java | 8 +++++--- src/main/java/org/myrobotlab/service/WebGui.java | 8 +++++--- .../org/myrobotlab/swing/Adafruit16CServoDriverGui.java | 1 + src/main/java/org/myrobotlab/swing/AdafruitIna219Gui.java | 1 + .../java/org/myrobotlab/swing/AdafruitMotorHat4PiGui.java | 1 + src/main/java/org/myrobotlab/swing/Ads1115Gui.java | 1 + src/main/java/org/myrobotlab/swing/ArduinoGui.java | 2 ++ src/main/java/org/myrobotlab/swing/BlenderGui.java | 1 + src/main/java/org/myrobotlab/swing/ClockGui.java | 5 ++++- src/main/java/org/myrobotlab/swing/DiyServoGui.java | 1 + .../java/org/myrobotlab/swing/FiniteStateMachineGui.java | 1 + src/main/java/org/myrobotlab/swing/Hd44780Gui.java | 1 + src/main/java/org/myrobotlab/swing/I2cMuxGui.java | 1 + .../java/org/myrobotlab/swing/IntegratedMovementGui.java | 1 + src/main/java/org/myrobotlab/swing/JoystickGui.java | 2 ++ src/main/java/org/myrobotlab/swing/KeyboardGui.java | 1 + src/main/java/org/myrobotlab/swing/Lm75aGui.java | 1 + src/main/java/org/myrobotlab/swing/LogGui.java | 1 + src/main/java/org/myrobotlab/swing/MotorDualPwmGui.java | 2 ++ src/main/java/org/myrobotlab/swing/MotorGui.java | 2 ++ src/main/java/org/myrobotlab/swing/MotorHat4PiGui.java | 2 ++ src/main/java/org/myrobotlab/swing/MotorPortGui.java | 2 ++ src/main/java/org/myrobotlab/swing/MqttGui.java | 1 + src/main/java/org/myrobotlab/swing/OculusRiftGui.java | 4 ++-- src/main/java/org/myrobotlab/swing/OledSsd1306Gui.java | 1 + src/main/java/org/myrobotlab/swing/OpenCVGui.java | 1 + src/main/java/org/myrobotlab/swing/OpenNiGui.java | 1 + src/main/java/org/myrobotlab/swing/Pcf8574Gui.java | 1 + src/main/java/org/myrobotlab/swing/ProgramABGui.java | 4 +++- src/main/java/org/myrobotlab/swing/PythonGui.java | 7 +++++-- src/main/java/org/myrobotlab/swing/RuntimeGui.java | 4 +++- src/main/java/org/myrobotlab/swing/SecurityGui.java | 1 + src/main/java/org/myrobotlab/swing/SerialGui.java | 2 ++ src/main/java/org/myrobotlab/swing/ServiceGui.java | 4 ++++ src/main/java/org/myrobotlab/swing/ServoGui.java | 1 + src/main/java/org/myrobotlab/swing/ServoMixerGui.java | 1 + src/main/java/org/myrobotlab/swing/SolrGui.java | 1 + src/main/java/org/myrobotlab/swing/SwingGuiGui.java | 1 + src/main/java/org/myrobotlab/swing/ThingSpeakGui.java | 1 + src/main/java/org/myrobotlab/swing/TwitterGui.java | 1 + .../org/myrobotlab/swing/WebkitSpeechRecognitionGui.java | 1 + .../swing/abstracts/AbstractSpeechSynthesisGui.java | 1 + .../myrobotlab/swing/opencv/OpenCVFilterAffineGui.java | 2 ++ .../org/myrobotlab/swing/opencv/OpenCVFilterCannyGui.java | 1 + .../myrobotlab/swing/opencv/OpenCVFilterDetectorGui.java | 1 + .../myrobotlab/swing/opencv/OpenCVFilterDilateGui.java | 1 + .../org/myrobotlab/swing/opencv/OpenCVFilterErodeGui.java | 1 + .../swing/opencv/OpenCVFilterFaceDetectGui.java | 1 + .../swing/opencv/OpenCVFilterFaceRecognizerGui.java | 1 + .../myrobotlab/swing/opencv/OpenCVFilterInRangeGui.java | 1 + .../swing/opencv/OpenCVFilterKinectDepthGui.java | 1 + .../swing/opencv/OpenCVFilterKinectPointCloudGui.java | 1 + .../swing/opencv/OpenCVFilterLKOpticalTrackGui.java | 1 + .../swing/opencv/OpenCVFilterMiniXceptionGui.java | 1 + .../org/myrobotlab/swing/opencv/OpenCVFilterSURFGui.java | 1 + .../myrobotlab/swing/opencv/OpenCVFilterTrackerGui.java | 1 + .../org/myrobotlab/swing/opencv/OpenCVFilterYoloGui.java | 1 + .../swing/widget/Motor_Adafruit16CServoDriverGui.java | 1 + .../swing/widget/Motor_AdafruitMotorShieldGui.java | 1 + .../org/myrobotlab/swing/widget/Motor_ArduinoGui.java | 1 + .../org/myrobotlab/swing/widget/Motor_SaberToothGui.java | 1 + src/main/java/org/myrobotlab/swing/widget/PinGui.java | 1 + src/main/java/org/myrobotlab/swing/widget/PortGui.java | 1 + .../swing/widget/Stepper_AdafruitMotorShieldGui.java | 1 + .../org/myrobotlab/swing/widget/Stepper_ArduinoGui.java | 1 + 65 files changed, 96 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/myrobotlab/service/SwingGui.java b/src/main/java/org/myrobotlab/service/SwingGui.java index c27951c118..1e0c36d59a 100644 --- a/src/main/java/org/myrobotlab/service/SwingGui.java +++ b/src/main/java/org/myrobotlab/service/SwingGui.java @@ -60,6 +60,7 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.Instantiator; import org.myrobotlab.framework.Message; @@ -280,6 +281,7 @@ public void about() { } @Override + @SuppressWarnings("not.interned") public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); Object o = e.getSource(); @@ -564,7 +566,7 @@ public JMenuBar createMenu() { * gui * */ - public void subscribeToServiceMethod(String key, ServiceGui sg) { + public void subscribeToServiceMethod(String key, @FindDistinct ServiceGui sg) { List list = null; if (nameMethodCallbackMap.containsKey(key)) { list = nameMethodCallbackMap.get(key); @@ -574,10 +576,10 @@ public void subscribeToServiceMethod(String key, ServiceGui sg) { } boolean found = false; - for (int i = 0; i < list.size(); ++i) { - ServiceGui existingSg = list.get(i); + for (ServiceGui existingSg : list) { if (existingSg == sg) { found = true; + break; } } if (!found) { diff --git a/src/main/java/org/myrobotlab/service/WebGui.java b/src/main/java/org/myrobotlab/service/WebGui.java index 51619d3c64..5ff28715b2 100644 --- a/src/main/java/org/myrobotlab/service/WebGui.java +++ b/src/main/java/org/myrobotlab/service/WebGui.java @@ -43,6 +43,8 @@ import org.atmosphere.nettosphere.Nettosphere; //import org.jboss.netty.handler.ssl.SslContext; //import org.jboss.netty.handler.ssl.util.SelfSignedCertificate; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.Format; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.MRLListener; import org.myrobotlab.framework.Message; @@ -238,7 +240,7 @@ private static SSLContext createSSLContext2() { public boolean isSsl = false; - public String startURL = "http://localhost:%d/#/tabs"; + public @Format(ConversionCategory.INT) String startURL = "http://localhost:%d/#/tabs"; transient LiveVideoStreamHandler stream = new LiveVideoStreamHandler(); @@ -694,7 +696,7 @@ public void handle(AtmosphereResource r) { if (clazz == null) { log.error("cannot derive local type from service {}", serviceName); } - + Object[] params = cache.getDecodedJsonParameters(clazz, msg.method, msg.data); Method method = cache.getMethod(clazz, msg.method, params); @@ -1164,7 +1166,7 @@ public void start() { } } - public void startBrowser(String URL) { + public void startBrowser(@Format(ConversionCategory.INT) String URL) { BareBonesBrowserLaunch.openURL(String.format(URL, port)); } diff --git a/src/main/java/org/myrobotlab/swing/Adafruit16CServoDriverGui.java b/src/main/java/org/myrobotlab/swing/Adafruit16CServoDriverGui.java index bbd5dbad11..2ff579275e 100644 --- a/src/main/java/org/myrobotlab/swing/Adafruit16CServoDriverGui.java +++ b/src/main/java/org/myrobotlab/swing/Adafruit16CServoDriverGui.java @@ -74,6 +74,7 @@ public Adafruit16CServoDriverGui(final String boundServiceName, final SwingGui m restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent event) { // TODO Auto-generated method stub diff --git a/src/main/java/org/myrobotlab/swing/AdafruitIna219Gui.java b/src/main/java/org/myrobotlab/swing/AdafruitIna219Gui.java index b6a6810809..7cee781fcd 100644 --- a/src/main/java/org/myrobotlab/swing/AdafruitIna219Gui.java +++ b/src/main/java/org/myrobotlab/swing/AdafruitIna219Gui.java @@ -104,6 +104,7 @@ public AdafruitIna219Gui(final String boundServiceName, final SwingGui myService restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent event) { // TODO Auto-generated method stub diff --git a/src/main/java/org/myrobotlab/swing/AdafruitMotorHat4PiGui.java b/src/main/java/org/myrobotlab/swing/AdafruitMotorHat4PiGui.java index 309b8eb6bc..b50cf1c000 100644 --- a/src/main/java/org/myrobotlab/swing/AdafruitMotorHat4PiGui.java +++ b/src/main/java/org/myrobotlab/swing/AdafruitMotorHat4PiGui.java @@ -74,6 +74,7 @@ public AdafruitMotorHat4PiGui(final String boundServiceName, final SwingGui mySe restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent event) { // TODO Auto-generated method stub diff --git a/src/main/java/org/myrobotlab/swing/Ads1115Gui.java b/src/main/java/org/myrobotlab/swing/Ads1115Gui.java index 385664a05b..a0b402339d 100644 --- a/src/main/java/org/myrobotlab/swing/Ads1115Gui.java +++ b/src/main/java/org/myrobotlab/swing/Ads1115Gui.java @@ -99,6 +99,7 @@ public Ads1115Gui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { log.info("Ads1115GUI actionPerformed"); diff --git a/src/main/java/org/myrobotlab/swing/ArduinoGui.java b/src/main/java/org/myrobotlab/swing/ArduinoGui.java index ca5be67880..163c611c4f 100644 --- a/src/main/java/org/myrobotlab/swing/ArduinoGui.java +++ b/src/main/java/org/myrobotlab/swing/ArduinoGui.java @@ -177,6 +177,7 @@ void removeListeners() { * The guts of the business logic of handling all the graphical components and * their relations with each other. */ + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); @@ -484,6 +485,7 @@ public void onState(final Arduino arduino) { update(arduino); } + @SuppressWarnings("not.interned") @Override public void itemStateChanged(ItemEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/BlenderGui.java b/src/main/java/org/myrobotlab/swing/BlenderGui.java index ba5d0df67c..1cd47568dd 100644 --- a/src/main/java/org/myrobotlab/swing/BlenderGui.java +++ b/src/main/java/org/myrobotlab/swing/BlenderGui.java @@ -55,6 +55,7 @@ public BlenderGui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/ClockGui.java b/src/main/java/org/myrobotlab/swing/ClockGui.java index 01a4dcf865..8034921f37 100644 --- a/src/main/java/org/myrobotlab/swing/ClockGui.java +++ b/src/main/java/org/myrobotlab/swing/ClockGui.java @@ -35,6 +35,8 @@ import javax.swing.JLabel; import javax.swing.JTextField; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.Format; import org.myrobotlab.service.Clock; import org.myrobotlab.service.SwingGui; @@ -44,7 +46,7 @@ public class ClockGui extends ServiceGui implements ActionListener { JButton startClock = new JButton("start clock"); JLabel clockDisplay = new JLabel("

00:00:00.

"); - String displayFormat = "

%s

"; + @Format(ConversionCategory.GENERAL) String displayFormat = "

%s

"; DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); JTextField interval = new JTextField("1000", 8); @@ -56,6 +58,7 @@ public ClockGui(final String boundServiceName, final SwingGui myService) { startClock.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/DiyServoGui.java b/src/main/java/org/myrobotlab/swing/DiyServoGui.java index 789ca6fdc8..6dd0a88911 100644 --- a/src/main/java/org/myrobotlab/swing/DiyServoGui.java +++ b/src/main/java/org/myrobotlab/swing/DiyServoGui.java @@ -446,6 +446,7 @@ public DiyServoGui(final String boundServiceName, final SwingGui myService) { } // SwingGui's action processing section - data from user + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent event) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/FiniteStateMachineGui.java b/src/main/java/org/myrobotlab/swing/FiniteStateMachineGui.java index c9e1644cb6..579c84b855 100644 --- a/src/main/java/org/myrobotlab/swing/FiniteStateMachineGui.java +++ b/src/main/java/org/myrobotlab/swing/FiniteStateMachineGui.java @@ -70,6 +70,7 @@ public FiniteStateMachineGui(final String boundServiceName, final SwingGui mySer set.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/Hd44780Gui.java b/src/main/java/org/myrobotlab/swing/Hd44780Gui.java index f8dd4d78bf..8d038e5b90 100644 --- a/src/main/java/org/myrobotlab/swing/Hd44780Gui.java +++ b/src/main/java/org/myrobotlab/swing/Hd44780Gui.java @@ -81,6 +81,7 @@ public Hd44780Gui(final String boundServiceName, final SwingGui myService) throw save.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent event) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/I2cMuxGui.java b/src/main/java/org/myrobotlab/swing/I2cMuxGui.java index 47d24e1cce..2d0fd640b7 100644 --- a/src/main/java/org/myrobotlab/swing/I2cMuxGui.java +++ b/src/main/java/org/myrobotlab/swing/I2cMuxGui.java @@ -82,6 +82,7 @@ public I2cMuxGui(final String boundServiceName, final SwingGui myService) { restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/IntegratedMovementGui.java b/src/main/java/org/myrobotlab/swing/IntegratedMovementGui.java index c73527b3bf..1bc357ec4d 100644 --- a/src/main/java/org/myrobotlab/swing/IntegratedMovementGui.java +++ b/src/main/java/org/myrobotlab/swing/IntegratedMovementGui.java @@ -94,6 +94,7 @@ private JPanel buildControl() { return controlPane; } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { log.info("IntegratedMovementGUI actionPerformed"); diff --git a/src/main/java/org/myrobotlab/swing/JoystickGui.java b/src/main/java/org/myrobotlab/swing/JoystickGui.java index a23e358a66..f3710bf1fe 100644 --- a/src/main/java/org/myrobotlab/swing/JoystickGui.java +++ b/src/main/java/org/myrobotlab/swing/JoystickGui.java @@ -95,6 +95,7 @@ public JoystickGui(final String boundServiceName, final SwingGui myService) { refresh.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); @@ -234,6 +235,7 @@ public void onJoystickInput(final JoystickData input) { } } + @SuppressWarnings("not.interned") @Override public void itemStateChanged(final ItemEvent e) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/KeyboardGui.java b/src/main/java/org/myrobotlab/swing/KeyboardGui.java index 66c603640b..761becf7ea 100644 --- a/src/main/java/org/myrobotlab/swing/KeyboardGui.java +++ b/src/main/java/org/myrobotlab/swing/KeyboardGui.java @@ -106,6 +106,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/Lm75aGui.java b/src/main/java/org/myrobotlab/swing/Lm75aGui.java index dde57dd7f0..386d5c45ac 100644 --- a/src/main/java/org/myrobotlab/swing/Lm75aGui.java +++ b/src/main/java/org/myrobotlab/swing/Lm75aGui.java @@ -85,6 +85,7 @@ public Lm75aGui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/LogGui.java b/src/main/java/org/myrobotlab/swing/LogGui.java index c483616fc0..ec020704e7 100644 --- a/src/main/java/org/myrobotlab/swing/LogGui.java +++ b/src/main/java/org/myrobotlab/swing/LogGui.java @@ -38,6 +38,7 @@ public LogGui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent action) { Object o = action.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/MotorDualPwmGui.java b/src/main/java/org/myrobotlab/swing/MotorDualPwmGui.java index 9f4aba578b..a81790c3f3 100644 --- a/src/main/java/org/myrobotlab/swing/MotorDualPwmGui.java +++ b/src/main/java/org/myrobotlab/swing/MotorDualPwmGui.java @@ -130,6 +130,7 @@ public MotorDualPwmGui(final String boundServiceName, final SwingGui myService) restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { @@ -236,6 +237,7 @@ public void setEnabled(boolean enable) { } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent ce) { Object source = ce.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/MotorGui.java b/src/main/java/org/myrobotlab/swing/MotorGui.java index 30d1c72a3b..99dfd9e828 100644 --- a/src/main/java/org/myrobotlab/swing/MotorGui.java +++ b/src/main/java/org/myrobotlab/swing/MotorGui.java @@ -164,6 +164,7 @@ public MotorGui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); @@ -251,6 +252,7 @@ public void setEnabled(boolean enable) { } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent ce) { Object source = ce.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/MotorHat4PiGui.java b/src/main/java/org/myrobotlab/swing/MotorHat4PiGui.java index d14c286ecd..e52684219a 100644 --- a/src/main/java/org/myrobotlab/swing/MotorHat4PiGui.java +++ b/src/main/java/org/myrobotlab/swing/MotorHat4PiGui.java @@ -127,6 +127,7 @@ public MotorHat4PiGui(final String boundServiceName, final SwingGui myService) { restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { @@ -222,6 +223,7 @@ public void setEnabled(boolean enable) { } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent ce) { Object source = ce.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/MotorPortGui.java b/src/main/java/org/myrobotlab/swing/MotorPortGui.java index e5846a5171..9069f2ec0a 100644 --- a/src/main/java/org/myrobotlab/swing/MotorPortGui.java +++ b/src/main/java/org/myrobotlab/swing/MotorPortGui.java @@ -134,6 +134,7 @@ public MotorPortGui(final String boundServiceName, final SwingGui myService) { restoreListeners(); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { @@ -258,6 +259,7 @@ public void setControlEnabled(boolean enable) { } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent ce) { Object source = ce.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/MqttGui.java b/src/main/java/org/myrobotlab/swing/MqttGui.java index da6be0f59a..acc244c05c 100644 --- a/src/main/java/org/myrobotlab/swing/MqttGui.java +++ b/src/main/java/org/myrobotlab/swing/MqttGui.java @@ -102,6 +102,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/OculusRiftGui.java b/src/main/java/org/myrobotlab/swing/OculusRiftGui.java index 10ed9db8ae..8559b6606c 100644 --- a/src/main/java/org/myrobotlab/swing/OculusRiftGui.java +++ b/src/main/java/org/myrobotlab/swing/OculusRiftGui.java @@ -25,9 +25,9 @@ public OculusRiftGui(String boundServiceName, SwingGui myService) { super(boundServiceName, myService); // Create the 2 video widgets - leftEye = new VideoWidget(String.format("%s." + OculusRift.LEFT_OPEN_CV, boundServiceName), myService); + leftEye = new VideoWidget(String.format("%s.%s", boundServiceName, OculusRift.LEFT_OPEN_CV), myService); - rightEye = new VideoWidget(String.format("%s." + OculusRift.RIGHT_OPEN_CV, boundServiceName), myService); + rightEye = new VideoWidget(String.format("%s.%s", boundServiceName, OculusRift.RIGHT_OPEN_CV), myService); JPanel leftVideoPanel = new JPanel(); leftVideoPanel.add(leftEye.display); diff --git a/src/main/java/org/myrobotlab/swing/OledSsd1306Gui.java b/src/main/java/org/myrobotlab/swing/OledSsd1306Gui.java index f44591512a..000e9c81e8 100644 --- a/src/main/java/org/myrobotlab/swing/OledSsd1306Gui.java +++ b/src/main/java/org/myrobotlab/swing/OledSsd1306Gui.java @@ -72,6 +72,7 @@ public OledSsd1306Gui(final String boundServiceName, final SwingGui myService) { } @Override + @SuppressWarnings("not.interned") public void actionPerformed(final ActionEvent event) { // TODO Auto-generated method stub SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/OpenCVGui.java b/src/main/java/org/myrobotlab/swing/OpenCVGui.java index fc0c26694a..c8ba577317 100644 --- a/src/main/java/org/myrobotlab/swing/OpenCVGui.java +++ b/src/main/java/org/myrobotlab/swing/OpenCVGui.java @@ -241,6 +241,7 @@ public Component getListCellRendererComponent(JList list, Object value, int i } // gui events handled - never "set" status of a ui component here ... + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/OpenNiGui.java b/src/main/java/org/myrobotlab/swing/OpenNiGui.java index 88ab1f7303..79bf1e8147 100644 --- a/src/main/java/org/myrobotlab/swing/OpenNiGui.java +++ b/src/main/java/org/myrobotlab/swing/OpenNiGui.java @@ -81,6 +81,7 @@ public OpenNiGui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/Pcf8574Gui.java b/src/main/java/org/myrobotlab/swing/Pcf8574Gui.java index dd8e1618d0..47023be4dd 100644 --- a/src/main/java/org/myrobotlab/swing/Pcf8574Gui.java +++ b/src/main/java/org/myrobotlab/swing/Pcf8574Gui.java @@ -82,6 +82,7 @@ public Pcf8574Gui(final String boundServiceName, final SwingGui myService) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/ProgramABGui.java b/src/main/java/org/myrobotlab/swing/ProgramABGui.java index f437ae91ed..6d90080e20 100644 --- a/src/main/java/org/myrobotlab/swing/ProgramABGui.java +++ b/src/main/java/org/myrobotlab/swing/ProgramABGui.java @@ -10,6 +10,7 @@ import java.io.File; import java.io.IOException; import java.util.Iterator; +import java.util.Objects; import javax.swing.ImageIcon; import javax.swing.JButton; @@ -170,6 +171,7 @@ public ProgramABGui(String boundServiceName, SwingGui myService) throws BadLocat visualDebug.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); @@ -277,7 +279,7 @@ public void run() { } private void setLogLevelForConsole() { - if (LoggingFactory.getInstance().getLevel() == "WARN" || LoggingFactory.getInstance().getLevel() == "ERROR") { + if (Objects.equals(LoggingFactory.getInstance().getLevel(), "WARN") || Objects.equals(LoggingFactory.getInstance().getLevel(), "ERROR")) { for (String s : logsClassOnly) { if (!LoggerFactory.getLogger(s).isInfoEnabled()) { LoggingFactory.getInstance().setLevel(s, "INFO"); diff --git a/src/main/java/org/myrobotlab/swing/PythonGui.java b/src/main/java/org/myrobotlab/swing/PythonGui.java index 91714b2f21..932637fddc 100644 --- a/src/main/java/org/myrobotlab/swing/PythonGui.java +++ b/src/main/java/org/myrobotlab/swing/PythonGui.java @@ -50,6 +50,7 @@ import javax.swing.SwingUtilities; import javax.swing.text.DefaultCaret; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.fife.ui.autocomplete.AutoCompletion; import org.fife.ui.autocomplete.CompletionProvider; import org.fife.ui.rsyntaxtextarea.TextEditorPane; @@ -156,6 +157,7 @@ public String getSelected() { return tabs.getTitleAt(tabs.getSelectedIndex()); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent arg0) { @@ -440,6 +442,7 @@ public void mouseExited(MouseEvent arg0) { } + @SuppressWarnings("not.interned") @Override public void mousePressed(MouseEvent me) { // TODO Auto-generated method stub @@ -463,13 +466,13 @@ public void openFile() { String filename = FileUtil.getLastFileOpened(); Script script = new Script(filename, newfile); addNewEditorPanel(script); - info("Loaded: " + FileUtil.getLastFileOpened()); + info("Loaded: %s", FileUtil.getLastFileOpened()); return; } if (FileUtil.getLastStatus() == null) { info("no file selected"); } else { - info(FileUtil.getLastStatus()); + info(FormatUtil.asFormat(FileUtil.getLastStatus())); } return; } diff --git a/src/main/java/org/myrobotlab/swing/RuntimeGui.java b/src/main/java/org/myrobotlab/swing/RuntimeGui.java index c7173622b9..e92018aa48 100644 --- a/src/main/java/org/myrobotlab/swing/RuntimeGui.java +++ b/src/main/java/org/myrobotlab/swing/RuntimeGui.java @@ -413,6 +413,7 @@ public JMenuBar createMenuBar() { } // zod + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { MetaData c = (MetaData) possibleServicesModel.getValueAt(popupRow, 0); @@ -607,7 +608,7 @@ public void run() { List possibleService = serviceData.getServiceTypes(); for (int i = 0; i < possibleService.size(); ++i) { MetaData serviceType = possibleService.get(i); - if (filtered == "" || serviceType.getSimpleName().toLowerCase().indexOf(filtered.toLowerCase()) != -1) { + if (filtered.equals("") || serviceType.getSimpleName().toLowerCase().contains(filtered.toLowerCase())) { if (serviceType.isAvailable()) { possibleServicesModel.addRow(new Object[] { serviceType, "" }); } @@ -741,6 +742,7 @@ public void updatesBegin() { progressDialog.beginUpdates(); } + @SuppressWarnings("not.interned") @Override public void valueChanged(ListSelectionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/SecurityGui.java b/src/main/java/org/myrobotlab/swing/SecurityGui.java index 2c02f8b362..66056262ef 100644 --- a/src/main/java/org/myrobotlab/swing/SecurityGui.java +++ b/src/main/java/org/myrobotlab/swing/SecurityGui.java @@ -69,6 +69,7 @@ public SecurityGui(final String boundServiceName, final SwingGui myService) { set.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/SerialGui.java b/src/main/java/org/myrobotlab/swing/SerialGui.java index 1852b21613..961eb8b329 100644 --- a/src/main/java/org/myrobotlab/swing/SerialGui.java +++ b/src/main/java/org/myrobotlab/swing/SerialGui.java @@ -117,6 +117,7 @@ public SerialGui(final String boundServiceName, final SwingGui myService) { monitor.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); @@ -230,6 +231,7 @@ public void run() { } // onChange of ports + @SuppressWarnings("not.interned") @Override public void itemStateChanged(ItemEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/ServiceGui.java b/src/main/java/org/myrobotlab/swing/ServiceGui.java index 77ed2282f2..564c8dd6da 100644 --- a/src/main/java/org/myrobotlab/swing/ServiceGui.java +++ b/src/main/java/org/myrobotlab/swing/ServiceGui.java @@ -41,6 +41,7 @@ import javax.swing.JPanel; import javax.swing.border.TitledBorder; +import org.checkerframework.checker.formatter.qual.FormatMethod; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.MRLListener; import org.myrobotlab.framework.MethodCache; @@ -121,14 +122,17 @@ public ServiceGui(final String boundServiceName, final SwingGui myService) { // addTop(new JButton("save"), new JButton("load")); } + @FormatMethod public void info(String msg, Object... params) { swingGui.info(msg, params); } + @FormatMethod public void warn(String msg, Object... params) { swingGui.warn(msg, params); } + @FormatMethod public void error(String msg, Object... params) { swingGui.error(msg, params); } diff --git a/src/main/java/org/myrobotlab/swing/ServoGui.java b/src/main/java/org/myrobotlab/swing/ServoGui.java index 57faeba22e..b31487e30d 100644 --- a/src/main/java/org/myrobotlab/swing/ServoGui.java +++ b/src/main/java/org/myrobotlab/swing/ServoGui.java @@ -357,6 +357,7 @@ public void setSpeedControlEnabled(boolean b) { } // SwingGui's action processing section - data from user + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent event) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/ServoMixerGui.java b/src/main/java/org/myrobotlab/swing/ServoMixerGui.java index 5834d3e355..b8e78f9ffc 100755 --- a/src/main/java/org/myrobotlab/swing/ServoMixerGui.java +++ b/src/main/java/org/myrobotlab/swing/ServoMixerGui.java @@ -103,6 +103,7 @@ public void refreshPanel() { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/SolrGui.java b/src/main/java/org/myrobotlab/swing/SolrGui.java index e97f9e227e..449cdd25d6 100755 --- a/src/main/java/org/myrobotlab/swing/SolrGui.java +++ b/src/main/java/org/myrobotlab/swing/SolrGui.java @@ -96,6 +96,7 @@ private void createSearchGuiLayout() { public final static Logger log = LoggerFactory.getLogger(SolrGui.class.toString()); static final long serialVersionUID = 1L; + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { // TODO Auto-generated method stub diff --git a/src/main/java/org/myrobotlab/swing/SwingGuiGui.java b/src/main/java/org/myrobotlab/swing/SwingGuiGui.java index 305e47ca57..8a7ee84ef1 100644 --- a/src/main/java/org/myrobotlab/swing/SwingGuiGui.java +++ b/src/main/java/org/myrobotlab/swing/SwingGuiGui.java @@ -470,6 +470,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/ThingSpeakGui.java b/src/main/java/org/myrobotlab/swing/ThingSpeakGui.java index 5b9ff61a2d..74b3ba955c 100644 --- a/src/main/java/org/myrobotlab/swing/ThingSpeakGui.java +++ b/src/main/java/org/myrobotlab/swing/ThingSpeakGui.java @@ -69,6 +69,7 @@ public ThingSpeakGui(final String boundServiceName, final SwingGui myService) { display.add(input); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/TwitterGui.java b/src/main/java/org/myrobotlab/swing/TwitterGui.java index a7aa3d7803..496dbe70dd 100644 --- a/src/main/java/org/myrobotlab/swing/TwitterGui.java +++ b/src/main/java/org/myrobotlab/swing/TwitterGui.java @@ -80,6 +80,7 @@ public TwitterGui(final String boundServiceName, final SwingGui myService) { display.add(tweetPanel, BorderLayout.SOUTH); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object o = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/WebkitSpeechRecognitionGui.java b/src/main/java/org/myrobotlab/swing/WebkitSpeechRecognitionGui.java index b4eee43df4..a1593ce86d 100644 --- a/src/main/java/org/myrobotlab/swing/WebkitSpeechRecognitionGui.java +++ b/src/main/java/org/myrobotlab/swing/WebkitSpeechRecognitionGui.java @@ -80,6 +80,7 @@ public WebkitSpeechRecognitionGui(final String boundServiceName, final SwingGui } + @SuppressWarnings({"not.interned", "argument"}) @Override public void actionPerformed(final ActionEvent event) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/abstracts/AbstractSpeechSynthesisGui.java b/src/main/java/org/myrobotlab/swing/abstracts/AbstractSpeechSynthesisGui.java index 6e892cb917..f7292f8afc 100644 --- a/src/main/java/org/myrobotlab/swing/abstracts/AbstractSpeechSynthesisGui.java +++ b/src/main/java/org/myrobotlab/swing/abstracts/AbstractSpeechSynthesisGui.java @@ -258,6 +258,7 @@ protected String displayEffectFile(File file) { return ret; } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterAffineGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterAffineGui.java index 6198d33833..330626e020 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterAffineGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterAffineGui.java @@ -87,6 +87,7 @@ public OpenCVFilterAffineGui(String boundFilterName, String boundServiceName, Sw } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { // TODO Auto-generated method stub @@ -115,6 +116,7 @@ public void run() { } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterCannyGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterCannyGui.java index 1aab3d41c2..b05d850f08 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterCannyGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterCannyGui.java @@ -120,6 +120,7 @@ public void run() { } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent e) { diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDetectorGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDetectorGui.java index c67ac1fd52..22c5de5501 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDetectorGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDetectorGui.java @@ -48,6 +48,7 @@ public OpenCVFilterDetectorGui(String boundFilterName, String boundServiceName, learn.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDilateGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDilateGui.java index 242c4a133a..6e0816cc67 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDilateGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterDilateGui.java @@ -49,6 +49,7 @@ public OpenCVFilterDilateGui(String boundFilterName, String boundServiceName, Sw } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterErodeGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterErodeGui.java index 7dd3af4a00..7f67ce873e 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterErodeGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterErodeGui.java @@ -47,6 +47,7 @@ public OpenCVFilterErodeGui(String boundFilterName, String boundServiceName, Swi } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceDetectGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceDetectGui.java index 37b20450b1..8e1b7b80cc 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceDetectGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceDetectGui.java @@ -106,6 +106,7 @@ public void enableListeners(boolean b) { } } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceRecognizerGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceRecognizerGui.java index ae3158cba4..4df3c1dc30 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceRecognizerGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterFaceRecognizerGui.java @@ -82,6 +82,7 @@ public OpenCVFilterFaceRecognizerGui(String boundFilterName, String boundService display.add(jp2, gc); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterInRangeGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterInRangeGui.java index f36961488c..3290d1eb5d 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterInRangeGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterInRangeGui.java @@ -165,6 +165,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectDepthGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectDepthGui.java index f1d458e579..38f08f0330 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectDepthGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectDepthGui.java @@ -64,6 +64,7 @@ public OpenCVFilterKinectDepthGui(String boundFilterName, String boundServiceNam clearSamplePoints.addActionListener(this); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectPointCloudGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectPointCloudGui.java index 66ecf5ce36..80e274decb 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectPointCloudGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterKinectPointCloudGui.java @@ -55,6 +55,7 @@ public OpenCVFilterKinectPointCloudGui(String boundFilterName, String boundServi display.add(flow, BorderLayout.CENTER); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { // OpenCVFilterKinectPointCloud filter = (OpenCVFilterKinectPointCloud) diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterLKOpticalTrackGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterLKOpticalTrackGui.java index 0cd4c944c5..d1d65fa7a9 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterLKOpticalTrackGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterLKOpticalTrackGui.java @@ -124,6 +124,7 @@ public OpenCVFilterLKOpticalTrackGui(String boundFilterName, String boundService myService.send(boundServiceName, "publishFilterState", boundFilterName); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterMiniXceptionGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterMiniXceptionGui.java index b61a0347cb..8f949c584c 100755 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterMiniXceptionGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterMiniXceptionGui.java @@ -103,6 +103,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent e) { OpenCVFilterMiniXception bf = (OpenCVFilterMiniXception) boundFilter.filter; diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterSURFGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterSURFGui.java index f443d08da1..5fac21e793 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterSURFGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterSURFGui.java @@ -56,6 +56,7 @@ public OpenCVFilterSURFGui(String boundFilterName, String boundServiceName, Swin display.add(j, gc); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { // TODO Auto-generated method stub diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterTrackerGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterTrackerGui.java index 719f4cce26..8793dd1588 100755 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterTrackerGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterTrackerGui.java @@ -71,6 +71,7 @@ public OpenCVFilterTrackerGui(String boundFilterName, String boundServiceName, S } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterYoloGui.java b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterYoloGui.java index 9192641b2d..05f672b92b 100644 --- a/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterYoloGui.java +++ b/src/main/java/org/myrobotlab/swing/opencv/OpenCVFilterYoloGui.java @@ -88,6 +88,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void stateChanged(ChangeEvent e) { OpenCVFilterYolo bf = (OpenCVFilterYolo) boundFilter.filter; diff --git a/src/main/java/org/myrobotlab/swing/widget/Motor_Adafruit16CServoDriverGui.java b/src/main/java/org/myrobotlab/swing/widget/Motor_Adafruit16CServoDriverGui.java index 8706211859..d507975243 100644 --- a/src/main/java/org/myrobotlab/swing/widget/Motor_Adafruit16CServoDriverGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/Motor_Adafruit16CServoDriverGui.java @@ -69,6 +69,7 @@ public Motor_Adafruit16CServoDriverGui(SwingGui myService, String motorName, Str } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/Motor_AdafruitMotorShieldGui.java b/src/main/java/org/myrobotlab/swing/widget/Motor_AdafruitMotorShieldGui.java index 5103c7324c..f038937d0a 100644 --- a/src/main/java/org/myrobotlab/swing/widget/Motor_AdafruitMotorShieldGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/Motor_AdafruitMotorShieldGui.java @@ -46,6 +46,7 @@ public Motor_AdafruitMotorShieldGui(SwingGui myService, String motorName, String } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/Motor_ArduinoGui.java b/src/main/java/org/myrobotlab/swing/widget/Motor_ArduinoGui.java index 118b9c23f0..0c56206802 100644 --- a/src/main/java/org/myrobotlab/swing/widget/Motor_ArduinoGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/Motor_ArduinoGui.java @@ -69,6 +69,7 @@ public Motor_ArduinoGui(SwingGui myService, String motorName, String controllerN } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/Motor_SaberToothGui.java b/src/main/java/org/myrobotlab/swing/widget/Motor_SaberToothGui.java index caacc49af9..5f44aa69c5 100644 --- a/src/main/java/org/myrobotlab/swing/widget/Motor_SaberToothGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/Motor_SaberToothGui.java @@ -46,6 +46,7 @@ public Motor_SaberToothGui(SwingGui myService, String motorName, String controll } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/PinGui.java b/src/main/java/org/myrobotlab/swing/widget/PinGui.java index 629e4f25b1..a64616e9c0 100644 --- a/src/main/java/org/myrobotlab/swing/widget/PinGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/PinGui.java @@ -211,6 +211,7 @@ public void setBounds(int x, int y, int width, int height) { display.setBounds(x, y, width, height); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { log.info("actionPerformed"); diff --git a/src/main/java/org/myrobotlab/swing/widget/PortGui.java b/src/main/java/org/myrobotlab/swing/widget/PortGui.java index 627c749c00..1634e0c7ca 100644 --- a/src/main/java/org/myrobotlab/swing/widget/PortGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/PortGui.java @@ -77,6 +77,7 @@ public void run() { }); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(final ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/org/myrobotlab/swing/widget/Stepper_AdafruitMotorShieldGui.java b/src/main/java/org/myrobotlab/swing/widget/Stepper_AdafruitMotorShieldGui.java index 6385f94cad..8fd99ac5df 100644 --- a/src/main/java/org/myrobotlab/swing/widget/Stepper_AdafruitMotorShieldGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/Stepper_AdafruitMotorShieldGui.java @@ -45,6 +45,7 @@ public Stepper_AdafruitMotorShieldGui(SwingGui myService, String stepperName, St } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/Stepper_ArduinoGui.java b/src/main/java/org/myrobotlab/swing/widget/Stepper_ArduinoGui.java index 97d504896d..c238fc2c8c 100644 --- a/src/main/java/org/myrobotlab/swing/widget/Stepper_ArduinoGui.java +++ b/src/main/java/org/myrobotlab/swing/widget/Stepper_ArduinoGui.java @@ -64,6 +64,7 @@ public Stepper_ArduinoGui(SwingGui myService, String motorName, String controlle } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); From 9705f82aa4defd5fe289b4a754f6908e534e8749 Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 10:48:46 -0600 Subject: [PATCH 07/11] Add checker interning and format annotations, fix format and comparison bugs --- mrl.iml | 753 ++++++++++++++++++ .../boofcv/CaptureCalibrationImagesApp.java | 4 +- .../java/org/myrobotlab/cmdline/CmdLine.java | 3 +- .../java/org/myrobotlab/codec/CodecUtils.java | 7 +- .../org/myrobotlab/codec/serial/Codec.java | 2 + .../org/myrobotlab/framework/CmdOptions.java | 3 +- .../myrobotlab/framework/MrlException.java | 3 + .../org/myrobotlab/framework/Service.java | 71 +- .../java/org/myrobotlab/framework/Status.java | 5 + .../framework/TimeoutException.java | 3 + .../myrobotlab/framework/repo/IvyWrapper.java | 9 +- .../org/myrobotlab/framework/repo/Repo.java | 5 +- .../myrobotlab/i2c/AdafruitLEDBackpack.java | 2 +- src/main/java/org/myrobotlab/i2c/I2CBus.java | 3 +- .../java/org/myrobotlab/jme3/Jme3Util.java | 10 +- .../org/myrobotlab/kinematics/IMEngine.java | 3 +- .../myrobotlab/kinematics/PoseSequence.java | 2 +- .../org/myrobotlab/lang/py/ProgramABPy.java | 8 +- .../java/org/myrobotlab/memory/Memory.java | 2 +- src/main/java/org/myrobotlab/memory/Node.java | 5 +- .../java/org/myrobotlab/mqtt/MqttMsg.java | 27 +- .../opencv/FilterColorGrouping.java | 1 + .../myrobotlab/opencv/FrameFileRecorder.java | 5 +- .../org/myrobotlab/opencv/OpenCVFilter.java | 3 + .../opencv/OpenCVFilterBoundingBoxToFile.java | 9 +- .../myrobotlab/opencv/OpenCVFilterDL4J.java | 4 +- .../opencv/OpenCVFilterDL4JTransfer.java | 4 +- .../opencv/OpenCVFilterFaceRecognizer.java | 5 +- .../opencv/OpenCVFilterFaceTraining.java | 4 +- .../myrobotlab/opencv/OpenCVFilterLloyd.java | 4 +- .../opencv/OpenCVFilterMiniXception.java | 4 +- .../opencv/OpenCVFilterTesseract.java | 4 +- .../java/org/myrobotlab/openni/PImage.java | 4 +- .../java/org/myrobotlab/openni/PMatrix3D.java | 3 +- .../service/Adafruit16CServoDriver.java | 9 +- .../myrobotlab/service/AdafruitIna219.java | 6 +- .../service/AdafruitMotorHat4Pi.java | 8 +- .../java/org/myrobotlab/service/Ads1115.java | 8 +- .../java/org/myrobotlab/service/Arduino.java | 15 +- .../java/org/myrobotlab/service/Bno055.java | 8 +- .../java/org/myrobotlab/service/DiyServo.java | 3 +- .../org/myrobotlab/service/Esp8266_01.java | 5 +- .../java/org/myrobotlab/service/GoPro.java | 8 +- .../java/org/myrobotlab/service/I2cMux.java | 8 +- .../java/org/myrobotlab/service/InMoov2.java | 5 +- .../org/myrobotlab/service/JMonkeyEngine.java | 6 +- .../java/org/myrobotlab/service/Joystick.java | 1 + .../java/org/myrobotlab/service/Lloyd.java | 9 +- .../java/org/myrobotlab/service/Lm75a.java | 8 +- .../org/myrobotlab/service/MotorHat4Pi.java | 9 +- .../java/org/myrobotlab/service/Mpr121.java | 20 +- .../org/myrobotlab/service/MqttBroker.java | 2 +- .../org/myrobotlab/service/MyoThalmic.java | 9 +- .../org/myrobotlab/service/OledSsd1306.java | 8 +- .../java/org/myrobotlab/service/OpenCV.java | 22 +- .../java/org/myrobotlab/service/OpenNi.java | 38 +- src/main/java/org/myrobotlab/service/Osc.java | 2 +- .../java/org/myrobotlab/service/Pcf8574.java | 5 +- .../org/myrobotlab/service/ProgramAB.java | 3 +- .../java/org/myrobotlab/service/RoboClaw.java | 2 +- .../java/org/myrobotlab/service/Runtime.java | 8 +- .../org/myrobotlab/service/Sabertooth.java | 8 +- .../java/org/myrobotlab/service/Serial.java | 1 + .../org/myrobotlab/service/SerialRelay.java | 3 +- .../service/Ssc32UsbServoController.java | 7 +- .../myrobotlab/service/UltrasonicSensor.java | 3 +- .../java/org/myrobotlab/service/Updater.java | 19 +- .../java/org/myrobotlab/service/WorkE.java | 5 +- .../service/abstracts/AbstractMotor.java | 3 +- .../service/abstracts/AbstractPinEncoder.java | 3 +- .../abstracts/AbstractSpeechSynthesis.java | 6 +- .../myrobotlab/swing/widget/AboutDialog.java | 1 + .../myrobotlab/swing/widget/ImageButton.java | 1 + .../swing/widget/OpenCVListAdapter.java | 1 + .../swing/widget/OscopePinTrace.java | 3 +- .../swing/widget/ProgressDialog.java | 1 + .../swing/widget/StackTraceDialog.java | 1 + .../org/saintandreas/gl/shaders/Program.java | 2 + .../java/org/saintandreas/math/Matrix3f.java | 12 +- .../java/org/saintandreas/math/Matrix4f.java | 13 +- .../java/org/saintandreas/math/Vector2f.java | 11 +- .../java/org/saintandreas/math/Vector3f.java | 11 +- .../java/org/saintandreas/math/Vector4.java | 11 +- 83 files changed, 1148 insertions(+), 197 deletions(-) create mode 100644 mrl.iml diff --git a/mrl.iml b/mrl.iml new file mode 100644 index 0000000000..0deddb780c --- /dev/null +++ b/mrl.iml @@ -0,0 +1,753 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/myrobotlab/boofcv/CaptureCalibrationImagesApp.java b/src/main/java/org/myrobotlab/boofcv/CaptureCalibrationImagesApp.java index 6bdc9d5682..646befb255 100644 --- a/src/main/java/org/myrobotlab/boofcv/CaptureCalibrationImagesApp.java +++ b/src/main/java/org/myrobotlab/boofcv/CaptureCalibrationImagesApp.java @@ -125,8 +125,8 @@ public void process() throws IOException { while (true) { if (savedImages && userChoice != -1) { if (userChoice == 1) { - UtilImageIO.savePPM(savedRgb, String.format(directory + "rgb%07d.ppm", frameNumber), buffer); - UtilOpenKinect.saveDepth(savedDepth, String.format(directory + "depth%07d.depth", frameNumber), buffer); + UtilImageIO.savePPM(savedRgb, String.format("%srgb%07d.ppm", directory, frameNumber), buffer); + UtilOpenKinect.saveDepth(savedDepth, String.format("%sdepth%07d.depth", directory, frameNumber), buffer); frameNumber++; text = "Image Saved!"; } else { diff --git a/src/main/java/org/myrobotlab/cmdline/CmdLine.java b/src/main/java/org/myrobotlab/cmdline/CmdLine.java index 9d764e0a07..474cad8e91 100644 --- a/src/main/java/org/myrobotlab/cmdline/CmdLine.java +++ b/src/main/java/org/myrobotlab/cmdline/CmdLine.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.Objects; public class CmdLine extends HashMap { @@ -155,7 +156,7 @@ public int splitLine(String[] args) { CcmdParam cmd = new CcmdParam(); // only add non-empty args - if (arg != "") { + if (!Objects.equals(arg, "")) { cmd.m_strings.add(arg); } diff --git a/src/main/java/org/myrobotlab/codec/CodecUtils.java b/src/main/java/org/myrobotlab/codec/CodecUtils.java index b0fe209fe7..67a0f66b1a 100644 --- a/src/main/java/org/myrobotlab/codec/CodecUtils.java +++ b/src/main/java/org/myrobotlab/codec/CodecUtils.java @@ -10,6 +10,8 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.internal.LinkedTreeMap; +import org.checkerframework.checker.interning.qual.FindDistinct; +import org.checkerframework.checker.interning.qual.Interned; import org.myrobotlab.codec.json.GsonPolymorphicTypeAdapterFactory; import org.myrobotlab.codec.json.JacksonPolymorphicModule; import org.myrobotlab.codec.json.JsonDeserializationException; @@ -1218,9 +1220,10 @@ public static void setField(Object o, String field, Object value) { // TODO - handle all types :P Field f = o.getClass().getDeclaredField(field); f.setAccessible(true); - f.set(o, value); + // Checker doesn't like using non-interned values for Field.set() for some reason + f.set(o, (@Interned Object) value); } catch (Exception e) { - /** don't care - if its not there don't set it */ + /* don't care - if its not there don't set it */ } } diff --git a/src/main/java/org/myrobotlab/codec/serial/Codec.java b/src/main/java/org/myrobotlab/codec/serial/Codec.java index ad54f2190a..1638564ee3 100644 --- a/src/main/java/org/myrobotlab/codec/serial/Codec.java +++ b/src/main/java/org/myrobotlab/codec/serial/Codec.java @@ -7,6 +7,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import org.checkerframework.checker.formatter.qual.FormatMethod; import org.myrobotlab.framework.interfaces.LoggingSink; import org.myrobotlab.logging.LoggerFactory; import org.slf4j.Logger; @@ -103,6 +104,7 @@ final public String decode(int newByte) { abstract public int[] encode(String source); + @FormatMethod public void error(String format, Object... args) { if (sink != null) { sink.error(format, args); diff --git a/src/main/java/org/myrobotlab/framework/CmdOptions.java b/src/main/java/org/myrobotlab/framework/CmdOptions.java index 1548e3aa53..bbe00ac1d0 100644 --- a/src/main/java/org/myrobotlab/framework/CmdOptions.java +++ b/src/main/java/org/myrobotlab/framework/CmdOptions.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.List; +import org.checkerframework.checker.interning.qual.Interned; import picocli.CommandLine.Command; import picocli.CommandLine.Option; @@ -113,7 +114,7 @@ public CmdOptions() { public CmdOptions(CmdOptions other) throws IllegalArgumentException, IllegalAccessException { Field[] fields = this.getClass().getDeclaredFields(); for (Field field : fields) { - field.set(this, field.get(other)); + field.set(this, (@Interned Object) field.get(other)); } } diff --git a/src/main/java/org/myrobotlab/framework/MrlException.java b/src/main/java/org/myrobotlab/framework/MrlException.java index d45b881de1..8ca3e34800 100644 --- a/src/main/java/org/myrobotlab/framework/MrlException.java +++ b/src/main/java/org/myrobotlab/framework/MrlException.java @@ -1,9 +1,12 @@ package org.myrobotlab.framework; +import org.checkerframework.checker.formatter.qual.FormatMethod; + public class MrlException extends Exception { private static final long serialVersionUID = 1L; + @FormatMethod public MrlException(String format, Object... params) { super(String.format(format, params)); } diff --git a/src/main/java/org/myrobotlab/framework/Service.java b/src/main/java/org/myrobotlab/framework/Service.java index 3a25614a84..21c31b24ae 100644 --- a/src/main/java/org/myrobotlab/framework/Service.java +++ b/src/main/java/org/myrobotlab/framework/Service.java @@ -53,6 +53,12 @@ import java.util.TreeSet; import java.util.concurrent.CopyOnWriteArrayList; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.Format; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.formatter.util.FormatUtil; +import org.checkerframework.checker.interning.qual.EqualsMethod; +import org.checkerframework.checker.interning.qual.Interned; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.framework.interfaces.Broadcaster; @@ -237,6 +243,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac * s * @return o */ + @EqualsMethod public static Object copyShallowFrom(Object target, Object source) { if (target == source) { // data is myself - operating on local copy return target; @@ -259,12 +266,11 @@ public static Object copyShallowFrom(Object target, Object source) { for (Class sourceClass : ancestry) { - Field fields[] = sourceClass.getDeclaredFields(); - for (int j = 0, m = fields.length; j < m; j++) { + Field[] fields = sourceClass.getDeclaredFields(); + for (Field field : fields) { try { - Field f = fields[j]; - int modifiers = f.getModifiers(); + int modifiers = field.getModifiers(); // if (Modifier.isPublic(mod) // !(Modifier.isPublic(f.getModifiers()) @@ -274,19 +280,19 @@ public static Object copyShallowFrom(Object target, Object source) { // GROG - recent change from this // if ((!Modifier.isPublic(modifiers) // to this - String fname = f.getName(); + String fname = field.getName(); /* * if (fname.equals("desktops") || fname.equals("useLocalResources") * ){ log.info("here"); } */ if (Modifier.isPrivate(modifiers) || fname.equals("log") || Modifier.isTransient(modifiers) || Modifier.isStatic(modifiers) || Modifier.isFinal(modifiers)) { - log.debug("skipping {}", f.getName()); + log.debug("skipping {}", field.getName()); continue; } else { - log.debug("copying {}", f.getName()); + log.debug("copying {}", field.getName()); } - Type t = f.getType(); + Type t = field.getType(); // log.info(String.format("setting %s", f.getName())); /* @@ -296,30 +302,30 @@ public static Object copyShallowFrom(Object target, Object source) { // GroG - this is new 1/26/2017 - needed to get webgui data to // load - f.setAccessible(true); - Field targetField = sourceClass.getDeclaredField(f.getName()); + field.setAccessible(true); + Field targetField = sourceClass.getDeclaredField(field.getName()); targetField.setAccessible(true); - if (t.equals(java.lang.Boolean.TYPE)) { - targetField.setBoolean(target, f.getBoolean(source)); - } else if (t.equals(java.lang.Character.TYPE)) { - targetField.setChar(target, f.getChar(source)); - } else if (t.equals(java.lang.Byte.TYPE)) { - targetField.setByte(target, f.getByte(source)); - } else if (t.equals(java.lang.Short.TYPE)) { - targetField.setShort(target, f.getShort(source)); - } else if (t.equals(java.lang.Integer.TYPE)) { - targetField.setInt(target, f.getInt(source)); - } else if (t.equals(java.lang.Long.TYPE)) { - targetField.setLong(target, f.getLong(source)); - } else if (t.equals(java.lang.Float.TYPE)) { - targetField.setFloat(target, f.getFloat(source)); - } else if (t.equals(java.lang.Double.TYPE)) { - targetField.setDouble(target, f.getDouble(source)); + if (t.equals(Boolean.TYPE)) { + targetField.setBoolean(target, field.getBoolean(source)); + } else if (t.equals(Character.TYPE)) { + targetField.setChar(target, field.getChar(source)); + } else if (t.equals(Byte.TYPE)) { + targetField.setByte(target, field.getByte(source)); + } else if (t.equals(Short.TYPE)) { + targetField.setShort(target, field.getShort(source)); + } else if (t.equals(Integer.TYPE)) { + targetField.setInt(target, field.getInt(source)); + } else if (t.equals(Long.TYPE)) { + targetField.setLong(target, field.getLong(source)); + } else if (t.equals(Float.TYPE)) { + targetField.setFloat(target, field.getFloat(source)); + } else if (t.equals(Double.TYPE)) { + targetField.setDouble(target, field.getDouble(source)); } else { // log.debug(String.format("setting reference to remote // object %s", f.getName())); - targetField.set(target, f.get(source)); + targetField.set(target, (@Interned Object) field.get(source)); } } catch (Exception e) { log.error("copy failed source {} to a {}", source, target, e); @@ -1934,6 +1940,7 @@ public Status error(Exception e) { return ret; } + @FormatMethod @Override public Status error(String format, Object... args) { Status ret = null; @@ -1950,13 +1957,14 @@ public Status error(String format, Object... args) { } public Status error(String msg) { - return error(msg, (Object[]) null); + return error((@Format(ConversionCategory.UNUSED) String) msg, (Object[]) null); } public Status warn(String msg) { - return warn(msg, (Object[]) null); + return warn((@Format(ConversionCategory.UNUSED) String) msg, (Object[]) null); } + @FormatMethod @Override public Status warn(String format, Object... args) { Status status = Status.warn(format, args); @@ -1974,13 +1982,14 @@ public Status warn(String format, Object... args) { * @return string */ public Status info(String msg) { - return info(msg, (Object[]) null); + return info((@Format(ConversionCategory.UNUSED) String)msg, (Object[]) null); } /** * set status broadcasts an formatted info string to any subscribers */ @Override + @FormatMethod public Status info(String format, Object... args) { Status status = Status.info(format, args); status.name = getName(); @@ -2418,7 +2427,7 @@ public String localize(String key, Object... args) { if (args == null) { return prop.toString(); } else { - return String.format(prop.toString(), args); + return String.format(FormatUtil.asFormat(prop.toString()), args); } } diff --git a/src/main/java/org/myrobotlab/framework/Status.java b/src/main/java/org/myrobotlab/framework/Status.java index bfd1a0c83c..2b067e2d5f 100644 --- a/src/main/java/org/myrobotlab/framework/Status.java +++ b/src/main/java/org/myrobotlab/framework/Status.java @@ -12,6 +12,7 @@ import java.io.StringWriter; import java.util.Objects; +import org.checkerframework.checker.formatter.qual.FormatMethod; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.logging.Level; import org.myrobotlab.logging.LoggerFactory; @@ -69,6 +70,7 @@ public class Status implements Serializable {// extends Exception { public Object source; // --- static creation of typed Status objects ---- + @FormatMethod public static Status debug(String format, Object... args) { Status status = new Status(String.format(format, args)); status.level = DEBUG; @@ -87,6 +89,7 @@ public static Status error(String msg) { return s; } + @FormatMethod public static Status error(String format, Object... args) { Status status = new Status(String.format(format, args)); status.level = ERROR; @@ -99,6 +102,7 @@ public static Status warn(String msg) { return s; } + @FormatMethod public static Status warn(String format, Object... args) { Status status = new Status(String.format(format, args)); status.level = WARN; @@ -111,6 +115,7 @@ public static Status info(String msg) { return s; } + @FormatMethod public static Status info(String format, Object... args) { String formattedInfo = String.format(format, args); Status status = new Status(formattedInfo); diff --git a/src/main/java/org/myrobotlab/framework/TimeoutException.java b/src/main/java/org/myrobotlab/framework/TimeoutException.java index 0793ca55ac..de9c7913b3 100644 --- a/src/main/java/org/myrobotlab/framework/TimeoutException.java +++ b/src/main/java/org/myrobotlab/framework/TimeoutException.java @@ -1,9 +1,12 @@ package org.myrobotlab.framework; +import org.checkerframework.checker.formatter.qual.FormatMethod; + public class TimeoutException extends Exception { private static final long serialVersionUID = 1L; + @FormatMethod public TimeoutException(String format, Object... params) { super(String.format(format, params)); } diff --git a/src/main/java/org/myrobotlab/framework/repo/IvyWrapper.java b/src/main/java/org/myrobotlab/framework/repo/IvyWrapper.java index b7e94fbbf5..815870761d 100644 --- a/src/main/java/org/myrobotlab/framework/repo/IvyWrapper.java +++ b/src/main/java/org/myrobotlab/framework/repo/IvyWrapper.java @@ -17,6 +17,7 @@ import org.apache.ivy.util.Message; import org.apache.ivy.util.filter.Filter; import org.apache.ivy.util.filter.NoFilter; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.framework.Platform; import org.myrobotlab.framework.Status; import org.myrobotlab.framework.StatusLevel; @@ -352,7 +353,7 @@ public void installDependency(String location, ServiceDependency library) { if (!errStr.startsWith("WARN: symlinkmass")) { error = true; } - error(errStr); + error(FormatUtil.asFormat(errStr)); } } @@ -396,7 +397,7 @@ public void installDependency(String location, ServiceDependency library) { publishStatus(Status.newInstance(Repo.class.getSimpleName(), StatusLevel.INFO, Repo.INSTALL_FINISHED, String.format("finished install of %s", library))); } catch (Exception e) { - error(e.getMessage()); + error(FormatUtil.asFormat(e.getMessage())); log.error(e.getMessage(), e); } @@ -482,7 +483,7 @@ synchronized public void install(String location, String[] serviceTypes) { if (!errStr.startsWith("WARN: symlinkmass")) { error = true; } - error(errStr); + error(FormatUtil.asFormat(errStr)); } } @@ -525,7 +526,7 @@ synchronized public void install(String location, String[] serviceTypes) { publishStatus(Status.newInstance(Repo.class.getSimpleName(), StatusLevel.INFO, Repo.INSTALL_FINISHED, String.format("finished install of %s", (Object[]) serviceTypes))); } catch (Exception e) { - error(e.getMessage()); + error(FormatUtil.asFormat(e.getMessage())); log.error(e.getMessage(), e); } diff --git a/src/main/java/org/myrobotlab/framework/repo/Repo.java b/src/main/java/org/myrobotlab/framework/repo/Repo.java index 9ee2415836..816283616a 100644 --- a/src/main/java/org/myrobotlab/framework/repo/Repo.java +++ b/src/main/java/org/myrobotlab/framework/repo/Repo.java @@ -15,6 +15,7 @@ import java.util.Set; import java.util.TreeMap; +import org.checkerframework.checker.formatter.qual.FormatMethod; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.ServiceReservation; @@ -62,6 +63,7 @@ public String getRepoPath() { return LOCATION + File.separator + REPO_STATE_FILE_NAME; } + @FormatMethod public void error(String format, Object... args) { publishStatus(Status.error(format, args)); } @@ -352,6 +354,7 @@ static public void publishStatus(Status status) { } } + @FormatMethod static public void info(String format, Object... args) { publishStatus(Status.info(format, args)); } @@ -406,7 +409,7 @@ synchronized public void install(String[] serviceTypes) { } public void installEach() { - String workDir = String.format(String.format("libraries.ivy.services.%d", System.currentTimeMillis())); + String workDir = String.format("libraries.ivy.services.%d", System.currentTimeMillis()); installEachTo(workDir); } diff --git a/src/main/java/org/myrobotlab/i2c/AdafruitLEDBackpack.java b/src/main/java/org/myrobotlab/i2c/AdafruitLEDBackpack.java index 346dccd659..77549dd14e 100644 --- a/src/main/java/org/myrobotlab/i2c/AdafruitLEDBackpack.java +++ b/src/main/java/org/myrobotlab/i2c/AdafruitLEDBackpack.java @@ -252,7 +252,7 @@ public String display(String data) { // d1 d2 : d3 d4 byte[] display = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - if (data == null || data == "") { + if (data == null || data.equals("")) { writeDisplay(display); return data; } diff --git a/src/main/java/org/myrobotlab/i2c/I2CBus.java b/src/main/java/org/myrobotlab/i2c/I2CBus.java index 48c031d89f..33f97d4abd 100644 --- a/src/main/java/org/myrobotlab/i2c/I2CBus.java +++ b/src/main/java/org/myrobotlab/i2c/I2CBus.java @@ -3,6 +3,7 @@ import java.util.HashSet; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.Runtime; @@ -56,7 +57,7 @@ public void detach(Attachable service) { * a Java 8 default implementation to the interface */ @Override - public boolean isAttached(Attachable service) { + public boolean isAttached(@FindDistinct Attachable service) { return (controller != null && controller == service); } diff --git a/src/main/java/org/myrobotlab/jme3/Jme3Util.java b/src/main/java/org/myrobotlab/jme3/Jme3Util.java index d7c928f156..4c5d6b6878 100644 --- a/src/main/java/org/myrobotlab/jme3/Jme3Util.java +++ b/src/main/java/org/myrobotlab/jme3/Jme3Util.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Set; +import org.checkerframework.checker.formatter.qual.FormatMethod; import org.myrobotlab.framework.MethodCache; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.JMonkeyEngine; @@ -70,14 +71,17 @@ public Object invoke(Jme3Msg msg) throws ClassNotFoundException, IllegalAccessEx // msg.method, msg.data); } + @FormatMethod public void info(String format, Object... params) { jme.info(format, params); } + @FormatMethod public void warn(String format, Object... params) { jme.warn(format, params); } + @FormatMethod public void error(String format, Object... params) { jme.error(format, params); } @@ -110,7 +114,7 @@ public void setTranslation(String name, double x, double y, double z) { log.info(String.format("setTranslation %s, %.2f,%.2f,%.2f", name, x, y, z)); Spatial s = jme.get(name); s.setLocalTranslation((float) x, (float) y, (float) z); - if (currentMenuView != null && s == selectedForView) { + if (currentMenuView != null && s.equals(selectedForView)) { currentMenuView.putText(selectedForView); } } @@ -123,7 +127,7 @@ public void setRotation(String name, double xRot, double yRot, double zRot) { float zRotInit = (float) zRot * FastMath.DEG_TO_RAD; q.fromAngles(zRotInit, xRotInit, yRotInit); s.setLocalRotation(q); - if (currentMenuView != null && s == selectedForView) { + if (currentMenuView != null && s.equals(selectedForView)) { currentMenuView.putText(selectedForView); } } @@ -199,7 +203,7 @@ public void rotateTo(String name, String axis, double degrees) { q.fromAngles(euler[0], euler[1], euler[2]); n.setLocalRotation(q); - if (currentMenuView != null && n == selectedForView) { + if (currentMenuView != null && n.equals(selectedForView)) { currentMenuView.putText(selectedForView); } } catch (Exception e) { diff --git a/src/main/java/org/myrobotlab/kinematics/IMEngine.java b/src/main/java/org/myrobotlab/kinematics/IMEngine.java index d27252d425..d48a89efea 100644 --- a/src/main/java/org/myrobotlab/kinematics/IMEngine.java +++ b/src/main/java/org/myrobotlab/kinematics/IMEngine.java @@ -4,6 +4,7 @@ package org.myrobotlab.kinematics; import java.util.ArrayList; +import java.util.Objects; import org.myrobotlab.genetic.Chromosome; import org.myrobotlab.genetic.Genetic; @@ -753,7 +754,7 @@ private Point moveToObject() { moveInfo.lastLink = arm.getLink(arm.getNumLinks() - 1); } else { for (DHLink link : arm.getLinks()) { - if (link.getName() == moveInfo.lastLinkName) { + if (Objects.equals(link.getName(), moveInfo.lastLinkName)) { moveInfo.lastLink = link; break; } diff --git a/src/main/java/org/myrobotlab/kinematics/PoseSequence.java b/src/main/java/org/myrobotlab/kinematics/PoseSequence.java index f7b6be7664..c4f83b031e 100644 --- a/src/main/java/org/myrobotlab/kinematics/PoseSequence.java +++ b/src/main/java/org/myrobotlab/kinematics/PoseSequence.java @@ -22,7 +22,7 @@ public String toString() { if (waitTimeMs == null) { return name; } else { - return String.format("%s %d ms"); + return String.format("%s %d ms", name, waitTimeMs); } } } diff --git a/src/main/java/org/myrobotlab/lang/py/ProgramABPy.java b/src/main/java/org/myrobotlab/lang/py/ProgramABPy.java index 982a0f53e6..88e5d932e0 100644 --- a/src/main/java/org/myrobotlab/lang/py/ProgramABPy.java +++ b/src/main/java/org/myrobotlab/lang/py/ProgramABPy.java @@ -2,6 +2,8 @@ import java.util.Set; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.framework.interfaces.ServiceInterface; import org.myrobotlab.service.ProgramAB; @@ -19,15 +21,15 @@ public String toPython(ProgramAB si) { String safename = safeRefName(brain); // lang - content.append(String.format(" " + "%s.setCurrentBotName('" + si.getCurrentBotName() + "')\n", safename)); - content.append(String.format(" " + "%s.setCurrentUserName('" + si.getCurrentUserName() + "')\n", safename)); + content.append(String.format(FormatUtil.asFormat(" " + "%s.setCurrentBotName('" + si.getCurrentBotName() + "')\n", ConversionCategory.GENERAL), safename)); + content.append(String.format(FormatUtil.asFormat(" " + "%s.setCurrentUserName('" + si.getCurrentUserName() + "')\n", ConversionCategory.GENERAL), safename)); brain.getAttached(); Set attached = si.getAttached("publishText"); for (String n : attached) { if (!n.contains("@")) { - content.append(String.format(" " + "%s.attachTextListener('" + n + "')\n", safename)); + content.append(String.format(FormatUtil.asFormat(" " + "%s.attachTextListener('" + n + "')\n", ConversionCategory.GENERAL), safename)); } } diff --git a/src/main/java/org/myrobotlab/memory/Memory.java b/src/main/java/org/myrobotlab/memory/Memory.java index fd55b0b457..73c4e02072 100644 --- a/src/main/java/org/myrobotlab/memory/Memory.java +++ b/src/main/java/org/myrobotlab/memory/Memory.java @@ -57,7 +57,7 @@ public void crawlAndPublish(String parentPath, Node currentNode) { } public Object get(String path) { - if (path == null || path == "") // TODO - test for .getNode(null) !!! + if (path == null || path.equals("")) // TODO - test for .getNode(null) !!! { return root; } else { diff --git a/src/main/java/org/myrobotlab/memory/Node.java b/src/main/java/org/myrobotlab/memory/Node.java index 2dcfddb9b8..56cc9e9091 100644 --- a/src/main/java/org/myrobotlab/memory/Node.java +++ b/src/main/java/org/myrobotlab/memory/Node.java @@ -2,6 +2,7 @@ import java.io.Serializable; import java.util.HashMap; +import java.util.Objects; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.logging.Level; @@ -93,10 +94,10 @@ public Node(String name) { * @return - an object found at the given path */ public Object get(String path) { - if (path == "") { + if (Objects.equals(path, "")) { return this; } - if (path == "/") { + if (Objects.equals(path, "/")) { return this.data; } diff --git a/src/main/java/org/myrobotlab/mqtt/MqttMsg.java b/src/main/java/org/myrobotlab/mqtt/MqttMsg.java index 95fa1789be..1912102fec 100644 --- a/src/main/java/org/myrobotlab/mqtt/MqttMsg.java +++ b/src/main/java/org/myrobotlab/mqtt/MqttMsg.java @@ -1,5 +1,7 @@ package org.myrobotlab.mqtt; +import org.checkerframework.checker.interning.qual.EqualsMethod; + import java.util.Objects; public class MqttMsg { @@ -145,14 +147,29 @@ public String toString() { } - @Override - public boolean equals(Object obj) { - return (this == obj); - } - @Override public final int hashCode() { return Objects.hash(messageType, ts, dupe, qosLevel, retain, remainingLength, clientId, username, topicName, packetId, payload); } + @EqualsMethod + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + MqttMsg mqttMsg = (MqttMsg) o; + + if (ts != mqttMsg.ts) return false; + if (dupe != mqttMsg.dupe) return false; + if (qosLevel != mqttMsg.qosLevel) return false; + if (retain != mqttMsg.retain) return false; + if (remainingLength != mqttMsg.remainingLength) return false; + if (packetId != mqttMsg.packetId) return false; + if (!Objects.equals(messageType, mqttMsg.messageType)) return false; + if (!Objects.equals(clientId, mqttMsg.clientId)) return false; + if (!Objects.equals(username, mqttMsg.username)) return false; + if (!Objects.equals(topicName, mqttMsg.topicName)) return false; + return Objects.equals(payload, mqttMsg.payload); + } } diff --git a/src/main/java/org/myrobotlab/opencv/FilterColorGrouping.java b/src/main/java/org/myrobotlab/opencv/FilterColorGrouping.java index fcf8030e9a..25a7b1c534 100644 --- a/src/main/java/org/myrobotlab/opencv/FilterColorGrouping.java +++ b/src/main/java/org/myrobotlab/opencv/FilterColorGrouping.java @@ -148,6 +148,7 @@ public void loadDefaultConfiguration() { groupList = new ArrayList(); } + @SuppressWarnings("not.interned") public Object process(BufferedImage output, BufferedImage image) { // TODO pre-allocate in init or constructor (init?)? diff --git a/src/main/java/org/myrobotlab/opencv/FrameFileRecorder.java b/src/main/java/org/myrobotlab/opencv/FrameFileRecorder.java index 2c519f33ef..0c1f9663f1 100644 --- a/src/main/java/org/myrobotlab/opencv/FrameFileRecorder.java +++ b/src/main/java/org/myrobotlab/opencv/FrameFileRecorder.java @@ -4,6 +4,8 @@ import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameRecorder; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.service.OpenCV; public class FrameFileRecorder extends FrameRecorder { @@ -34,7 +36,8 @@ public void stop() throws Exception { @Override public void record(Frame frame) throws Exception { - String filename = String.format(framesDir + File.separator + "%08d.%s", frameIndex, format); + String filename = String.format(FormatUtil.asFormat(framesDir + File.separator + "%08d.%s", + ConversionCategory.INT, ConversionCategory.GENERAL), frameIndex, format); CloseableFrameConverter converter = new CloseableFrameConverter(); OpenCV.saveToFile(filename, converter.toImage(frame)); converter.close(); diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilter.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilter.java index 6f95d8e200..4e497bb861 100644 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilter.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilter.java @@ -46,6 +46,8 @@ import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.opencv.opencv_core.IplImage; import org.bytedeco.opencv.opencv_core.Mat; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.interning.qual.Interned; import org.myrobotlab.cv.CvFilter; import org.myrobotlab.document.Classification; import org.myrobotlab.framework.Service; @@ -270,6 +272,7 @@ public void enableDisplay() { displayEnabled = true; } + @FormatMethod public void error(String format, Object... args) { if (opencv == null) { log.error(String.format(format, args)); diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterBoundingBoxToFile.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterBoundingBoxToFile.java index 6e32aca400..e4487b27de 100644 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterBoundingBoxToFile.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterBoundingBoxToFile.java @@ -39,6 +39,8 @@ import org.bytedeco.opencv.opencv_core.CvRect; import org.bytedeco.opencv.opencv_core.CvSize; import org.bytedeco.opencv.opencv_core.IplImage; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.math.geometry.Rectangle; import org.slf4j.Logger; @@ -82,7 +84,12 @@ public IplImage process(IplImage image) { IplImage copy = cvCreateImage(size, image.depth(), image.nChannels()); cvCopy(image, copy, null); // roi vs mask ? - saveToFile(String.format("%s" + File.separator + "%07d-%03d.png", targetDir, opencv.getFrameIndex(), i), copy); + saveToFile(String.format( + FormatUtil.asFormat( + "%s" + File.separator + "%07d-%03d.png", + ConversionCategory.GENERAL, ConversionCategory.INT + ), + targetDir, opencv.getFrameIndex(), i), copy); // cvSaveImage(String.format("%s"+File.separator+"%07d-%03d.png", // targetDir, opencv.getFrameIndex(), i), copy); roiRect.close(); diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4J.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4J.java index 6b5285dd86..92ad974e28 100644 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4J.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4J.java @@ -18,6 +18,8 @@ import org.bytedeco.opencv.opencv_core.IplImage; import org.bytedeco.opencv.opencv_core.Rect; import org.bytedeco.opencv.opencv_imgproc.CvFont; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.Deeplearning4j; import org.myrobotlab.service.Runtime; @@ -87,7 +89,7 @@ public IplImage process(IplImage image) throws InterruptedException { } public static String padRight(String s, int n) { - return String.format("%1$-" + n + "s", s); + return String.format(FormatUtil.asFormat("%1$-" + n + "s", ConversionCategory.GENERAL), s); } public void drawRect(IplImage image, Rect rect, CvScalar color) { diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4JTransfer.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4JTransfer.java index 512da5bfa8..25d9df324a 100755 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4JTransfer.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterDL4JTransfer.java @@ -18,6 +18,8 @@ import org.bytedeco.opencv.opencv_core.IplImage; import org.bytedeco.opencv.opencv_core.Rect; import org.bytedeco.opencv.opencv_imgproc.CvFont; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.deeplearning4j.CustomModel; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.Deeplearning4j; @@ -91,7 +93,7 @@ public IplImage process(IplImage image) throws InterruptedException { } public static String padRight(String s, int n) { - return String.format("%1$-" + n + "s", s); + return String.format(FormatUtil.asFormat("%1$-" + n + "s", ConversionCategory.GENERAL), s); } public void drawRect(IplImage image, Rect rect, CvScalar color) { diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceRecognizer.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceRecognizer.java index b088344287..899677cbd5 100644 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceRecognizer.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceRecognizer.java @@ -25,6 +25,7 @@ import java.nio.IntBuffer; import java.util.ArrayList; import java.util.HashMap; +import java.util.Objects; import java.util.UUID; import javax.imageio.ImageIO; @@ -261,7 +262,7 @@ public boolean train() throws IOException { trained = false; } // populate the human readable labels on the trained model - for (int k : idToLabelMap.keySet()) { + for (Integer k : idToLabelMap.keySet()) { faceRecognizer.setLabelInfo(k, idToLabelMap.get(k)); } return true; @@ -442,7 +443,7 @@ public IplImage process(IplImage image) throws InterruptedException { String name = predictFace(dFaceMat); cvPutText(image, name, dF.resolveGlobalLowerLeftCorner(), font, AbstractCvScalar.CYAN); // If it's a new name. invoke it an publish. - if (lastRecognizedName != name) { + if (!Objects.equals(lastRecognizedName, name)) { invoke("publishRecognizedFace", name); } // TODO: might be good to store more metadata with the last diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceTraining.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceTraining.java index d682d50fa4..152229f16a 100644 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceTraining.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterFaceTraining.java @@ -165,7 +165,7 @@ public class OpenCVFilterFaceTraining extends OpenCVFilter { // all machine dirs with have underscore "_"{subclass} File rootTrainingDir = new File("training"); - File facesSubclass = new File(String.format(rootTrainingDir + File.separator + "faces")); + File facesSubclass = new File(rootTrainingDir + File.separator + "faces"); public boolean saveFaces = true; @@ -778,7 +778,7 @@ public IplImage process(IplImage image) { private String getMachineFileName(File subclass, int frameIndex, int faceCnt) { String parent = subclass.getParent(); String machineSubclass = "_" + subclass.getName(); - return String.format(parent + File.separator + machineSubclass + File.separator + String.format("%07d-%03d.png", frameIndex, faceCnt)); + return parent + File.separator + machineSubclass + File.separator + String.format("%07d-%03d.png", frameIndex, faceCnt); } @Override diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterLloyd.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterLloyd.java index 4a5cf028a1..39dcdf742e 100755 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterLloyd.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterLloyd.java @@ -37,6 +37,8 @@ import org.bytedeco.opencv.opencv_core.Size; import org.bytedeco.opencv.opencv_dnn.Net; import org.bytedeco.opencv.opencv_imgproc.CvFont; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.deeplearning4j.CustomModel; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.Deeplearning4j; @@ -225,7 +227,7 @@ public IplImage process(IplImage image) throws InterruptedException { } public static String padRight(String s, int n) { - return String.format("%1$-" + n + "s", s); + return String.format(FormatUtil.asFormat("%1$-" + n + "s", ConversionCategory.GENERAL), s); } private void displayResult(IplImage image, ArrayList result) { diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterMiniXception.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterMiniXception.java index 8dea3fdf75..2cef1e6b7b 100755 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterMiniXception.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterMiniXception.java @@ -19,6 +19,8 @@ import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_core.Rect; import org.bytedeco.opencv.opencv_imgproc.CvFont; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.deeplearning4j.nn.modelimport.keras.exceptions.InvalidKerasConfigurationException; import org.deeplearning4j.nn.modelimport.keras.exceptions.UnsupportedKerasConfigurationException; import org.myrobotlab.logging.LoggerFactory; @@ -119,7 +121,7 @@ private IplImage extractSubImage(Mat inputMat, Rect boundingBox) { } public static String padRight(String s, int n) { - return String.format("%1$-" + n + "s", s); + return String.format(FormatUtil.asFormat("%1$-" + n + "s", ConversionCategory.GENERAL), s); } public void drawRect(IplImage image, Rect rect, CvScalar color) { diff --git a/src/main/java/org/myrobotlab/opencv/OpenCVFilterTesseract.java b/src/main/java/org/myrobotlab/opencv/OpenCVFilterTesseract.java index b85aba65e8..e20ae9da7f 100644 --- a/src/main/java/org/myrobotlab/opencv/OpenCVFilterTesseract.java +++ b/src/main/java/org/myrobotlab/opencv/OpenCVFilterTesseract.java @@ -15,6 +15,8 @@ import org.bytedeco.opencv.opencv_core.CvScalar; import org.bytedeco.opencv.opencv_core.IplImage; import org.bytedeco.opencv.opencv_imgproc.CvFont; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.Runtime; import org.myrobotlab.service.TesseractOcr; @@ -65,7 +67,7 @@ public IplImage process(IplImage image) throws InterruptedException { } public static String padRight(String s, int n) { - return String.format("%1$-" + n + "s", s); + return String.format(FormatUtil.asFormat("%1$-" + n + "s", ConversionCategory.GENERAL), s); } private void displayResult(IplImage image, String result) { diff --git a/src/main/java/org/myrobotlab/openni/PImage.java b/src/main/java/org/myrobotlab/openni/PImage.java index 85492f4be6..5a2558b4c8 100644 --- a/src/main/java/org/myrobotlab/openni/PImage.java +++ b/src/main/java/org/myrobotlab/openni/PImage.java @@ -513,7 +513,7 @@ public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, int dx1, int d // dx2 /= 2f; dy2 /= 2f; } - if ((src == this) && intersect(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2)) { + if ((equals(src)) && intersect(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2)) { blit_resize(get(sx1, sy1, sx2 - sx1, sy2 - sy1), 0, 0, sx2 - sx1 - 1, sy2 - sy1 - 1, pixels, width, height, dx1, dy1, dx2, dy2, mode); } else { blit_resize(src, sx1, sy1, sx2, sy2, pixels, width, height, dx1, dy1, dx2, dy2, mode); @@ -886,7 +886,7 @@ public void copy(PImage src, int sx1, int sy1, int sx2, int sy2, int dx1, int dy // dx2 /= 2f; dy2 /= 2f; } - if ((src == this) && intersect(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2)) { + if (equals(src) && intersect(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2)) { // if src is me, and things intersect, make a copy of the data blit_resize(get(sx1, sy1, sx2 - sx1, sy2 - sy1), 0, 0, sx2 - sx1 - 1, sy2 - sy1 - 1, pixels, width, height, dx1, dy1, dx2, dy2, REPLACE); } else { diff --git a/src/main/java/org/myrobotlab/openni/PMatrix3D.java b/src/main/java/org/myrobotlab/openni/PMatrix3D.java index caa2d199c4..34ab40fcd3 100644 --- a/src/main/java/org/myrobotlab/openni/PMatrix3D.java +++ b/src/main/java/org/myrobotlab/openni/PMatrix3D.java @@ -1,5 +1,6 @@ package org.myrobotlab.openni; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.logging.LoggerFactory; import org.slf4j.Logger; @@ -307,7 +308,7 @@ protected void invTranslate(float tx, float ty, float tz) { * Multiply a three or four element vector against this matrix. If out is null * or not length 3 or 4, a new float array (length 3) will be returned. */ - public float[] mult(float[] source, float[] target) { + public float[] mult(@FindDistinct float[] source, float[] target) { if (target == null || target.length < 3) { target = new float[3]; } diff --git a/src/main/java/org/myrobotlab/service/Adafruit16CServoDriver.java b/src/main/java/org/myrobotlab/service/Adafruit16CServoDriver.java index 37d79e6105..bef1fd3984 100644 --- a/src/main/java/org/myrobotlab/service/Adafruit16CServoDriver.java +++ b/src/main/java/org/myrobotlab/service/Adafruit16CServoDriver.java @@ -16,6 +16,7 @@ import java.util.Set; import java.util.TreeMap; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.junit.Ignore; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -712,14 +713,14 @@ public List getPinList() { } @Override - public boolean isAttached(Attachable instance) { + public boolean isAttached(@FindDistinct Attachable instance) { // FIXME - this is messy ! if (controller == null) { return false; } // attached controller - if (controller != null && controller == instance) { + if (controller == instance) { return isAttached; } @@ -802,13 +803,13 @@ public void attach(I2CController controller, String deviceBus, String deviceAddr } @Override - public void attachI2CController(I2CController controller) { + public void attachI2CController(@FindDistinct I2CController controller) { // FIXME - way way too complex - clean up if (isAttached(controller)) return; - if (this.controllerName != null && this.controllerName != controller.getName()) { + if (this.controllerName != null && !this.controllerName.equals(controller.getName())) { log.info("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/AdafruitIna219.java b/src/main/java/org/myrobotlab/service/AdafruitIna219.java index 43c058d248..a61d5a9ce6 100644 --- a/src/main/java/org/myrobotlab/service/AdafruitIna219.java +++ b/src/main/java/org/myrobotlab/service/AdafruitIna219.java @@ -3,8 +3,10 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -221,7 +223,7 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { log.error("Already attached to {}, use detach({}) first", this.controllerName, controller.getName()); @@ -244,7 +246,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/AdafruitMotorHat4Pi.java b/src/main/java/org/myrobotlab/service/AdafruitMotorHat4Pi.java index 4d3c47c955..fd4be8c78d 100644 --- a/src/main/java/org/myrobotlab/service/AdafruitMotorHat4Pi.java +++ b/src/main/java/org/myrobotlab/service/AdafruitMotorHat4Pi.java @@ -11,8 +11,10 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.logging.LoggerFactory; @@ -431,10 +433,10 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -454,7 +456,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/Ads1115.java b/src/main/java/org/myrobotlab/service/Ads1115.java index 7ab10c4dee..321cb87d5c 100644 --- a/src/main/java/org/myrobotlab/service/Ads1115.java +++ b/src/main/java/org/myrobotlab/service/Ads1115.java @@ -6,8 +6,10 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -423,10 +425,10 @@ public void attach(Attachable service) throws Exception { } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -496,7 +498,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/Arduino.java b/src/main/java/org/myrobotlab/service/Arduino.java index 7398c00d6f..34b1b33233 100644 --- a/src/main/java/org/myrobotlab/service/Arduino.java +++ b/src/main/java/org/myrobotlab/service/Arduino.java @@ -19,6 +19,7 @@ import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.lang3.ArrayUtils; import org.myrobotlab.arduino.BoardInfo; import org.myrobotlab.arduino.BoardType; import org.myrobotlab.arduino.DeviceSummary; @@ -391,17 +392,17 @@ public void attachMotorControl(MotorControl motor) throws Exception { return; } - Integer motorType = null; - int[] pins = null; + int motorType; + Integer[] pins; if (motor.getClass().equals(Motor.class)) { motorType = MOTOR_TYPE_SIMPLE; Motor m = (Motor) motor; - pins = new int[] { getAddress(m.getPwrPin()), getAddress(m.getDirPin()) }; + pins = new Integer[] { getAddress(m.getPwrPin()), getAddress(m.getDirPin()) }; } else if (motor.getClass().equals(MotorDualPwm.class)) { motorType = MOTOR_TYPE_DUAL_PWM; MotorDualPwm m = (MotorDualPwm) motor; - pins = new int[] { getAddress(m.getLeftPwmPin()), getAddress(m.getRightPwmPin()) }; + pins = new Integer[] { getAddress(m.getLeftPwmPin()), getAddress(m.getRightPwmPin()) }; // } else if (motor.getClass().equals(MotorStepper)){ // FIXME implement } else { @@ -417,7 +418,7 @@ public void attachMotorControl(MotorControl motor) throws Exception { // send data to micro-controller - convert degrees to microseconds // int uS = degreeToMicroseconds(targetOutput); - msg.motorAttach(deviceId, motorType, pins); + msg.motorAttach(deviceId, motorType, ArrayUtils.toPrimitive(pins)); // the callback - motor better have a check // isAttached(MotorControl) to prevent infinite loop @@ -1979,12 +1980,12 @@ public void onServoWriteMicroseconds(ServoControl servo, int uS) { public void setAref(String aref) { aref = aref.toUpperCase(); if (this.getBoard().contains("mega")) { - if (aref == "INTERNAL") { + if (aref.equals("INTERNAL")) { error("Aref " + aref + " is not compatible with your board " + this.getBoard()); aref = "DEFAULT"; } } else { - if (aref == "INTERNAL1V1" || aref == "INTERNAL2V56") { + if (aref.equals("INTERNAL1V1") || aref.equals("INTERNAL2V56")) { error("Aref INTERNALxV is not compatible with your board " + this.getBoard()); aref = "DEFAULT"; } diff --git a/src/main/java/org/myrobotlab/service/Bno055.java b/src/main/java/org/myrobotlab/service/Bno055.java index aab854397e..7c39784601 100644 --- a/src/main/java/org/myrobotlab/service/Bno055.java +++ b/src/main/java/org/myrobotlab/service/Bno055.java @@ -4,8 +4,10 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -1583,10 +1585,10 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -1606,7 +1608,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/DiyServo.java b/src/main/java/org/myrobotlab/service/DiyServo.java index f48714fa37..9eba68066f 100644 --- a/src/main/java/org/myrobotlab/service/DiyServo.java +++ b/src/main/java/org/myrobotlab/service/DiyServo.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.List; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.interfaces.ServiceInterface; import org.myrobotlab.logging.Level; @@ -447,7 +448,7 @@ public void detach(String controllerName) { } } - public void detach(PinArrayControl pinArrayControl) { + public void detach(@FindDistinct PinArrayControl pinArrayControl) { if (this.pinArrayControl == pinArrayControl) { this.pinArrayControl = null; isPinArrayControlSet = false; diff --git a/src/main/java/org/myrobotlab/service/Esp8266_01.java b/src/main/java/org/myrobotlab/service/Esp8266_01.java index 775924c92e..fcb6e8cb54 100644 --- a/src/main/java/org/myrobotlab/service/Esp8266_01.java +++ b/src/main/java/org/myrobotlab/service/Esp8266_01.java @@ -5,6 +5,7 @@ import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.HashMap; +import java.util.Objects; import java.util.Set; import org.apache.commons.codec.binary.Hex; @@ -353,8 +354,8 @@ public void attachI2CControl(I2CControl control) { I2CDeviceMap devicedata = new I2CDeviceMap(); if (i2cDevices.containsKey(key)) { devicedata = i2cDevices.get(key); - if (control.getName() != devicedata.serviceName) { - log.error("Attach of {} failed: {} already exists on bus %s address {}", control.getName(), devicedata.serviceName, control.getDeviceBus(), control.getDeviceAddress()); + if (!Objects.equals(control.getName(), devicedata.serviceName)) { + log.error("Attach of {} failed: {} already exists on bus {} address {}", control.getName(), devicedata.serviceName, control.getDeviceBus(), control.getDeviceAddress()); } } else { devicedata.serviceName = control.getName(); diff --git a/src/main/java/org/myrobotlab/service/GoPro.java b/src/main/java/org/myrobotlab/service/GoPro.java index 776230fdbe..7b717d466a 100644 --- a/src/main/java/org/myrobotlab/service/GoPro.java +++ b/src/main/java/org/myrobotlab/service/GoPro.java @@ -7,6 +7,8 @@ import org.myrobotlab.logging.LoggingFactory; import org.slf4j.Logger; +import java.util.Objects; + public class GoPro extends Service { transient public HttpClient http; @@ -43,7 +45,7 @@ public void setWifiPassword(String passwordWifi) { } public void turnCameraOff() { - if (cameraModel == "HERO4") { + if (Objects.equals(cameraModel, "HERO4")) { sendHttpGet("/gp/gpControl/command/system/sleep"); } else { System.out.println("Select your Camera Before"); @@ -51,9 +53,9 @@ public void turnCameraOff() { } public void shutterOn() { - if (cameraModel == "HERO4") { + if (Objects.equals(cameraModel, "HERO4")) { sendHttpGet("/gp/gpControl/command/shutter?p=1"); - } else if (cameraModel == "HERO3" && password != null) { + } else if (Objects.equals(cameraModel, "HERO3") && password != null) { sendHttpGet("/bacpac/SH?t=" + password + "&p=%01"); } else { log.error("Select your Camera model and insert your wifi password before"); diff --git a/src/main/java/org/myrobotlab/service/I2cMux.java b/src/main/java/org/myrobotlab/service/I2cMux.java index de18ba1f93..7a70e9273d 100644 --- a/src/main/java/org/myrobotlab/service/I2cMux.java +++ b/src/main/java/org/myrobotlab/service/I2cMux.java @@ -5,8 +5,10 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -241,10 +243,10 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -264,7 +266,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/InMoov2.java b/src/main/java/org/myrobotlab/service/InMoov2.java index 373f837ecf..78f831beb1 100644 --- a/src/main/java/org/myrobotlab/service/InMoov2.java +++ b/src/main/java/org/myrobotlab/service/InMoov2.java @@ -10,6 +10,8 @@ import java.util.TreeSet; import org.apache.commons.io.FilenameUtils; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.framework.Plan; import org.myrobotlab.framework.Platform; import org.myrobotlab.framework.Registration; @@ -1126,10 +1128,11 @@ public void speakAlert(String toSpeak) { } public void speakBlocking(String speak) { - speakBlocking(speak, (Object[]) null); + speakBlocking(FormatUtil.asFormat(speak), (Object[]) null); } // FIXME - publish text regardless if mouth exists ... + @FormatMethod public void speakBlocking(String format, Object... args) { if (format == null) { diff --git a/src/main/java/org/myrobotlab/service/JMonkeyEngine.java b/src/main/java/org/myrobotlab/service/JMonkeyEngine.java index a7e23c212d..d316593200 100644 --- a/src/main/java/org/myrobotlab/service/JMonkeyEngine.java +++ b/src/main/java/org/myrobotlab/service/JMonkeyEngine.java @@ -22,6 +22,7 @@ import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicInteger; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.cv.CvData; import org.myrobotlab.framework.Instantiator; @@ -969,7 +970,7 @@ public Node getNode(String name, Node startNode) { } } - public Spatial getRootChild(Spatial spatial) { + public Spatial getRootChild(@FindDistinct Spatial spatial) { if (spatial == null) { log.error("spatial is null"); return null; @@ -981,7 +982,8 @@ public Spatial getRootChild(Spatial spatial) { return null; } - while (p != null && p != rootNode) { + // Spatial uses default equals() so equivalent to p != rootNode + while (p != null && !p.equals(rootNode)) { c = p; p = c.getParent(); } diff --git a/src/main/java/org/myrobotlab/service/Joystick.java b/src/main/java/org/myrobotlab/service/Joystick.java index 9799dd2243..df381320dd 100644 --- a/src/main/java/org/myrobotlab/service/Joystick.java +++ b/src/main/java/org/myrobotlab/service/Joystick.java @@ -161,6 +161,7 @@ public synchronized void stop() { /** * main polling loop - data read and published */ + @SuppressWarnings("not.interned") public void poll() { Controller pollingController = null; diff --git a/src/main/java/org/myrobotlab/service/Lloyd.java b/src/main/java/org/myrobotlab/service/Lloyd.java index 02c69f60c6..da98072209 100755 --- a/src/main/java/org/myrobotlab/service/Lloyd.java +++ b/src/main/java/org/myrobotlab/service/Lloyd.java @@ -16,6 +16,8 @@ import org.apache.solr.client.solrj.response.FacetField.Count; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrInputDocument; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.deeplearning4j.CustomModel; import org.myrobotlab.framework.Service; import org.myrobotlab.kinematics.Point; @@ -509,7 +511,12 @@ public void launchWebGui() { webgui = (WebGui) Runtime.create("webgui", "WebGui"); webgui.autoStartBrowser(false); webgui.startService(); - webgui.startBrowser("http://localhost:8888/#/service/" + ear.getName()); + webgui.startBrowser( + FormatUtil.asFormat( + "http://localhost:%d/#/service/" + ear.getName(), + ConversionCategory.INT + ) + ); } public void attachCallbacks() { diff --git a/src/main/java/org/myrobotlab/service/Lm75a.java b/src/main/java/org/myrobotlab/service/Lm75a.java index d0029a9942..e27bd80cfe 100644 --- a/src/main/java/org/myrobotlab/service/Lm75a.java +++ b/src/main/java/org/myrobotlab/service/Lm75a.java @@ -3,8 +3,10 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -211,10 +213,10 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -234,7 +236,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/MotorHat4Pi.java b/src/main/java/org/myrobotlab/service/MotorHat4Pi.java index 2de92c5457..126cd1a281 100644 --- a/src/main/java/org/myrobotlab/service/MotorHat4Pi.java +++ b/src/main/java/org/myrobotlab/service/MotorHat4Pi.java @@ -2,6 +2,7 @@ import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.Set; import org.myrobotlab.framework.Registration; @@ -55,19 +56,19 @@ public Integer getPwmPin() { } public void setMotor(String motorId) { - if (motorId == "M1") { + if (Objects.equals(motorId, "M1")) { pwmPin = 8; leftDirPin = 9; rightDirPin = 10; - } else if (motorId == "M2") { + } else if (Objects.equals(motorId, "M2")) { pwmPin = 13; leftDirPin = 12; rightDirPin = 11; - } else if (motorId == "M3") { + } else if (Objects.equals(motorId, "M3")) { pwmPin = 2; leftDirPin = 3; rightDirPin = 4; - } else if (motorId == "M4") { + } else if (Objects.equals(motorId, "M4")) { pwmPin = 7; leftDirPin = 6; rightDirPin = 5; diff --git a/src/main/java/org/myrobotlab/service/Mpr121.java b/src/main/java/org/myrobotlab/service/Mpr121.java index c0168443d0..18fdaf51af 100644 --- a/src/main/java/org/myrobotlab/service/Mpr121.java +++ b/src/main/java/org/myrobotlab/service/Mpr121.java @@ -6,8 +6,10 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -351,7 +353,7 @@ public String getControllerName() { @Override public void setDeviceBus(String deviceBus) { if (isAttached) { - log.error(String.format("Already attached to %s, use detach(%s) first", this.controllerName)); + log.error(String.format("Already attached to %s, use detach(%s) first", this.controllerName, this.controllerName)); return; } this.deviceBus = deviceBus; @@ -361,7 +363,7 @@ public void setDeviceBus(String deviceBus) { @Override public void setDeviceAddress(String deviceAddress) { if (isAttached) { - log.error(String.format("Already attached to %s, use detach(%s) first", this.controllerName)); + log.error(String.format("Already attached to %s, use detach(%s) first", this.controllerName, this.controllerName)); return; } this.deviceAddress = deviceAddress; @@ -544,8 +546,7 @@ public boolean isAttached(String name) { @Override public List getPinList() { - List list = new ArrayList(pinIndex.values()); - return list; + return new ArrayList(pinIndex.values()); } @Override @@ -589,11 +590,11 @@ public void attachPinListener(PinListener listener, int pinAddress) { String name = listener.getName(); if (listener.isLocal()) { - List list = null; + List list; if (pinListeners.containsKey(pinAddress)) { list = pinListeners.get(pinAddress); } else { - list = new ArrayList(); + list = new ArrayList<>(); } list.add(listener); pinListeners.put(pinAddress, list); @@ -741,10 +742,10 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -764,7 +765,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } @@ -832,7 +833,6 @@ public boolean isAttached(Attachable instance) { if (controller != null && controller.getName().equals(instance.getName())) { return isAttached; } - ; return false; } diff --git a/src/main/java/org/myrobotlab/service/MqttBroker.java b/src/main/java/org/myrobotlab/service/MqttBroker.java index aab3e516ef..718639368d 100644 --- a/src/main/java/org/myrobotlab/service/MqttBroker.java +++ b/src/main/java/org/myrobotlab/service/MqttBroker.java @@ -483,7 +483,7 @@ private void saveIdentities() { byte[] encodedhash = digest.digest(password.getBytes(StandardCharsets.UTF_8)); // String credline = String.format(username + ":" + // StringUtil.bytesToHex(encodedhash)); - String credline = String.format(username + ":" + bytesToHex(encodedhash)); + String credline = username + ":" + bytesToHex(encodedhash); fos.write(credline.getBytes()); fos.close(); } diff --git a/src/main/java/org/myrobotlab/service/MyoThalmic.java b/src/main/java/org/myrobotlab/service/MyoThalmic.java index 496442ccf7..09c3194b26 100644 --- a/src/main/java/org/myrobotlab/service/MyoThalmic.java +++ b/src/main/java/org/myrobotlab/service/MyoThalmic.java @@ -1,5 +1,7 @@ package org.myrobotlab.service; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.framework.Service; import org.myrobotlab.logging.Level; import org.myrobotlab.logging.LoggerFactory; @@ -276,7 +278,12 @@ public String toString() { String poseString = null; if (currentPose != null) { String poseTypeString = currentPose.getType().toString(); - poseString = String.format("[%s%" + (scale - poseTypeString.length()) + "s]", poseTypeString, " "); + poseString = String.format( + FormatUtil.asFormat( + "[%s%" + (scale - poseTypeString.length()) + "s]", + ConversionCategory.GENERAL, + ConversionCategory.GENERAL) + , poseTypeString, " "); } else { poseString = String.format("[%14s]", " "); } diff --git a/src/main/java/org/myrobotlab/service/OledSsd1306.java b/src/main/java/org/myrobotlab/service/OledSsd1306.java index aed9aa7b4d..52d4644699 100644 --- a/src/main/java/org/myrobotlab/service/OledSsd1306.java +++ b/src/main/java/org/myrobotlab/service/OledSsd1306.java @@ -11,8 +11,10 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -865,10 +867,10 @@ public void attach(String controllerName, String deviceBus, String deviceAddress } @Override - public void attach(I2CController controller, String deviceBus, String deviceAddress) { + public void attach(@FindDistinct I2CController controller, String deviceBus, String deviceAddress) { if (isAttached && this.controller != controller) { - log.error("Already attached to {}, use detach({}) first", this.controllerName); + log.error("Already attached to {}, use detach({}) first", this.controllerName, this.controllerName); } controllerName = controller.getName(); @@ -888,7 +890,7 @@ public void attachI2CController(I2CController controller) { if (isAttached(controller)) return; - if (this.controllerName != controller.getName()) { + if (!Objects.equals(this.controllerName, controller.getName())) { log.error("Trying to attached to {}, but already attached to ({})", controller.getName(), this.controllerName); return; } diff --git a/src/main/java/org/myrobotlab/service/OpenCV.java b/src/main/java/org/myrobotlab/service/OpenCV.java index 46ba742553..2741dfdfff 100644 --- a/src/main/java/org/myrobotlab/service/OpenCV.java +++ b/src/main/java/org/myrobotlab/service/OpenCV.java @@ -94,6 +94,10 @@ import org.bytedeco.opencv.opencv_core.IplImage; import org.bytedeco.opencv.opencv_core.Rect; import org.bytedeco.opencv.opencv_imgproc.CvFont; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.formatter.util.FormatUtil; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.cv.CvData; import org.myrobotlab.cv.CvFilter; @@ -1466,12 +1470,17 @@ public void putText(int x, int y, String format, String color) { * args to format into the text * */ + @FormatMethod public void putText(String format, Object... args) { if (overlays.containsKey(format)) { Overlay overlay = overlays.get(format); overlay.text = String.format(format, args); } else { - putText(format, 20, 10 * overlays.size(), "black"); + putText( + FormatUtil.asFormat(format, + ConversionCategory.INT, + ConversionCategory.INT, + ConversionCategory.GENERAL), 20, 10 * overlays.size(), "black"); } } @@ -1546,7 +1555,12 @@ public void record(OpenCVData data) { */ FrameRecorder recorder = null; if (!recordingFrames) { - recordingFilename = String.format(getDataDir() + File.separator + "%s-%d.flv", recordingSource, System.currentTimeMillis()); + recordingFilename = String.format( + FormatUtil.asFormat( + getDataDir() + File.separator + "%s-%d.flv", + ConversionCategory.GENERAL, + ConversionCategory.INT + ), recordingSource, System.currentTimeMillis()); info("recording %s", recordingFilename); recorder = new FFmpegFrameRecorder(recordingFilename, frame.imageWidth, frame.imageHeight, 0); recorder.setFormat("flv"); @@ -1740,10 +1754,10 @@ public void setDisplayFilter(String name) { * JNI members or pointer references it will break, mark all of * these. */ - public void setFilterState(FilterWrapper otherFilter) { + public void setFilterState(@FindDistinct FilterWrapper otherFilter) { OpenCVFilter filter = getFilter(otherFilter.name); if (filter != null) { - if (filter != otherFilter.filter) { + if (!filter.equals(otherFilter.filter)) { Service.copyShallowFrom(filter, otherFilter.filter); } } else { diff --git a/src/main/java/org/myrobotlab/service/OpenNi.java b/src/main/java/org/myrobotlab/service/OpenNi.java index ed7f0f65a1..56fe35d1bc 100644 --- a/src/main/java/org/myrobotlab/service/OpenNi.java +++ b/src/main/java/org/myrobotlab/service/OpenNi.java @@ -27,26 +27,28 @@ import SimpleOpenNI.SimpleOpenNIConstants; /** - * @author GroG - * + * + * * Service to expose the capabilities of kinect like sensors through a * modified SimpleOpenNI interface - * + *

* Dependencies on Linux : boost-devel - * - * References - * - * http://stackoverflow.com/questions/2676719/calculating-the-angle- - * between-the-line-defined-by-two-points - * http://stackoverflow.com/questions - * /9614109/how-to-calculate-an-angle-from-points - * http://nghiaho.com/?page_id=846 - * https://www.youtube.com/watch?v=KKuiuctKGRQ Some snippets are taken + *

+ *

References

+ *

+ *

    + *
  1. Calculating the angle between a line and the x-axis
  2. + *
  3. How to calculate an angle from points?
  4. + *
  5. http://nghiaho.com/?page_id=846
  6. + *
  7. 3D Game Math | Matrices - Multiplication & Representation
  8. + *
  9. Some snippets are taken * from "Making Things See" a excellent book and I recommend buying it - * http://shop.oreilly.com/product/0636920020684.do - * - * - * + * Making Things See
  10. + * + *
+ * + * @author GroG + * */ public class OpenNi extends Service // implements // UserTracker.NewFrameListener, @@ -219,7 +221,7 @@ public void addOpenNIData(Service service) { public void addRubySketchUpFrame(Skeleton skeleton, boolean singleFrame) { try { StringBuffer sb = new StringBuffer(); - sb.append(String.format(String.format("\n#-----------------------frame %d begin----------------------\n", frameNumber))); + sb.append(String.format("\n#-----------------------frame %d begin----------------------\n", frameNumber)); sb.append(String.format("head = [%f,%f,%f]\n", skeleton.head.x, skeleton.head.z, skeleton.head.y)); sb.append(String.format("neck = [%f,%f,%f]\n", skeleton.neck.x, skeleton.neck.z, skeleton.neck.y)); @@ -263,7 +265,7 @@ public void addRubySketchUpFrame(Skeleton skeleton, boolean singleFrame) { sb.append("model.entities.add_line(rightHip, rightKnee)\n"); sb.append("model.entities.add_line(rightKnee, rightFoot)\n"); - sb.append(String.format(String.format("\n#-----------------------frame %d begin----------------------\n", frameNumber))); + sb.append(String.format("\n#-----------------------frame %d begin----------------------\n", frameNumber)); if (rubySketchUpFile == null) { String filename = String.format("skeleton.%d.rb", skeleton.frameNumber); diff --git a/src/main/java/org/myrobotlab/service/Osc.java b/src/main/java/org/myrobotlab/service/Osc.java index 63bfe69efd..368c742212 100644 --- a/src/main/java/org/myrobotlab/service/Osc.java +++ b/src/main/java/org/myrobotlab/service/Osc.java @@ -89,7 +89,7 @@ public void listen(Integer newPort) throws IOException { public void listen(String filter, Integer newPort) throws IOException { - if (port != null && port != newPort) { + if (port != null && !port.equals(newPort)) { receiver.stopListening(); receiver = null; } diff --git a/src/main/java/org/myrobotlab/service/Pcf8574.java b/src/main/java/org/myrobotlab/service/Pcf8574.java index 5cd0cf233d..552f8d8388 100644 --- a/src/main/java/org/myrobotlab/service/Pcf8574.java +++ b/src/main/java/org/myrobotlab/service/Pcf8574.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeMap; @@ -276,7 +277,7 @@ public void attach(String controllerName, String deviceBus, String deviceAddress @Override public void attachI2CController(I2CController controller) { - if (this.controllerName == controller.getName()) { + if (Objects.equals(this.controllerName, controller.getName())) { log.info("already attached to {}, use detach({}) first", controllerName, controllerName); return; } @@ -510,7 +511,7 @@ public void pinMode(int address, int mode) { public void pinMode(int address, String mode) { PinDefinition pinDef = getPin(address); // There is no direction register in the PCF8574 it is always BIDRECTIONAL. - if (mode != "BIDIRECTIONAL") { + if (!Objects.equals(mode, "BIDIRECTIONAL")) { log.error("There is no direction register, address {} mode must be BIDIRECTIONAL", address); } pinDef.setMode("BIDIRECTIONAL"); diff --git a/src/main/java/org/myrobotlab/service/ProgramAB.java b/src/main/java/org/myrobotlab/service/ProgramAB.java index 0852f7e68f..3d9bff2084 100644 --- a/src/main/java/org/myrobotlab/service/ProgramAB.java +++ b/src/main/java/org/myrobotlab/service/ProgramAB.java @@ -19,6 +19,7 @@ import org.alicebot.ab.MagicBooleans; import org.alicebot.ab.ProgramABListener; import org.apache.commons.lang3.StringUtils; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.image.Util; @@ -1274,7 +1275,7 @@ public void addBotsDir(String path) { } @Override - synchronized public void onChangePredicate(Chat chat, String predicateName, String result) { + synchronized public void onChangePredicate(@FindDistinct Chat chat, String predicateName, String result) { log.info("{} on predicate change {}={}", chat.bot.name, predicateName, result); // a little janky because program-ab doesn't know the predicate filename, diff --git a/src/main/java/org/myrobotlab/service/RoboClaw.java b/src/main/java/org/myrobotlab/service/RoboClaw.java index a26d3dfbe8..5036c4d6be 100644 --- a/src/main/java/org/myrobotlab/service/RoboClaw.java +++ b/src/main/java/org/myrobotlab/service/RoboClaw.java @@ -273,7 +273,7 @@ public void motorMove(MotorControl mc) { driveBackwardM1(Math.abs(power)); } } else { - error("invalid port number %d", port); + error("invalid port number %s", port); } } diff --git a/src/main/java/org/myrobotlab/service/Runtime.java b/src/main/java/org/myrobotlab/service/Runtime.java index 50169e6cd6..fd1b2b0281 100644 --- a/src/main/java/org/myrobotlab/service/Runtime.java +++ b/src/main/java/org/myrobotlab/service/Runtime.java @@ -37,6 +37,7 @@ import java.util.TreeMap; import java.util.TreeSet; +import org.checkerframework.checker.interning.qual.Interned; import org.myrobotlab.codec.ClassUtil; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.codec.CodecUtils.ApiDescription; @@ -113,6 +114,7 @@ * VAR OF RUNTIME ! * */ +@Interned public class Runtime extends Service implements MessageListener, ServiceLifeCyclePublisher, RemoteMessageHandler, ConnectionManager, Gateway, LocaleProvider { final static private long serialVersionUID = 1L; @@ -2567,7 +2569,7 @@ public Runtime(String n, String id) { synchronized (INSTANCE_LOCK) { if (runtime == null) { // fist and only time.... - runtime = this; + runtime = (@Interned Runtime) this; repo = (IvyWrapper) Repo.getInstance(LIBRARIES, "IvyWrapper"); } } @@ -2587,7 +2589,9 @@ public Runtime(String n, String id) { String userHome = System.getProperty("user.home"); // initialize the config list - publishConfigList(); + // Needed to make Checker happy, just tells it this + // is interned so don't blow up on receiver mismatch + ((@Interned Runtime) this).publishConfigList(); // TODO this should be a single log statement // http://developer.android.com/reference/java/lang/System.html diff --git a/src/main/java/org/myrobotlab/service/Sabertooth.java b/src/main/java/org/myrobotlab/service/Sabertooth.java index b02ff98744..d8ea618715 100644 --- a/src/main/java/org/myrobotlab/service/Sabertooth.java +++ b/src/main/java/org/myrobotlab/service/Sabertooth.java @@ -155,15 +155,15 @@ public void setAddress(Integer address) { public void setMaxVoltage(int maxVolts) { int actualValue = (int) Math.round(maxVolts / 5.12); - info("setting max voltage to %d volts - actual value %f", actualValue); + info("setting max voltage to %d volts - actual value %d", maxVolts, actualValue); sendPacket(SET_MAX_VOLTAGE, actualValue); } public void setMinVoltage(int min) { int actualValue = (min - 6) * 5; - info("setting max voltage to %d volts - actual value %d", actualValue); + info("setting min voltage to %d volts - actual value %d", min, actualValue); if (actualValue < 0 || actualValue > 120) { - error("invalid value must be between 0 and 120 %d", actualValue); + error("invalid value must be between 0 and 120: %d", actualValue); return; } sendPacket(SET_MIN_VOLTAGE, actualValue); @@ -237,7 +237,7 @@ public void motorMove(MotorControl mc) { driveBackwardsMotor2(Math.abs(power)); } } else { - error("invalid port number %d", port); + error("invalid port number %s", port); } } diff --git a/src/main/java/org/myrobotlab/service/Serial.java b/src/main/java/org/myrobotlab/service/Serial.java index 1f5326bcf1..a7e4c01b43 100644 --- a/src/main/java/org/myrobotlab/service/Serial.java +++ b/src/main/java/org/myrobotlab/service/Serial.java @@ -19,6 +19,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import org.checkerframework.checker.formatter.qual.Format; import org.myrobotlab.framework.Platform; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.ServiceInterface; diff --git a/src/main/java/org/myrobotlab/service/SerialRelay.java b/src/main/java/org/myrobotlab/service/SerialRelay.java index 7f0f371e44..7bb68c82da 100644 --- a/src/main/java/org/myrobotlab/service/SerialRelay.java +++ b/src/main/java/org/myrobotlab/service/SerialRelay.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import org.myrobotlab.framework.Service; @@ -112,7 +113,7 @@ public Set getAttached() { } public int[] onSerialData(SerialRelayData data) { - if (data.deviceId == controller.getDeviceId(this)) { + if (Objects.equals(data.deviceId, controller.getDeviceId(this))) { byte[] byteData = new byte[data.data.length]; // TODO: convert serial relay data to pass around a byte array.. for (int i = 0; i < data.data.length; i++) { diff --git a/src/main/java/org/myrobotlab/service/Ssc32UsbServoController.java b/src/main/java/org/myrobotlab/service/Ssc32UsbServoController.java index 82b00edf28..893bbaba2b 100644 --- a/src/main/java/org/myrobotlab/service/Ssc32UsbServoController.java +++ b/src/main/java/org/myrobotlab/service/Ssc32UsbServoController.java @@ -4,6 +4,8 @@ import java.util.HashMap; import java.util.Set; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.logging.LoggerFactory; @@ -115,6 +117,7 @@ public void connect(String port, int rate, int databits, int stopbits, int parit serial.open(port, rate, databits, stopbits, parity); } + @FormatMethod public void write(String cmd, Object... params) { if (serial == null || !serial.isConnected()) { error("must be connected to serial port - connect(port)"); @@ -154,7 +157,7 @@ public void onServoMoveTo(ServoMove move) { // String cmd = "#%dP%d"; // write("#%dP%d", servo.getPin(), // (int)servo.toUs(servo.getTargetOutput())); - write(sb.toString()); + write(FormatUtil.asFormat(sb.toString())); } @Override @@ -167,7 +170,7 @@ public void onServoWriteMicroseconds(ServoControl servo, int uS) { // sb.append("T").append(velocity * 10); // T is us per second sb.append("T").append(velocity * 100); } - write(sb.toString()); + write(FormatUtil.asFormat(sb.toString())); } @Override diff --git a/src/main/java/org/myrobotlab/service/UltrasonicSensor.java b/src/main/java/org/myrobotlab/service/UltrasonicSensor.java index 8b8fe2cc60..74804d1c17 100644 --- a/src/main/java/org/myrobotlab/service/UltrasonicSensor.java +++ b/src/main/java/org/myrobotlab/service/UltrasonicSensor.java @@ -7,6 +7,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.logging.LoggerFactory; @@ -229,7 +230,7 @@ public boolean isAttached(String name) { return isAttached; } - protected boolean isAttached(UltrasonicSensorController controller) { + protected boolean isAttached(@FindDistinct UltrasonicSensorController controller) { return this.controller == controller; } diff --git a/src/main/java/org/myrobotlab/service/Updater.java b/src/main/java/org/myrobotlab/service/Updater.java index 779dc1c81f..64ccadc067 100644 --- a/src/main/java/org/myrobotlab/service/Updater.java +++ b/src/main/java/org/myrobotlab/service/Updater.java @@ -9,6 +9,9 @@ import java.util.Set; import java.util.TreeSet; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.Format; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.CmdOptions; import org.myrobotlab.framework.MrlException; @@ -76,15 +79,18 @@ public class Updater extends Service { @Option(names = { "-a", "--auto-update" }, arity = "0..1", description = "automatically apply update") protected boolean autoUpdate = true; - final public static String MULTI_BRANCH_LATEST_BUILD_URL = "http://build.myrobotlab.org:8080/job/myrobotlab/job/%s/lastSuccessfulBuild/artifact/target/myrobotlab.jar"; + final public static @Format(ConversionCategory.GENERAL) String MULTI_BRANCH_LATEST_BUILD_URL = + "http://build.myrobotlab.org:8080/job/myrobotlab/job/%s/lastSuccessfulBuild/artifact/target/myrobotlab.jar"; // for more info - // myrobotlab-multibranch/job/develop/api/json // WARNING Jenkins url api format for multi-branch pipelines is different from // maven builds ! - final static String REMOTE_BUILDS_URL = "job/%s/api/json?tree=builds[number,status,timestamp,id,result]"; + final static @Format(ConversionCategory.GENERAL) String REMOTE_BUILDS_URL = + "job/%s/api/json?tree=builds[number,status,timestamp,id,result]"; - final static String REMOTE_JAR_URL = "job/%s/%s/artifact/target/myrobotlab.jar"; + final static @Format({ConversionCategory.GENERAL, ConversionCategory.GENERAL}) String REMOTE_JAR_URL = + "job/%s/%s/artifact/target/myrobotlab.jar"; final static String REMOTE_MULTI_BRANCH_JOBS = "api/json"; @@ -219,7 +225,9 @@ public Set getRemoteVersions(String branch) { Set versions = new TreeSet(); try { - byte[] data = Http.get(String.format(REMOTE_BUILDS_URL_HOME + REMOTE_BUILDS_URL, branch)); + byte[] data = Http.get(String.format( + FormatUtil.asFormat(REMOTE_BUILDS_URL_HOME + REMOTE_BUILDS_URL, + ConversionCategory.GENERAL), branch)); if (data != null) { String json = new String(data); WorkflowJob job = CodecUtils.fromJson(json, WorkflowJob.class); @@ -304,7 +312,8 @@ public synchronized void stop() { purgeTask("checkForUpdates"); } - protected static final String MULTI_BRANCH_VERSION = "http://build.myrobotlab.org:8080/job/myrobotlab/job/%s/api/xml?xpath=/*/lastStableBuild/number"; + protected static final @Format(ConversionCategory.GENERAL) String MULTI_BRANCH_VERSION = + "http://build.myrobotlab.org:8080/job/myrobotlab/job/%s/api/xml?xpath=/*/lastStableBuild/number"; public String getRemoteVersion(String branch) throws UnsupportedEncodingException { byte[] v = Http.get(String.format(MULTI_BRANCH_VERSION, branch)); diff --git a/src/main/java/org/myrobotlab/service/WorkE.java b/src/main/java/org/myrobotlab/service/WorkE.java index 9ed607d4a0..36dd024410 100644 --- a/src/main/java/org/myrobotlab/service/WorkE.java +++ b/src/main/java/org/myrobotlab/service/WorkE.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.formatter.util.FormatUtil; import org.myrobotlab.framework.Platform; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.Status; @@ -752,9 +754,10 @@ public double setVolume(double volume) { @Override public String speak(String text) { - return speak(text, (Object[]) null); + return speak(FormatUtil.asFormat(text), (Object[]) null); } + @FormatMethod public String speak(String inText, Object... args) { String text = null; diff --git a/src/main/java/org/myrobotlab/service/abstracts/AbstractMotor.java b/src/main/java/org/myrobotlab/service/abstracts/AbstractMotor.java index b8a974c7ea..297af55030 100644 --- a/src/main/java/org/myrobotlab/service/abstracts/AbstractMotor.java +++ b/src/main/java/org/myrobotlab/service/abstracts/AbstractMotor.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Set; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Registration; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; @@ -167,7 +168,7 @@ public double getPowerLevel() { } @Override - public boolean isAttached(MotorController controller) { + public boolean isAttached(@FindDistinct MotorController controller) { return this.controller == controller; } diff --git a/src/main/java/org/myrobotlab/service/abstracts/AbstractPinEncoder.java b/src/main/java/org/myrobotlab/service/abstracts/AbstractPinEncoder.java index b04a551f16..d5a2cc7b8e 100644 --- a/src/main/java/org/myrobotlab/service/abstracts/AbstractPinEncoder.java +++ b/src/main/java/org/myrobotlab/service/abstracts/AbstractPinEncoder.java @@ -1,5 +1,6 @@ package org.myrobotlab.service.abstracts; +import org.checkerframework.checker.interning.qual.FindDistinct; import org.myrobotlab.framework.Service; import org.myrobotlab.sensor.EncoderData; import org.myrobotlab.service.interfaces.EncoderControl; @@ -24,7 +25,7 @@ public AbstractPinEncoder(String n, String id) { } @Override - public void attachEncoderController(EncoderController controller) { + public void attachEncoderController(@FindDistinct EncoderController controller) { if (this.controller == controller) { log.info("{} already attached to controller {}", getName(), controller.getName()); } diff --git a/src/main/java/org/myrobotlab/service/abstracts/AbstractSpeechSynthesis.java b/src/main/java/org/myrobotlab/service/abstracts/AbstractSpeechSynthesis.java index 47a6a81c5d..9d2ec8b55d 100644 --- a/src/main/java/org/myrobotlab/service/abstracts/AbstractSpeechSynthesis.java +++ b/src/main/java/org/myrobotlab/service/abstracts/AbstractSpeechSynthesis.java @@ -10,6 +10,8 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.Format; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.io.FileIO; @@ -245,7 +247,7 @@ public Object getVoiceProvider() { // This is the format string that will be used when asking for confirmation. // FIXME - why is this in english - does it make sense ? - should probably not // be here - public String confirmationString = "did you say %s ?"; + public @Format(ConversionCategory.GENERAL) String confirmationString = "did you say %s ?"; protected Map voiceKeyIndex = new TreeMap<>(); @@ -709,7 +711,7 @@ public List speakBlocking(String toSpeak) { private String filterText(String toSpeak) { - if (toSpeak == null || toSpeak.isEmpty() || toSpeak == " ") { + if (toSpeak == null || toSpeak.isEmpty() || toSpeak.equals(" ")) { return " , "; } toSpeak = toSpeak.trim(); diff --git a/src/main/java/org/myrobotlab/swing/widget/AboutDialog.java b/src/main/java/org/myrobotlab/swing/widget/AboutDialog.java index fe6fe25d8d..ef2766eba9 100644 --- a/src/main/java/org/myrobotlab/swing/widget/AboutDialog.java +++ b/src/main/java/org/myrobotlab/swing/widget/AboutDialog.java @@ -95,6 +95,7 @@ public AboutDialog(SwingGui gui) { setVisible(true); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/ImageButton.java b/src/main/java/org/myrobotlab/swing/widget/ImageButton.java index 280b05ada8..f0e77af082 100644 --- a/src/main/java/org/myrobotlab/swing/widget/ImageButton.java +++ b/src/main/java/org/myrobotlab/swing/widget/ImageButton.java @@ -77,6 +77,7 @@ public void deactivate() { setIcon(icon); } + @SuppressWarnings("not.interned") public boolean isActive() { return getIcon() == activatedIcon; } diff --git a/src/main/java/org/myrobotlab/swing/widget/OpenCVListAdapter.java b/src/main/java/org/myrobotlab/swing/widget/OpenCVListAdapter.java index 81f0bb4949..51a2e0261f 100644 --- a/src/main/java/org/myrobotlab/swing/widget/OpenCVListAdapter.java +++ b/src/main/java/org/myrobotlab/swing/widget/OpenCVListAdapter.java @@ -41,6 +41,7 @@ public OpenCVListAdapter(OpenCVGui opencvgui) { popup.add(addMenuItem); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/OscopePinTrace.java b/src/main/java/org/myrobotlab/swing/widget/OscopePinTrace.java index f6b79bada9..faad1831c2 100644 --- a/src/main/java/org/myrobotlab/swing/widget/OscopePinTrace.java +++ b/src/main/java/org/myrobotlab/swing/widget/OscopePinTrace.java @@ -167,6 +167,7 @@ public OscopePinTrace(Oscope oscope, PinDefinition pinDef, float hsv) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); @@ -333,7 +334,7 @@ public void update(PinData pinData) { lastX = drawPointX; } - valueLabel.setText(String.format("%.2f", pinData.value)); + valueLabel.setText(String.format("%.2f", (float) pinData.value)); // TODO - NOW IS THE TIME TO UPDATE BUFFERED IMAGES !!! // TODO - optimization of shifting the raster data ? diff --git a/src/main/java/org/myrobotlab/swing/widget/ProgressDialog.java b/src/main/java/org/myrobotlab/swing/widget/ProgressDialog.java index 84a8b08f5d..bd27258c74 100644 --- a/src/main/java/org/myrobotlab/swing/widget/ProgressDialog.java +++ b/src/main/java/org/myrobotlab/swing/widget/ProgressDialog.java @@ -94,6 +94,7 @@ public ProgressDialog(RuntimeGui parent) { setSize(320, 300); } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent event) { Object source = event.getSource(); diff --git a/src/main/java/org/myrobotlab/swing/widget/StackTraceDialog.java b/src/main/java/org/myrobotlab/swing/widget/StackTraceDialog.java index 745cb8c8e6..e87c204bcb 100755 --- a/src/main/java/org/myrobotlab/swing/widget/StackTraceDialog.java +++ b/src/main/java/org/myrobotlab/swing/widget/StackTraceDialog.java @@ -108,6 +108,7 @@ public void mouseExited(MouseEvent e) { } + @SuppressWarnings("not.interned") @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub diff --git a/src/main/java/org/saintandreas/gl/shaders/Program.java b/src/main/java/org/saintandreas/gl/shaders/Program.java index 7e972e3837..791fc23b56 100755 --- a/src/main/java/org/saintandreas/gl/shaders/Program.java +++ b/src/main/java/org/saintandreas/gl/shaders/Program.java @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.Map; +import org.checkerframework.checker.interning.qual.UsesObjectEquals; import org.saintandreas.gl.BufferUtils; import org.saintandreas.gl.OpenGL; import org.saintandreas.math.Matrix4f; @@ -37,6 +38,7 @@ import org.saintandreas.resources.Resource; import org.saintandreas.resources.ResourceManager; +@UsesObjectEquals public class Program { // private static final Logger LOG = LoggerFactory.getLogger(Program.class); diff --git a/src/main/java/org/saintandreas/math/Matrix3f.java b/src/main/java/org/saintandreas/math/Matrix3f.java index ff2f6f2fcd..2651b01a4b 100755 --- a/src/main/java/org/saintandreas/math/Matrix3f.java +++ b/src/main/java/org/saintandreas/math/Matrix3f.java @@ -31,6 +31,8 @@ */ package org.saintandreas.math; +import org.checkerframework.checker.interning.qual.EqualsMethod; + /** * Matrix3f defines a 3x3 matrix. Matrix data is maintained * internally and is accessible via the get and set methods. Convenience methods @@ -549,16 +551,18 @@ public int hashCode() { * the object to compare for equality * @return true if they are equal */ + @EqualsMethod @Override public boolean equals(Object o) { - if (!(o instanceof Matrix3f) || o == null) { - return false; - } - if (this == o) { return true; } + if (!(o instanceof Matrix3f)) { + return false; + } + + Matrix3f comp = (Matrix3f) o; if (Float.compare(m00, comp.m00) != 0) { return false; diff --git a/src/main/java/org/saintandreas/math/Matrix4f.java b/src/main/java/org/saintandreas/math/Matrix4f.java index da2ef0f6c7..46fde672f2 100755 --- a/src/main/java/org/saintandreas/math/Matrix4f.java +++ b/src/main/java/org/saintandreas/math/Matrix4f.java @@ -31,6 +31,8 @@ */ package org.saintandreas.math; +import org.checkerframework.checker.interning.qual.EqualsMethod; + import java.nio.ByteBuffer; import java.nio.FloatBuffer; @@ -1012,16 +1014,19 @@ public int hashCode() { * the object to compare for equality * @return true if they are equal */ + @EqualsMethod @Override public boolean equals(Object o) { - if (!(o instanceof Matrix4f) || o == null) { - return false; - } - if (this == o) { return true; } + if (!(o instanceof Matrix4f)) { + return false; + } + + + Matrix4f comp = (Matrix4f) o; if (Float.compare(m00, comp.m00) != 0) { return false; diff --git a/src/main/java/org/saintandreas/math/Vector2f.java b/src/main/java/org/saintandreas/math/Vector2f.java index 64c5e2ebea..37698ae75b 100755 --- a/src/main/java/org/saintandreas/math/Vector2f.java +++ b/src/main/java/org/saintandreas/math/Vector2f.java @@ -32,6 +32,8 @@ package org.saintandreas.math; +import org.checkerframework.checker.interning.qual.EqualsMethod; + import javax.annotation.Nonnull; /** @@ -112,16 +114,17 @@ public String toString() { * the object to compare for equality * @return true if they are equal */ + @EqualsMethod @Override public boolean equals(Object o) { - if (!(o instanceof Vector2f)) { - return false; - } - if (this == o) { return true; } + if (!(o instanceof Vector2f)) { + return false; + } + Vector2f comp = (Vector2f) o; if (Float.compare(x, comp.x) != 0) return false; diff --git a/src/main/java/org/saintandreas/math/Vector3f.java b/src/main/java/org/saintandreas/math/Vector3f.java index 8c160ac24d..3013470b56 100755 --- a/src/main/java/org/saintandreas/math/Vector3f.java +++ b/src/main/java/org/saintandreas/math/Vector3f.java @@ -32,6 +32,8 @@ package org.saintandreas.math; +import org.checkerframework.checker.interning.qual.EqualsMethod; + import javax.annotation.Nonnull; /** @@ -218,15 +220,18 @@ public float[] toArray() { * the object to compare for equality * @return true if they are equal */ + @EqualsMethod @Override public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Vector3f)) { return false; } - if (this == o) { - return true; - } + Vector3f comp = (Vector3f) o; if (Float.compare(x, comp.x) != 0) diff --git a/src/main/java/org/saintandreas/math/Vector4.java b/src/main/java/org/saintandreas/math/Vector4.java index b0dc008512..3b039664dc 100755 --- a/src/main/java/org/saintandreas/math/Vector4.java +++ b/src/main/java/org/saintandreas/math/Vector4.java @@ -32,6 +32,8 @@ package org.saintandreas.math; +import org.checkerframework.checker.interning.qual.EqualsMethod; + /** * Vector4f defines a Vector for a four float value tuple. * Vector4f can represent any four dimensional value, such as a @@ -106,15 +108,18 @@ public Vector4(float x, float y, float z, float w) { * the object to compare for equality * @return true if they are equal */ + @EqualsMethod @Override public final boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Vector4)) { return false; } - if (this == o) { - return true; - } + @SuppressWarnings("unchecked") Vector4 comp = (Vector4) o; From 219f3e70e669cd5f4e8fe45e025c6e3437dfffaa Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 11:03:52 -0600 Subject: [PATCH 08/11] Remove mrl.iml --- mrl.iml | 753 -------------------------------------------------------- 1 file changed, 753 deletions(-) delete mode 100644 mrl.iml diff --git a/mrl.iml b/mrl.iml deleted file mode 100644 index 0deddb780c..0000000000 --- a/mrl.iml +++ /dev/null @@ -1,753 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 09abee1acf98ac38584605e7850cd28da3f02aee Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 11:27:19 -0600 Subject: [PATCH 09/11] Fix possible iteration bug in removeListener() --- src/main/java/org/myrobotlab/framework/Service.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/myrobotlab/framework/Service.java b/src/main/java/org/myrobotlab/framework/Service.java index 21c31b24ae..ae20407c76 100644 --- a/src/main/java/org/myrobotlab/framework/Service.java +++ b/src/main/java/org/myrobotlab/framework/Service.java @@ -44,6 +44,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -1460,13 +1461,14 @@ public void removeListener(String topicMethod, String callbackName) { public void removeListener(String outMethod, String serviceName, String inMethod) { if (outbox.notifyList.containsKey(outMethod)) { List nel = outbox.notifyList.get(outMethod); - for (int i = 0; i < nel.size(); ++i) { - MRLListener target = nel.get(i); - if (target.callbackName.compareTo(serviceName) == 0) { - nel.remove(i); + nel.removeIf(target -> { + if (serviceName.equals(target.callbackName)) { log.info("removeListener requested {}.{} to be removed", serviceName, outMethod); + return true; + } else { + return false; } - } + }); } else { log.info("removeListener requested {}.{} to be removed - but does not exist", serviceName, outMethod); } From a01afb8cf57b1ce89142b6ef73c574f2ae1d4f12 Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 12:59:28 -0600 Subject: [PATCH 10/11] Clean up Service code --- .../org/myrobotlab/framework/Service.java | 202 +++++++++--------- 1 file changed, 96 insertions(+), 106 deletions(-) diff --git a/src/main/java/org/myrobotlab/framework/Service.java b/src/main/java/org/myrobotlab/framework/Service.java index ae20407c76..37c984e886 100644 --- a/src/main/java/org/myrobotlab/framework/Service.java +++ b/src/main/java/org/myrobotlab/framework/Service.java @@ -25,6 +25,30 @@ package org.myrobotlab.framework; +import org.checkerframework.checker.formatter.qual.ConversionCategory; +import org.checkerframework.checker.formatter.qual.Format; +import org.checkerframework.checker.formatter.qual.FormatMethod; +import org.checkerframework.checker.formatter.util.FormatUtil; +import org.checkerframework.checker.interning.qual.EqualsMethod; +import org.checkerframework.checker.interning.qual.Interned; +import org.myrobotlab.codec.CodecUtils; +import org.myrobotlab.framework.interfaces.Attachable; +import org.myrobotlab.framework.interfaces.Broadcaster; +import org.myrobotlab.framework.interfaces.Invoker; +import org.myrobotlab.framework.interfaces.NameProvider; +import org.myrobotlab.framework.interfaces.ServiceInterface; +import org.myrobotlab.image.Util; +import org.myrobotlab.io.FileIO; +import org.myrobotlab.logging.LoggerFactory; +import org.myrobotlab.logging.Logging; +import org.myrobotlab.service.Runtime; +import org.myrobotlab.service.config.ServiceConfig; +import org.myrobotlab.service.data.Locale; +import org.myrobotlab.service.interfaces.AuthorizationProvider; +import org.myrobotlab.service.interfaces.QueueReporter; +import org.myrobotlab.service.meta.abstracts.MetaData; +import org.slf4j.Logger; + import java.io.File; import java.io.IOException; import java.io.PrintWriter; @@ -38,15 +62,16 @@ import java.net.InetAddress; import java.net.URI; import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Properties; import java.util.Set; import java.util.Timer; @@ -54,30 +79,6 @@ import java.util.TreeSet; import java.util.concurrent.CopyOnWriteArrayList; -import org.checkerframework.checker.formatter.qual.ConversionCategory; -import org.checkerframework.checker.formatter.qual.Format; -import org.checkerframework.checker.formatter.qual.FormatMethod; -import org.checkerframework.checker.formatter.util.FormatUtil; -import org.checkerframework.checker.interning.qual.EqualsMethod; -import org.checkerframework.checker.interning.qual.Interned; -import org.myrobotlab.codec.CodecUtils; -import org.myrobotlab.framework.interfaces.Attachable; -import org.myrobotlab.framework.interfaces.Broadcaster; -import org.myrobotlab.framework.interfaces.Invoker; -import org.myrobotlab.framework.interfaces.NameProvider; -import org.myrobotlab.framework.interfaces.ServiceInterface; -import org.myrobotlab.image.Util; -import org.myrobotlab.io.FileIO; -import org.myrobotlab.logging.LoggerFactory; -import org.myrobotlab.logging.Logging; -import org.myrobotlab.service.Runtime; -import org.myrobotlab.service.config.ServiceConfig; -import org.myrobotlab.service.data.Locale; -import org.myrobotlab.service.interfaces.AuthorizationProvider; -import org.myrobotlab.service.interfaces.QueueReporter; -import org.myrobotlab.service.meta.abstracts.MetaData; -import org.slf4j.Logger; - /** * * Service is the base of the MyRobotLab Service Oriented Architecture. All @@ -95,7 +96,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac // http://howtodoinjava.com/2015/03/25/task-scheduling-with-executors-scheduledthreadpoolexecutor-example/ /** - * contains all the meta data about the service - pulled from the static + * contains all the metadata about the service - pulled from the static * method getMetaData() each instance will call the method and populate the * data for an instance * @@ -104,7 +105,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac private static final long serialVersionUID = 1L; - transient public final static Logger log = LoggerFactory.getLogger(Service.class); + public final static Logger log = LoggerFactory.getLogger(Service.class); /** * key into Runtime's hosts of ServiceEnvironments mrlscheme://[gateway @@ -116,7 +117,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac /** * unique name of the service (eqv. hostname) */ - private String name; + private final String name; /** * unique id - (eqv. domain suffix) @@ -139,9 +140,9 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac transient protected Thread thisThread = null; - transient protected Inbox inbox = null; + transient protected Inbox inbox; - transient protected Outbox outbox = null; + transient protected Outbox outbox; protected String serviceVersion = null; @@ -172,7 +173,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac /** * for promoting portability and good pathing */ - final transient protected static String fs = File.separator; + final protected static String fs = File.separator; /** * for promoting portability and good pathing @@ -182,7 +183,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac /** * a more capable task handler */ - transient Map tasks = new HashMap(); + transient Map tasks = new HashMap<>(); /** * used as a static cache for quick method name testing FIXME - if you make @@ -192,7 +193,7 @@ public abstract class Service implements Runnable, Serializable, ServiceInterfac transient protected Set methodSet; /** - * This is the map of interfaces - its really "static" information, since its + * This is the map of interfaces - its really "static" information, since it's * a definition. However, since gson will not process statics - we are making * it a member variable */ @@ -249,12 +250,12 @@ public static Object copyShallowFrom(Object target, Object source) { if (target == source) { // data is myself - operating on local copy return target; } - Set> ancestry = new HashSet>(); + Set> ancestry = new HashSet<>(); Class targetClass = source.getClass(); ancestry.add(targetClass); - // if we are a org.myrobotlab object climb up the ancestry to + // if we are an org.myrobotlab object climb up the ancestry to // copy all super-type fields ... // GroG says: I wasn't comfortable copying of "Service" - because its never // been tested before - so we copy all definitions from @@ -377,11 +378,11 @@ public static void sleep(int millis) { public static void sleep(long millis) { try { Thread.sleep(millis); - } catch (InterruptedException e) { + } catch (InterruptedException ignored) { } } - public final static String stackToString(final Throwable e) { + public static String stackToString(final Throwable e) { StringWriter sw; try { sw = new StringWriter(); @@ -405,9 +406,11 @@ static public String getDataDir(String typeName) { String dataDir = Runtime.DATA_DIR + fs + typeName; File f = new File(dataDir); if (!f.exists()) { - f.mkdirs(); + if(!f.mkdirs()) { + log.error("mkdir failed: {}", f.getAbsolutePath()); + } } - return Runtime.DATA_DIR + fs + typeName; + return dataDir; } public String getDataDir() { @@ -418,9 +421,11 @@ public String getDataInstanceDir() { String dataDir = Runtime.DATA_DIR + fs + getClass().getSimpleName() + fs + getName(); File f = new File(dataDir); if (!f.exists()) { - f.mkdirs(); + if(!f.mkdirs()) { + log.error("mkdir failed: {}", f.getAbsolutePath()); + } } - return Runtime.DATA_DIR + fs + getClass().getSimpleName() + fs + getName(); + return dataDir; } // ============== resources begin ====================================== @@ -500,8 +505,8 @@ static public String getResourceDir(String serviceType, String additionalPath) { } /** - * non static get resource path return the path to a resource - since the root - * can change depending if in debug or runtime - it gets the appropriate root + * non-static get resource path return the path to a resource - since the root + * can change depending on if in debug or runtime - it gets the appropriate root * and adds the additionalPath.. * * @param additionalPath @@ -599,7 +604,7 @@ public String getResourceAsString(String resourceName) { byte[] data = getResource(resourceName); if (data != null) { try { - return new String(data, "UTF-8"); + return new String(data, StandardCharsets.UTF_8); } catch (Exception e) { log.error("getResourceAsString threw", e); } @@ -615,7 +620,7 @@ static public String getResourceAsString(String serviceType, String resourceName byte[] data = getResource(serviceType, resourceName); if (data != null) { try { - return new String(data, "UTF-8"); + return new String(data, StandardCharsets.UTF_8); } catch (Exception e) { log.error("getResourceAsString threw", e); } @@ -713,12 +718,23 @@ public File[] getResourceDirList(String additionalPath) { /** * new overload - mqtt uses this for json encoded MrlListener to process - * subscriptions + * subscriptions. data must be a {@code Map} with the + * following keys and corresponding values: + *
    + *
  • {@code topicMethod}: The method that is being subscribed to
  • + *
  • {@code callbackName}: The service that will receive the callback.
  • + *
  • {@code callbackMethod}: The method that will be used as the callback.
  • + *
+ * + * The values may be any Object but the value used for the listener will be the result + * of the value's {@link Object#toString()} method. + * + * @see #addListener(String, String, String) * * @param data * - listener callback info */ - public void addListener(Map data) { + public void addListener(Map data) { // {topicMethod=pulse, callbackName=mqtt01, callbackMethod=onPulse} if (!data.containsKey("topicMethod")) { error("addListener topicMethod missing"); @@ -761,8 +777,7 @@ public void addListener(String topicMethod, String callbackName, String callback // iterate through all looking for duplicate boolean found = false; List nes = outbox.notifyList.get(listener.topicMethod); - for (int i = 0; i < nes.size(); ++i) { - MRLListener entry = nes.get(i); + for (MRLListener entry : nes) { if (entry.equals(listener)) { log.debug("attempting to add duplicate MRLListener {}", listener); found = true; @@ -774,7 +789,7 @@ public void addListener(String topicMethod, String callbackName, String callback nes.add(listener); } } else { - List notifyList = new CopyOnWriteArrayList(); + List notifyList = new CopyOnWriteArrayList<>(); notifyList.add(listener); log.debug("adding addListener from {}.{} to {}.{}", this.getName(), listener.topicMethod, listener.callbackName, listener.callbackMethod); outbox.notifyList.put(listener.topicMethod, notifyList); @@ -862,7 +877,6 @@ synchronized public void purgeTask(String taskName) { try { timer.cancel(); timer.purge(); - timer = null; } catch (Exception e) { log.info(e.getMessage()); } @@ -881,7 +895,6 @@ public void purgeTasks() { try { timer.purge(); timer.cancel(); - timer = null; } catch (Exception e) { log.info(e.getMessage()); } @@ -934,17 +947,12 @@ public void close(Writer w) { if (w == null) { return; } - try { + try (w) { w.flush(); } catch (Exception e) { Logging.logError(e); - } finally { - try { - w.close(); - } catch (Exception e) { - // don't really care - } } + // don't really care } @Override @@ -986,11 +994,11 @@ public Status getLastError() { // FIXME - use the method cache public Set getMessageSet() { - Set ret = new TreeSet(); + Set ret = new TreeSet<>(); Method[] methods = getMethods(); log.debug("getMessageSet loading {} non-sub-routable methods", methods.length); - for (int i = 0; i < methods.length; ++i) { - ret.add(methods[i].getName()); + for (Method method : methods) { + ret.add(method.getName()); } return ret; } @@ -1020,13 +1028,12 @@ public Method[] getMethods() { } public Map getInterfaceSet() { - Map ret = new TreeMap(); + Map ret = new TreeMap<>(); Class c = getClass(); while (c != Object.class) { Class[] interfaces = c.getInterfaces(); - for (int i = 0; i < interfaces.length; ++i) { - Class interfaze = interfaces[i]; + for (Class interfaze : interfaces) { // ya silly :P - but gson's default conversion of a HashSet is an // array ret.put(interfaze.getName(), interfaze.getName()); @@ -1065,9 +1072,9 @@ public List getNotifyList(String key) { } } + @SuppressWarnings("unchecked") @Override public ArrayList getNotifyListKeySet() { - ArrayList ret = new ArrayList(); if (getOutbox() == null) { // this is remote system - it has a null outbox, because its // been serialized with a transient outbox @@ -1083,9 +1090,8 @@ public ArrayList getNotifyListKeySet() { return remote; } else { - ret.addAll(getOutbox().notifyList.keySet()); + return new ArrayList<>(getOutbox().notifyList.keySet()); } - return ret; } @Override @@ -1125,23 +1131,19 @@ public boolean hasPeers() { } public String help(String format, String level) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); Method[] methods = this.getClass().getDeclaredMethods(); - TreeMap sorted = new TreeMap(); + TreeMap sorted = new TreeMap<>(); - for (int i = 0; i < methods.length; ++i) { - Method m = methods[i]; + for (Method m : methods) { sorted.put(m.getName(), m); } for (String key : sorted.keySet()) { Method m = sorted.get(key); sb.append("/").append(getName()).append("/").append(m.getName()); Class[] types = m.getParameterTypes(); - if (types != null) { - for (int j = 0; j < types.length; ++j) { - Class c = types[j]; - sb.append("/").append(c.getSimpleName()); - } + for (Class c : types) { + sb.append("/").append(c.getSimpleName()); } sb.append("\n"); } @@ -1160,7 +1162,7 @@ public void in(Message msg) { */ @Override final public Object invoke(Message msg) { - Object retobj = null; + Object retobj; if (log.isDebugEnabled()) { log.debug("--invoking {}.{}({}) {} --", name, msg.method, CodecUtils.getParameterSignature(msg.data), msg.msgId); @@ -1264,9 +1266,6 @@ final public Object invokeOn(boolean blockLocally, Object obj, String methodName if (subList != null) { for (MRLListener listener : subList) { Message msg = Message.createMessage(getFullName(), listener.callbackName, listener.callbackMethod, retobj); - if (msg == null) { - log.error("Unable to create message.. null message created"); - } msg.sendingMethod = methodName; if (runtime.isLocal(msg)) { ServiceInterface si = Runtime.getService(listener.callbackName); @@ -1290,7 +1289,7 @@ final public Object invokeOn(boolean blockLocally, Object obj, String methodName // we attempted to invoke this , it blew up. Catch it here, // continue // through the rest of the listeners instead of bombing out. - log.error("Invoke blew up! on: {} calling method {} ", si.getName(), m.toString(), e); + log.error("Invoke blew up! on: {} calling method {} ", si.getName(), m, e); } } } @@ -1674,7 +1673,7 @@ public Object sendBlocking(Message msg, Integer timeout) throws InterruptedExcep */ protected Object waitOn(String fullName, String method, Integer timeout, Message sendMsg) throws InterruptedException, TimeoutException { - String subscriber = null; + String subscriber; if (sendMsg != null) { // InProcCli proxies - so the subscription needs to be from the sender NOT // from runtime ! @@ -1686,7 +1685,7 @@ protected Object waitOn(String fullName, String method, Integer timeout, Message // put in-process lock in map String callbackMethod = CodecUtils.getCallbackTopicName(method); String blockingKey = String.format("%s.%s", subscriber, callbackMethod); - Object[] blockingLockContainer = null; + Object[] blockingLockContainer; if (!inbox.blockingList.containsKey(blockingKey)) { blockingLockContainer = new Object[1]; inbox.blockingList.put(blockingKey, blockingLockContainer); @@ -1784,9 +1783,7 @@ public ServiceInterface startPeer(String peerKey) { sr.state = "STARTED"; sr.actualName = actualName; sr.type = si.getSimpleName(); - if (si != null) { - CodecUtils.setField(this, peerKey, si); - } + CodecUtils.setField(this, peerKey, si); } invoke("publishPeerStarted", peerKey); broadcastState(); @@ -1900,7 +1897,13 @@ public void subscribe(String topicName, String topicMethod, String callbackName, } } else { if (topicMethod.contains("*")) { // FIXME "any regex expression - Set tnames = Runtime.getMethodMap(topicName).keySet(); + var methodMap = Runtime.getMethodMap(topicName); + if (methodMap == null) { + error("Service with name %s does not exist, cannot subscribe to wildcard topic method %s", + topicName, topicMethod); + return; + } + Set tnames = methodMap.keySet(); for (String method : tnames) { MRLListener listener = new MRLListener(method, callbackName, callbackMethod); send(Message.createMessage(getName(), topicName, "addListener", listener)); @@ -1945,12 +1948,8 @@ public Status error(Exception e) { @FormatMethod @Override public Status error(String format, Object... args) { - Status ret = null; - if (format != null) { - ret = Status.error(String.format(format, args)); - } else { - ret = Status.error(String.format("", args)); - } + Status ret; + ret = Status.error(String.format(Objects.requireNonNullElse(format, ""), args)); ret.name = getName(); log.error(ret.toString()); lastError = ret; @@ -2365,10 +2364,7 @@ public boolean isDev() { return true; } check = new File(FileIO.gluePaths(String.format("../%s/resource", simpleName), simpleName)); - if (check.exists()) { - return true; - } - return false; + return check.exists(); } @@ -2417,7 +2413,7 @@ public String localize(String key, Object... args) { if (this != runtime) { // if we are not runtime - we ask runtime prop = runtime.localize(key, args); - } else if (this == runtime) { + } else { // if we are runtime - we try default en prop = runtime.localizeDefault(key); } @@ -2546,13 +2542,7 @@ public boolean isType(String clazz) { @Override public int compareTo(ServiceInterface o) { - if (this.creationOrder == o.getCreationOrder()) { - return 0; - } - if (this.creationOrder < o.getCreationOrder()) { - return -1; - } - return 1; + return Integer.compare(this.creationOrder, o.getCreationOrder()); } @Override From 8097b0a851df3e13871184afa12ec9e30026976a Mon Sep 17 00:00:00 2001 From: Branden Butler Date: Fri, 6 Jan 2023 13:06:20 -0600 Subject: [PATCH 11/11] Fix Format checker casts --- src/main/java/org/myrobotlab/framework/Service.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/myrobotlab/framework/Service.java b/src/main/java/org/myrobotlab/framework/Service.java index 37c984e886..05cd4f1670 100644 --- a/src/main/java/org/myrobotlab/framework/Service.java +++ b/src/main/java/org/myrobotlab/framework/Service.java @@ -31,6 +31,7 @@ import org.checkerframework.checker.formatter.util.FormatUtil; import org.checkerframework.checker.interning.qual.EqualsMethod; import org.checkerframework.checker.interning.qual.Interned; +import org.checkerframework.checker.nullness.qual.NonNull; import org.myrobotlab.codec.CodecUtils; import org.myrobotlab.framework.interfaces.Attachable; import org.myrobotlab.framework.interfaces.Broadcaster; @@ -1949,7 +1950,7 @@ public Status error(Exception e) { @Override public Status error(String format, Object... args) { Status ret; - ret = Status.error(String.format(Objects.requireNonNullElse(format, ""), args)); + ret = Status.error(String.format(format, args)); ret.name = getName(); log.error(ret.toString()); lastError = ret; @@ -1958,11 +1959,11 @@ public Status error(String format, Object... args) { } public Status error(String msg) { - return error((@Format(ConversionCategory.UNUSED) String) msg, (Object[]) null); + return error(FormatUtil.asFormat(msg), (Object[]) null); } public Status warn(String msg) { - return warn((@Format(ConversionCategory.UNUSED) String) msg, (Object[]) null); + return warn(FormatUtil.asFormat(msg), (Object[]) null); } @FormatMethod @@ -1983,7 +1984,7 @@ public Status warn(String format, Object... args) { * @return string */ public Status info(String msg) { - return info((@Format(ConversionCategory.UNUSED) String)msg, (Object[]) null); + return info(FormatUtil.asFormat(msg), (Object[]) null); } /**