This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 47ff4f0d1c29142c7cb306b159bc5fa24ae8e658
Author: Sebastian Rühl <sru...@apache.org>
AuthorDate: Thu Aug 16 14:28:57 2018 +0200

    added a immutability test to plc4j-api to track immutability
---
 plc4j/api/pom.xml                                  |   6 ++
 .../api/messages/items/SubscriptionEventItem.java  |   6 +-
 .../items/SubscriptionRequestCyclicItem.java       |   4 +-
 .../messages/items/SubscriptionRequestItem.java    |   4 +-
 .../apache/plc4x/java/api/ImmutabilityTest.java    | 103 +++++++++++++++++++++
 5 files changed, 116 insertions(+), 7 deletions(-)

diff --git a/plc4j/api/pom.xml b/plc4j/api/pom.xml
index dbd5703..ac1484b 100644
--- a/plc4j/api/pom.xml
+++ b/plc4j/api/pom.xml
@@ -39,6 +39,12 @@
       <version>0.0.1-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.mutabilitydetector</groupId>
+      <artifactId>MutabilityDetector</artifactId>
+      <version>0.9.6</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java
index 60d95dc..5142d9a 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionEventItem.java
@@ -24,9 +24,9 @@ import java.util.Objects;
 
 public class SubscriptionEventItem<T> {
 
-    private SubscriptionRequestItem<T> subscriptionRequestItem;
-    private Calendar timestamp;
-    private List<T> values;
+    private final SubscriptionRequestItem<T> subscriptionRequestItem;
+    private final Calendar timestamp;
+    private final List<T> values;
 
     public SubscriptionEventItem(SubscriptionRequestItem<T> 
subscriptionRequestItem, Calendar timestamp, List<T> values) {
         this.subscriptionRequestItem = subscriptionRequestItem;
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
index 06f3a77..336d7b4 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
@@ -27,8 +27,8 @@ import java.util.function.Consumer;
 
 public class SubscriptionRequestCyclicItem<T> extends 
SubscriptionRequestItem<T> {
 
-    private TimeUnit timeUnit;
-    private int period;
+    private final TimeUnit timeUnit;
+    private final int period;
 
     public SubscriptionRequestCyclicItem(Class<T> dataType, Address address, 
TimeUnit timeUnit, int period, Consumer<SubscriptionEventItem<T>> consumer) {
         super(dataType, address, SubscriptionType.CYCLIC, consumer);
diff --git 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
index 0667073..a38d258 100644
--- 
a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
+++ 
b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
@@ -26,8 +26,8 @@ import java.util.function.Consumer;
 
 public abstract class SubscriptionRequestItem<T> extends RequestItem<T> {
 
-    private SubscriptionType subscriptionType;
-    private Consumer<SubscriptionEventItem<T>> consumer;
+    private final SubscriptionType subscriptionType;
+    private final Consumer<SubscriptionEventItem<T>> consumer;
 
     public SubscriptionRequestItem(Class<T> datatype, Address address, 
SubscriptionType subscriptionType, Consumer<SubscriptionEventItem<T>> consumer) 
{
         super(datatype, address);
diff --git 
a/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java 
b/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java
new file mode 100644
index 0000000..d6d60a8
--- /dev/null
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java
@@ -0,0 +1,103 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+package org.apache.plc4x.java.api;
+
+import 
org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication;
+import org.apache.plc4x.java.api.messages.*;
+import org.apache.plc4x.java.api.messages.items.*;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
+import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collection;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assume.assumeThat;
+import static 
org.mutabilitydetector.unittesting.AllowedReason.allowingForSubclassing;
+import static 
org.mutabilitydetector.unittesting.MutabilityAssert.assertInstancesOf;
+import static 
org.mutabilitydetector.unittesting.MutabilityMatchers.areImmutable;
+
+@RunWith(Parameterized.class)
+public class ImmutabilityTest {
+
+    private static Set<Class<?>> NOT_YET_IMMUTABLE = Stream.of(
+        ReadResponseItem.class,
+        SubscriptionEventItem.class,
+        SubscriptionRequestCyclicItem.class,
+        SubscriptionRequestItem.class,
+        SubscriptionResponseItem.class,
+        UnsubscriptionRequestItem.class,
+        WriteRequestItem.class,
+        PlcProprietaryRequest.class,
+        PlcProprietaryResponse.class,
+        PlcSubscriptionEvent.class,
+        PlcUnsubscriptionRequest.class
+    ).collect(Collectors.toSet());
+
+    @Parameterized.Parameter
+    public Class<?> clazz;
+
+    @Parameterized.Parameters(name = "{index} {0}")
+    public static Collection<Object[]> data() {
+        return Stream.of(
+            PlcUsernamePasswordAuthentication.class,
+            ReadRequestItem.class,
+            ReadResponseItem.class,
+            SubscriptionEventItem.class,
+            SubscriptionRequestChangeOfStateItem.class,
+            SubscriptionRequestCyclicItem.class,
+            SubscriptionRequestEventItem.class,
+            SubscriptionRequestItem.class,
+            SubscriptionResponseItem.class,
+            UnsubscriptionRequestItem.class,
+            WriteRequestItem.class,
+            WriteResponseItem.class,
+            TypeSafePlcReadRequest.class,
+            TypeSafePlcReadResponse.class,
+            TypeSafePlcWriteRequest.class,
+            TypeSafePlcWriteResponse.class,
+            PlcProprietaryRequest.class,
+            PlcProprietaryResponse.class,
+            PlcSubscriptionEvent.class,
+            PlcSubscriptionRequest.class,
+            PlcSubscriptionResponse.class,
+            PlcUnsubscriptionRequest.class,
+            PlcUnsubscriptionResponse.class,
+            PlcWriteRequest.class,
+            PlcWriteResponse.class
+        ).map(aClass -> new Object[]{aClass})
+            .collect(Collectors.toList());
+    }
+
+    @Test
+    public void immutability() {
+        assumeThat(clazz + " not yet immutable", NOT_YET_IMMUTABLE, 
not(hasItem(clazz)));
+        assertInstancesOf(clazz,
+            areImmutable(),
+            allowingForSubclassing());
+    }
+}

Reply via email to