sruehl closed pull request #8: cleanup warnings in plc4j-api, plc4j-core, 
dummy-driver
URL: https://github.com/apache/incubator-plc4x/pull/8
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/netty/DummyProtocol.java
 
b/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/netty/DummyProtocol.java
index bf448ea4f..3c4064551 100644
--- 
a/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/netty/DummyProtocol.java
+++ 
b/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/netty/DummyProtocol.java
@@ -31,13 +31,13 @@ Licensed to the Apache Software Foundation (ASF) under one
 
 import java.util.List;
 
-public class DummyProtocol extends MessageToMessageCodec<ByteBuf, 
PlcRequestContainer> {
+public class DummyProtocol extends MessageToMessageCodec<ByteBuf, 
PlcRequestContainer<?, ?>> {
 
     private static final Logger logger = 
LoggerFactory.getLogger(DummyProtocol.class);
 
     @Override
-    protected void encode(ChannelHandlerContext ctx, PlcRequestContainer in, 
List<Object> out) throws Exception {
-        PlcRequest request = in.getRequest();
+    protected void encode(ChannelHandlerContext ctx, PlcRequestContainer<?, ?> 
in, List<Object> out) throws Exception {
+        PlcRequest<?> request = in.getRequest();
         if (request instanceof PlcReadRequest) {
 
             // Simple ICMP (Ping packet)
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index 96db08f0e..01431edfa 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -66,7 +66,7 @@ public final Builder addItem(Class<?> dataType, Address 
address, int size) {
             return this;
         }
 
-        public final Builder addItem(ReadRequestItem readRequestItem) {
+        public final Builder addItem(ReadRequestItem<?> readRequestItem) {
             checkType(readRequestItem.getDatatype());
             requests.add(readRequestItem);
             return this;
@@ -82,7 +82,7 @@ public final PlcReadRequest build() {
             } else {
                 plcReadRequest = new TypeSafePlcReadRequest<>(firstType);
             }
-            for (ReadRequestItem request : requests) {
+            for (ReadRequestItem<?> request : requests) {
                 plcReadRequest.addItem(request);
             }
             return plcReadRequest;
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
index 78ebdea77..9a2cd5167 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
@@ -37,6 +37,9 @@ public PlcReadResponse(PlcReadRequest request, List<? extends 
ReadResponseItem<?
 
     @SuppressWarnings("unchecked")
     public <T> Optional<ReadResponseItem<T>> getValue(ReadRequestItem<T> item) 
{
-        return (Optional) super.getValue(item);
+        Optional<ReadResponseItem<?>> value = super.getValue(item);
+        // Directly casting to Optional<ReadResponseItem<T>> yields a compile 
time error.
+        // First casting to Object eliminates it.
+        return (Optional<ReadResponseItem<T>>) ((Object) value);
     }
 }
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java
index d41453afd..aa6162dde 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequest.java
@@ -29,7 +29,7 @@ Licensed to the Apache Software Foundation (ASF) under one
  * Base type for all messages sent from the plc4x system to a connected plc.
  * @param <REQUEST_ITEM> 
  */
-public abstract class PlcRequest<REQUEST_ITEM extends RequestItem> implements 
PlcMessage {
+public abstract class PlcRequest<REQUEST_ITEM extends RequestItem<?>> 
implements PlcMessage {
 
     protected final List<REQUEST_ITEM> requestItems;
 
@@ -88,7 +88,7 @@ public boolean isEmpty() {
 
         List<REQUEST_ITEM> requests = new LinkedList<>();
 
-        void checkType(Class dataType) {
+        void checkType(Class<?> dataType) {
             if (firstType == null) {
                 firstType = dataType;
             }
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequestContainer.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequestContainer.java
index 203839910..6bdd6b026 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequestContainer.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcRequestContainer.java
@@ -21,7 +21,7 @@ Licensed to the Apache Software Foundation (ASF) under one
 import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 
-public class PlcRequestContainer<T extends PlcRequest, R extends PlcResponse> {
+public class PlcRequestContainer<T extends PlcRequest<?>, R extends 
PlcResponse<?, ?, ?>> {
 
     private final T request;
     private final CompletableFuture<R> responseFuture;
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java
index 8f054cc44..7d98b8557 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcResponse.java
@@ -32,7 +32,7 @@ Licensed to the Apache Software Foundation (ASF) under one
  * @param <RESPONSE_ITEM> 
  * @param <REQUEST_ITEM> 
  */
-public abstract class PlcResponse<REQUEST extends PlcRequest, RESPONSE_ITEM 
extends ResponseItem, REQUEST_ITEM extends RequestItem> implements PlcMessage {
+public abstract class PlcResponse<REQUEST extends PlcRequest<?>, RESPONSE_ITEM 
extends ResponseItem<?>, REQUEST_ITEM extends RequestItem<?>> implements 
PlcMessage {
 
     private final REQUEST request;
 
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index 4176f91a1..057a74ec9 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -82,7 +82,7 @@ public final PlcWriteRequest build() {
             } else {
                 plcWriteRequest = new TypeSafePlcWriteRequest<>(firstType);
             }
-            for (WriteRequestItem request : requests) {
+            for (WriteRequestItem<?> request : requests) {
                 plcWriteRequest.addItem(request);
             }
             return plcWriteRequest;
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
index 39da986bb..152cc415e 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
@@ -37,6 +37,9 @@ public PlcWriteResponse(PlcWriteRequest request, List<? 
extends WriteResponseIte
 
     @SuppressWarnings("unchecked")
     public <T> Optional<WriteResponseItem<T>> getValue(WriteRequestItem<T> 
item) {
-        return (Optional) super.getValue(item);
+        Optional<WriteResponseItem<?>> value = super.getValue(item);
+        // Directly casting to Optional<WriteResponseItem<T>> yields a compile 
time error.
+        // First casting to Object eliminates it.
+        return (Optional<WriteResponseItem<T>>) ((Object) value); 
     }
 }
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
index ad13071a5..cd6410d6f 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
@@ -22,7 +22,7 @@ Licensed to the Apache Software Foundation (ASF) under one
 
 import java.util.Objects;
 
-public abstract class ResponseItem<REQUEST_ITEM extends RequestItem> {
+public abstract class ResponseItem<REQUEST_ITEM extends RequestItem<?>> {
 
     private final REQUEST_ITEM requestItem;
 
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
index f32e527d8..22d85c649 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
@@ -59,17 +59,49 @@ public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> 
request, List<ReadRespo
         return (Optional<ReadResponseItem<T>>) super.getResponseItem();
     }
 
+    /**
+     * Cast or convert a PlcReadResponse to a TypeSafePlcReadReadResponse<T>.
+     * 
+     * WARNING: this is inherently a non-type-safe operation.  It was 
introduced
+     * to serve the implementation of 
PlcReader.read(TypeSafePlcReadRequest<T>).
+     * Additional use of it is not recommended.  This interface is subject to 
change.
+     * 
+     * @param plcReadResponse the response implicitly with items of type T
+     * @return TypeSafePlcReadReadResponse<T>
+     */
     @SuppressWarnings("unchecked")
     public static <T> TypeSafePlcReadResponse<T> of(PlcReadResponse 
plcReadResponse) {
+        // BUG: there seems to be no checking that the readResponse/items
+        // in fact are for type T.
+        // I don't even think it's possible to do that with the current 'of()' 
signature
+        // and plcReadResponse content.
+        //
+        // The only consolation is that currently, 'of()' is only really used 
in the
+        // impl of PlcReader.read(TypeSafePlcReadRequest<T>) and that case 
guarantees
+        // that all items are a T.  plcReadResponse isa 
TypeSafePlcReadResponse in
+        // this case.
+        //
+        // Maybe we just need to doc that this conversion is unsafe and/or 
rename
+        // the method to "unsafeOf()"? 
+        // Or, if there were an AbstractPlcReader<T>, that could internally 
implement
+        // this method without exposing this generally it, the PlcReader 
interface
+        // could remove the default implementation of 
read(TypeSafePlcReadRequest<T>),
+        // and protocol implementations could extend AbstractPlcReader.
+        //
+        // FWIW, in one case there is some checking that all of the items in a 
response
+        // are at least of the same type.
+      
         if (plcReadResponse instanceof TypeSafePlcReadResponse) {
-            return (TypeSafePlcReadResponse) plcReadResponse;
+            // Warning: no validation that everything in the response is a T.
+            return (TypeSafePlcReadResponse<T>) plcReadResponse;
         }
         if (plcReadResponse.getRequest() instanceof TypeSafePlcReadRequest) {
-            return new TypeSafePlcReadResponse((TypeSafePlcReadRequest) 
plcReadResponse.getRequest(), plcReadResponse.getResponseItems());
+            // Warning: no validation that everything in the response is a T.
+            return new TypeSafePlcReadResponse<T>((TypeSafePlcReadRequest<T>) 
plcReadResponse.getRequest(), (List<ReadResponseItem<T>>) 
plcReadResponse.getResponseItems());
         }
         List<? extends ReadResponseItem<?>> responseItems = 
plcReadResponse.getResponseItems();
         Objects.requireNonNull(responseItems, "Response items on " + 
plcReadResponse + " must not be null");
-        Class type = null;
+        Class<?> type = null;
         for (ReadResponseItem<?> responseItem : responseItems) {
             if (!responseItem.getValues().isEmpty()) {
                 type = responseItem.getValues().get(0).getClass();
@@ -84,7 +116,9 @@ public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> 
request, List<ReadRespo
         if (type == null) {
             type = Object.class;
         }
-        return new TypeSafePlcReadResponse(new TypeSafePlcReadRequest(type, 
plcReadResponse.getRequest()), responseItems);
+        // Warning: no validation that everything in the response is a T.
+        // Verified that everything in the response was the same type, but why 
bother?
+        return new TypeSafePlcReadResponse<T>(new 
TypeSafePlcReadRequest<T>((Class<T>) type, plcReadResponse.getRequest()), 
(List<ReadResponseItem<T>>) responseItems);
     }
 
     private static void checkList(List<?> list, Class<?> type) {
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
index d5de7f767..e6d4d0906 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
@@ -71,7 +71,9 @@ public void addItem(WriteRequestItem<?> writeRequestItem) {
 
     @SuppressWarnings("unchecked")
     public List<WriteRequestItem<T>> getCheckedRequestItems() {
-        return (List) getRequestItems();
+        // Directly casting to List<WriteRequestItem<T>> yields a compile time 
error.
+        // First casting to Object eliminates it.
+        return (List<WriteRequestItem<T>>) ((Object) getRequestItems());
     }
 
     @Override
diff --git 
a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java 
b/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
index 7897b76fe..42e6b3b00 100644
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
+++ b/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
@@ -39,7 +39,7 @@ Licensed to the Apache Software Foundation (ASF) under one
 
 public class PlcDriverManagerTest {
 
-    /**
+    /*
      * Tries to get the mock plc driver which is part of this testsuite.
      */
     @Test
@@ -51,7 +51,7 @@ public void getExistingDriverTest() throws PlcException {
         assertThat(mockConnection.isClosed(), is(false));
     }
 
-    /**
+    /*
      * Tries to get the mock plc driver with authentication which is part of 
this testsuite.
      */
     @Test
@@ -67,7 +67,7 @@ public void getExistingDriverWithAuthenticationTest() throws 
PlcException {
         assertThat(mockConnection.isClosed(), is(false));
     }
 
-    /**
+    /*
      * In this test case a driver is requested which is not registered with 
the {@link PlcDriverManager}.
      */
     @Test(expected = PlcConnectionException.class)
@@ -76,7 +76,7 @@ public void getNotExistingDriverTest() throws 
PlcConnectionException {
         new 
PlcDriverManager().getConnection("non-existing-protocol://some-cool-url");
     }
 
-    /**
+    /*
      * In this test case a driver is requested which is not registered with 
the {@link PlcDriverManager}.
      */
     @Test(expected = PlcConnectionException.class)
@@ -85,7 +85,7 @@ public void getInvalidUriTest() throws PlcConnectionException 
{
         new PlcDriverManager().getConnection("The quick brown fox jumps over 
the lazy dog");
     }
 
-    /**
+    /*
      * In this test the {@link PlcDriverManager} will be configured with a 
service list that
      * contains multiple implementation instances of the same protocol. This 
should result in
      * an error.
diff --git 
a/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/RawSocket.java
 
b/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/RawSocket.java
index 3d23d1fbe..a1395255b 100644
--- 
a/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/RawSocket.java
+++ 
b/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/RawSocket.java
@@ -336,7 +336,7 @@ private FirstHop getFirstHop(InetAddress remoteAddress) 
throws RawSocketExceptio
      *
      * @return InetAddress representing the address of the internet gateway.
      */
-    @SuppressWarnings("squid:S1313")
+    @SuppressWarnings("squid:S1313")  // silence sonar warning
     private InetAddress getDefaultGatewayAddress() {
         try {
             Runtime rt = Runtime.getRuntime();
diff --git 
a/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/netty/RawSocketChannelOption.java
 
b/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/netty/RawSocketChannelOption.java
index a1793bea3..a860f76c3 100644
--- 
a/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/netty/RawSocketChannelOption.java
+++ 
b/plc4j/utils/raw-sockets/src/main/java/org/apache/plc4x/java/utils/rawsockets/netty/RawSocketChannelOption.java
@@ -24,6 +24,7 @@ Licensed to the Apache Software Foundation (ASF) under one
 
     public static final ChannelOption<Boolean> SOME_OPTION = 
valueOf(RawSocketChannelOption.class, "SOME_OPTION");
 
+    @SuppressWarnings("deprecation")
     protected RawSocketChannelOption() {
         super(null);
     }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to