From 414d7a84e67e020fa975312b404b9b95125ccff1 Mon Sep 17 00:00:00 2001 From: Holger Friedrich Date: Sun, 27 Mar 2022 11:27:39 +0200 Subject: [PATCH] [knx] Reduce compiler warnings (#12518) added NonNullByDefault annotations rename functions and local variables not matching the naming scheme Signed-off-by: Holger Friedrich --- .../knx/internal/KNXBindingConstants.java | 2 ++ .../binding/knx/internal/KNXTypeMapper.java | 6 ++--- .../knx/internal/channel/AbstractSpec.java | 5 ++-- .../knx/internal/channel/ListenSpecImpl.java | 2 ++ .../internal/client/AbstractKNXClient.java | 5 ++-- .../client/CustomKNXNetworkLinkIP.java | 3 +++ .../knx/internal/client/DeviceInspector.java | 6 ++--- .../knx/internal/client/SerialClient.java | 10 ++++--- .../internal/config/BridgeConfiguration.java | 13 ++++----- .../knx/internal/config/DeviceConfig.java | 11 +++++--- .../config/IPBridgeConfiguration.java | 15 ++++++----- .../config/SerialBridgeConfiguration.java | 5 +++- .../internal/factory/KNXHandlerFactory.java | 4 +-- .../handler/AbstractKNXThingHandler.java | 15 ++++++----- .../knx/internal/handler/DeviceConstants.java | 3 +++ .../internal/handler/DeviceThingHandler.java | 4 +-- .../handler/IPBridgeThingHandler.java | 21 +++++++-------- .../internal/channel/KNXChannelTypeTest.java | 27 ++++++++++++------- .../internal/dpt/KNXCoreTypeMapperTest.java | 4 ++- 19 files changed, 96 insertions(+), 65 deletions(-) diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXBindingConstants.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXBindingConstants.java index 4f243cb62..1896c04a2 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXBindingConstants.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXBindingConstants.java @@ -18,6 +18,7 @@ import java.util.Collections; import java.util.Set; import java.util.stream.Stream; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ThingTypeUID; /** @@ -26,6 +27,7 @@ import org.openhab.core.thing.ThingTypeUID; * * @author Karel Goderis - Initial contribution */ +@NonNullByDefault public class KNXBindingConstants { public static final String BINDING_ID = "knx"; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXTypeMapper.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXTypeMapper.java index 2fb88e342..a02d6e7bf 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXTypeMapper.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/KNXTypeMapper.java @@ -17,7 +17,6 @@ import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.types.Type; import tuwien.auto.calimero.datapoint.Datapoint; -import tuwien.auto.calimero.process.ProcessEvent; /** * This interface must be implemented by classes that provide a type mapping @@ -25,7 +24,7 @@ import tuwien.auto.calimero.process.ProcessEvent; * When a command or status update is sent to an item on the openHAB event bus, * it must be clear, in which format it must be sent to KNX and vice versa. * - * @author Kai Kreuzer + * @author Kai Kreuzer - Initial contribution * */ @NonNullByDefault @@ -45,7 +44,8 @@ public interface KNXTypeMapper { * maps a datapoint value to an openHAB command or state * * @param datapoint the source datapoint - * @param data the datapoint value as an ASDU byte array (see {@link ProcessEvent}.getASDU()) + * @param data the datapoint value as an ASDU byte array (see + * {@link tuwien.auto.calimero.process.ProcessEvent}.getASDU()) * @return a command or state of openHAB */ @Nullable diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/AbstractSpec.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/AbstractSpec.java index bbe5e30f1..717a41626 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/AbstractSpec.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/AbstractSpec.java @@ -14,8 +14,6 @@ package org.openhab.binding.knx.internal.channel; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.openhab.binding.knx.internal.client.InboundSpec; -import org.openhab.binding.knx.internal.client.OutboundSpec; import tuwien.auto.calimero.GroupAddress; import tuwien.auto.calimero.KNXFormatException; @@ -57,7 +55,8 @@ public abstract class AbstractSpec { /** * Return the data point type. *

- * See {@link InboundSpec#getDPT()} and {@link OutboundSpec#getDPT()}. + * See {@link org.openhab.binding.knx.internal.client.InboundSpec#getDPT()} and + * {@link org.openhab.binding.knx.internal.client.OutboundSpec#getDPT()}. * * @return the data point type. */ diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/ListenSpecImpl.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/ListenSpecImpl.java index 1135f1a9e..e3b23bfc4 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/ListenSpecImpl.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/channel/ListenSpecImpl.java @@ -17,6 +17,7 @@ import static java.util.stream.Collectors.toList; import java.util.Collections; import java.util.List; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.knx.internal.client.InboundSpec; @@ -28,6 +29,7 @@ import tuwien.auto.calimero.GroupAddress; * @author Simon Kaufmann - initial contribution and API. * */ +@NonNullByDefault public class ListenSpecImpl extends AbstractSpec implements InboundSpec { private final List listenAddresses; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/AbstractKNXClient.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/AbstractKNXClient.java index 695edb277..88e3386c8 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/AbstractKNXClient.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/AbstractKNXClient.java @@ -244,7 +244,7 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien }); } - private T nullify(T target, @Nullable Consumer lastWill) { + private @Nullable T nullify(T target, @Nullable Consumer lastWill) { if (target != null && lastWill != null) { lastWill.accept(target); } @@ -392,7 +392,8 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien @Override public boolean isConnected() { - return link != null && link.isOpen(); + final var tmpLink = link; + return tmpLink != null && tmpLink.isOpen(); } @Override diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/CustomKNXNetworkLinkIP.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/CustomKNXNetworkLinkIP.java index f9359b918..266b5231f 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/CustomKNXNetworkLinkIP.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/CustomKNXNetworkLinkIP.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.knx.internal.client; +import org.eclipse.jdt.annotation.NonNullByDefault; + import tuwien.auto.calimero.KNXException; import tuwien.auto.calimero.knxnetip.KNXnetIPConnection; import tuwien.auto.calimero.link.KNXNetworkLinkIP; @@ -24,6 +26,7 @@ import tuwien.auto.calimero.link.medium.KNXMediumSettings; * @author Simon Kaufmann - initial contribution and API * */ +@NonNullByDefault public class CustomKNXNetworkLinkIP extends KNXNetworkLinkIP { public static final int TUNNELING = KNXNetworkLinkIP.TUNNELING; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/DeviceInspector.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/DeviceInspector.java index f9b211703..02830410e 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/DeviceInspector.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/DeviceInspector.java @@ -100,7 +100,7 @@ public class DeviceInspector { OPERATION_TIMEOUT); if ((elements == null ? 0 : toUnsigned(elements)) == 1) { Thread.sleep(OPERATION_INTERVAL); - String ManufacturerID = Manufacturer.getName(toUnsigned(getClient().readDeviceProperties(address, + String manufacturerID = Manufacturer.getName(toUnsigned(getClient().readDeviceProperties(address, DEVICE_OBJECT, PID.MANUFACTURER_ID, 1, 1, false, OPERATION_TIMEOUT))); Thread.sleep(OPERATION_INTERVAL); String serialNo = toHex(getClient().readDeviceProperties(address, DEVICE_OBJECT, PID.SERIAL_NUMBER, 1, @@ -112,7 +112,7 @@ public class DeviceInspector { String firmwareRevision = Integer.toString(toUnsigned(getClient().readDeviceProperties(address, DEVICE_OBJECT, PID.FIRMWARE_REVISION, 1, 1, false, OPERATION_TIMEOUT))); - ret.put(MANUFACTURER_NAME, ManufacturerID); + ret.put(MANUFACTURER_NAME, manufacturerID); if (serialNo != null) { ret.put(MANUFACTURER_SERIAL_NO, serialNo); } @@ -121,7 +121,7 @@ public class DeviceInspector { } ret.put(MANUFACTURER_FIRMWARE_REVISION, firmwareRevision); logger.debug("Identified device {} as a {}, type {}, revision {}, serial number {}", address, - ManufacturerID, hardwareType, firmwareRevision, serialNo); + manufacturerID, hardwareType, firmwareRevision, serialNo); } else { logger.debug("The KNX device with address {} does not expose a Device Object", address); } diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/SerialClient.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/SerialClient.java index af44bef4a..3f6113837 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/SerialClient.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/SerialClient.java @@ -15,7 +15,7 @@ package org.openhab.binding.knx.internal.client; import java.util.Enumeration; import java.util.concurrent.ScheduledExecutorService; -import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ThingUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,6 +33,7 @@ import tuwien.auto.calimero.link.medium.TPSettings; * @author Simon Kaufmann - initial contribution and API. * */ +@NonNullByDefault public class SerialClient extends AbstractKNXClient { private final Logger logger = LoggerFactory.getLogger(SerialClient.class); @@ -48,7 +49,7 @@ public class SerialClient extends AbstractKNXClient { } @Override - protected @NonNull KNXNetworkLink establishConnection() throws KNXException, InterruptedException { + protected KNXNetworkLink establishConnection() throws KNXException, InterruptedException { try { RXTXVersion.getVersion(); logger.debug("Establishing connection to KNX bus through FT1.2 on serial port {}.", serialPort); @@ -59,12 +60,13 @@ public class SerialClient extends AbstractKNXClient { "The serial FT1.2 KNX connection requires the RXTX libraries to be available, but they could not be found!", e); } catch (KNXException e) { - if (e.getMessage().startsWith("can not open serial port")) { + final String msg = e.getMessage(); + if ((msg != null) && (msg.startsWith("can not open serial port"))) { StringBuilder sb = new StringBuilder("Available ports are:\n"); Enumeration portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { CommPortIdentifier id = (CommPortIdentifier) portList.nextElement(); - if (id.getPortType() == CommPortIdentifier.PORT_SERIAL) { + if ((id != null) && (id.getPortType() == CommPortIdentifier.PORT_SERIAL)) { sb.append(id.getName()); sb.append("\n"); } diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/BridgeConfiguration.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/BridgeConfiguration.java index 1d12d324f..3c0909db1 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/BridgeConfiguration.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/BridgeConfiguration.java @@ -14,19 +14,20 @@ package org.openhab.binding.knx.internal.config; import java.math.BigDecimal; -import org.openhab.binding.knx.internal.handler.KNXBridgeBaseThingHandler; +import org.eclipse.jdt.annotation.NonNullByDefault; /** - * {@link KNXBridgeBaseThingHandler} configuration + * {@link org.openhab.binding.knx.internal.handler.KNXBridgeBaseThingHandler} configuration * * @author Simon Kaufmann - initial contribution and API * */ +@NonNullByDefault public class BridgeConfiguration { - private int autoReconnectPeriod; - private BigDecimal readingPause; - private BigDecimal readRetriesLimit; - private BigDecimal responseTimeout; + private int autoReconnectPeriod = 0; + private BigDecimal readingPause = BigDecimal.valueOf(0); + private BigDecimal readRetriesLimit = BigDecimal.valueOf(0); + private BigDecimal responseTimeout = BigDecimal.valueOf(0); public int getAutoReconnectPeriod() { return autoReconnectPeriod; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/DeviceConfig.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/DeviceConfig.java index 6df148159..5f7953e1f 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/DeviceConfig.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/DeviceConfig.java @@ -14,18 +14,21 @@ package org.openhab.binding.knx.internal.config; import java.math.BigDecimal; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Configuration object for the device thing handler. * * @author Karel Goderis - Initial contribution * @author Simon Kaufmann - refactoring & cleanup */ +@NonNullByDefault public class DeviceConfig { - private String address; - private boolean fetch; - private BigDecimal pingInterval; - private BigDecimal readInterval; + private String address = ""; + private boolean fetch = false; + private BigDecimal pingInterval = BigDecimal.valueOf(0); + private BigDecimal readInterval = BigDecimal.valueOf(0); public String getAddress() { return address; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/IPBridgeConfiguration.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/IPBridgeConfiguration.java index b3192f7b8..6c6b8816a 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/IPBridgeConfiguration.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/IPBridgeConfiguration.java @@ -14,20 +14,23 @@ package org.openhab.binding.knx.internal.config; import java.math.BigDecimal; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * IP Bridge handler configuration object. * * @author Simon Kaufmann - initial contribution and API * */ +@NonNullByDefault public class IPBridgeConfiguration extends BridgeConfiguration { - private boolean useNAT; - private String type; - private String ipAddress; - private BigDecimal portNumber; - private String localIp; - private String localSourceAddr; + private boolean useNAT = false; + private String type = ""; + private String ipAddress = ""; + private BigDecimal portNumber = BigDecimal.valueOf(0); + private String localIp = ""; + private String localSourceAddr = ""; public Boolean getUseNAT() { return useNAT; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/SerialBridgeConfiguration.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/SerialBridgeConfiguration.java index 8dfcd9cf3..b267ad333 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/SerialBridgeConfiguration.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/config/SerialBridgeConfiguration.java @@ -12,15 +12,18 @@ */ package org.openhab.binding.knx.internal.config; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Serial Bridge configuration object. * * @author Simon Kaufmann - initial contribution and API. * */ +@NonNullByDefault public class SerialBridgeConfiguration extends BridgeConfiguration { - private String serialPort; + private String serialPort = ""; public String getSerialPort() { return serialPort; diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/factory/KNXHandlerFactory.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/factory/KNXHandlerFactory.java index 96e6b411f..3539144e9 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/factory/KNXHandlerFactory.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/factory/KNXHandlerFactory.java @@ -55,8 +55,8 @@ public class KNXHandlerFactory extends BaseThingHandlerFactory { public Thing createThing(ThingTypeUID thingTypeUID, Configuration configuration, ThingUID thingUID, ThingUID bridgeUID) { if (THING_TYPE_IP_BRIDGE.equals(thingTypeUID)) { - ThingUID IPBridgeUID = getIPBridgeThingUID(thingTypeUID, thingUID, configuration); - return super.createThing(thingTypeUID, configuration, IPBridgeUID, null); + ThingUID ipBridgeUID = getIPBridgeThingUID(thingTypeUID, thingUID, configuration); + return super.createThing(thingTypeUID, configuration, ipBridgeUID, null); } if (THING_TYPE_SERIAL_BRIDGE.equals(thingTypeUID)) { ThingUID serialBridgeUID = getSerialBridgeThingUID(thingTypeUID, thingUID, configuration); diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/AbstractKNXThingHandler.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/AbstractKNXThingHandler.java index 7282a95cf..318f58f14 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/AbstractKNXThingHandler.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/AbstractKNXThingHandler.java @@ -19,7 +19,6 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.knx.internal.client.DeviceInspector; @@ -118,7 +117,7 @@ public abstract class AbstractKNXThingHandler extends BaseThingHandler implement } @Override - public void bridgeStatusChanged(@NonNull ThingStatusInfo bridgeStatusInfo) { + public void bridgeStatusChanged(ThingStatusInfo bridgeStatusInfo) { if (bridgeStatusInfo.getStatus() == ThingStatus.ONLINE) { attachToClient(); } else if (bridgeStatusInfo.getStatus() == ThingStatus.OFFLINE) { @@ -175,7 +174,7 @@ public abstract class AbstractKNXThingHandler extends BaseThingHandler implement } DeviceConfig config = getConfigAs(DeviceConfig.class); try { - if (config.getAddress() != null && !config.getAddress().isEmpty()) { + if (!config.getAddress().isEmpty()) { updateStatus(ThingStatus.UNKNOWN); address = new IndividualAddress(config.getAddress()); @@ -200,12 +199,14 @@ public abstract class AbstractKNXThingHandler extends BaseThingHandler implement } protected void detachFromClient() { - if (pollingJob != null) { - pollingJob.cancel(true); + final var pollingJobSynced = pollingJob; + if (pollingJobSynced != null) { + pollingJobSynced.cancel(true); pollingJob = null; } - if (descriptionJob != null) { - descriptionJob.cancel(true); + final var descriptionJobSynced = descriptionJob; + if (descriptionJobSynced != null) { + descriptionJobSynced.cancel(true); descriptionJob = null; } cancelReadFutures(); diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceConstants.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceConstants.java index 4d44225b1..07acde0c7 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceConstants.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceConstants.java @@ -12,9 +12,12 @@ */ package org.openhab.binding.knx.internal.handler; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * @author Karel Goderis - Initial contribution */ +@NonNullByDefault public class DeviceConstants { private DeviceConstants() { diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceThingHandler.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceThingHandler.java index 2e5ff3c8f..d017dca4c 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceThingHandler.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/DeviceThingHandler.java @@ -105,7 +105,7 @@ public class DeviceThingHandler extends AbstractKNXThingHandler { private void cancelChannelFutures() { for (ScheduledFuture future : channelFutures.values()) { - if (future != null && !future.isDone()) { + if (!future.isDone()) { future.cancel(true); } } @@ -121,7 +121,7 @@ public class DeviceThingHandler extends AbstractKNXThingHandler { @Override protected void cancelReadFutures() { for (ScheduledFuture future : readFutures.values()) { - if (future != null && !future.isDone()) { + if (!future.isDone()) { future.cancel(true); } } diff --git a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/IPBridgeThingHandler.java b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/IPBridgeThingHandler.java index e40f126f6..ad935d9e1 100644 --- a/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/IPBridgeThingHandler.java +++ b/bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/handler/IPBridgeThingHandler.java @@ -72,11 +72,11 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler { boolean useNAT = false; int ipConnectionType; if (MODE_TUNNEL.equalsIgnoreCase(connectionTypeString)) { - useNAT = config.getUseNAT() != null ? config.getUseNAT() : false; + useNAT = config.getUseNAT(); ipConnectionType = CustomKNXNetworkLinkIP.TUNNELING; } else if (MODE_ROUTER.equalsIgnoreCase(connectionTypeString)) { useNAT = false; - if (ip == null || ip.isEmpty()) { + if (ip.isEmpty()) { ip = KNXBindingConstants.DEFAULT_MULTICAST_IP; } ipConnectionType = CustomKNXNetworkLinkIP.ROUTING; @@ -86,13 +86,8 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler { connectionTypeString)); return; } - if (ip == null) { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, - "The 'ipAddress' of the gateway must be configured in 'TUNNEL' mode"); - return; - } - if (config.getLocalIp() != null && !config.getLocalIp().isEmpty()) { + if (!config.getLocalIp().isEmpty()) { localEndPoint = new InetSocketAddress(config.getLocalIp(), 0); } else { localEndPoint = new InetSocketAddress(networkAddressService.getPrimaryIpv4HostAddress(), 0); @@ -103,14 +98,18 @@ public class IPBridgeThingHandler extends KNXBridgeBaseThingHandler { thing.getUID(), config.getResponseTimeout().intValue(), config.getReadingPause().intValue(), config.getReadRetriesLimit().intValue(), getScheduler(), this); - client.initialize(); + final var tmpClient = client; + if (tmpClient != null) { + tmpClient.initialize(); + } } @Override public void dispose() { super.dispose(); - if (client != null) { - client.dispose(); + final var tmpClient = client; + if (tmpClient != null) { + tmpClient.dispose(); client = null; } } diff --git a/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/channel/KNXChannelTypeTest.java b/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/channel/KNXChannelTypeTest.java index 3d423084b..c735844f2 100644 --- a/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/channel/KNXChannelTypeTest.java +++ b/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/channel/KNXChannelTypeTest.java @@ -17,7 +17,7 @@ import static org.junit.jupiter.api.Assertions.*; import java.util.Collections; import java.util.Set; -import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,17 +26,19 @@ import org.junit.jupiter.api.Test; * @author Simon Kaufmann - initial contribution and API. * */ +@NonNullByDefault public class KNXChannelTypeTest { - private KNXChannelType ct; + private KNXChannelType ct = new MyKNXChannelType(""); @BeforeEach public void setup() { ct = new MyKNXChannelType(""); } + @SuppressWarnings("null") @Test - public void testParse_withDPT_multiple_withRead() { + public void testParseWithDptMultipleWithRead() { ChannelConfiguration res = ct.parse("5.001:<1/3/22+0/3/22+<0/8/15"); assertEquals("5.001", res.getDPT()); @@ -46,8 +48,9 @@ public class KNXChannelTypeTest { assertEquals(2, res.getReadGAs().size()); } + @SuppressWarnings("null") @Test - public void testParse_withDPT_multiple_withoutRead() { + public void testParseWithDptMultipleWithoutRead() { ChannelConfiguration res = ct.parse("5.001:1/3/22+0/3/22+0/8/15"); assertEquals("5.001", res.getDPT()); @@ -57,8 +60,9 @@ public class KNXChannelTypeTest { assertEquals(0, res.getReadGAs().size()); } + @SuppressWarnings("null") @Test - public void testParse_withoutDPT_single_withoutRead() { + public void testParseWithoutDptSingleWithoutRead() { ChannelConfiguration res = ct.parse("1/3/22"); assertNull(res.getDPT()); @@ -68,8 +72,9 @@ public class KNXChannelTypeTest { assertEquals(0, res.getReadGAs().size()); } + @SuppressWarnings("null") @Test - public void testParse_withoutDPT_single_witRead() { + public void testParseWithoutDptSingleWitRead() { ChannelConfiguration res = ct.parse("<1/3/22"); assertNull(res.getDPT()); @@ -79,16 +84,18 @@ public class KNXChannelTypeTest { assertEquals(1, res.getReadGAs().size()); } + @SuppressWarnings("null") @Test - public void testParse_twoLevel() { + public void testParseTwoLevel() { ChannelConfiguration res = ct.parse("5.001:<3/1024+<4/1025"); assertEquals("3/1024", res.getMainGA().getGA()); assertEquals(2, res.getListenGAs().size()); assertEquals(2, res.getReadGAs().size()); } + @SuppressWarnings("null") @Test - public void testParse_freeLevel() { + public void testParseFreeLevel() { ChannelConfiguration res = ct.parse("5.001:<4610+<4611"); assertEquals("4610", res.getMainGA().getGA()); assertEquals(2, res.getListenGAs().size()); @@ -101,12 +108,12 @@ public class KNXChannelTypeTest { } @Override - protected @NonNull Set<@NonNull String> getAllGAKeys() { + protected Set getAllGAKeys() { return Collections.emptySet(); } @Override - protected @NonNull String getDefaultDPT(@NonNull String gaConfigKey) { + protected String getDefaultDPT(String gaConfigKey) { return ""; } } diff --git a/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/dpt/KNXCoreTypeMapperTest.java b/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/dpt/KNXCoreTypeMapperTest.java index 3e8320edf..fae66e400 100644 --- a/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/dpt/KNXCoreTypeMapperTest.java +++ b/bundles/org.openhab.binding.knx/src/test/java/org/openhab/binding/knx/internal/dpt/KNXCoreTypeMapperTest.java @@ -14,6 +14,7 @@ package org.openhab.binding.knx.internal.dpt; import static org.junit.jupiter.api.Assertions.*; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.openhab.core.library.types.DecimalType; @@ -22,10 +23,11 @@ import org.openhab.core.library.types.DecimalType; * @author Simon Kaufmann - initial contribution and API * */ +@NonNullByDefault public class KNXCoreTypeMapperTest { @Test - public void testToDPTValue_trailingZeroesStrippedOff() { + public void testToDPTValueTrailingZeroesStrippedOff() { assertEquals("3", new KNXCoreTypeMapper().toDPTValue(new DecimalType("3"), "17.001")); assertEquals("3", new KNXCoreTypeMapper().toDPTValue(new DecimalType("3.0"), "17.001")); }