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:
[email protected]
With regards,
Apache Git Services