diff --git a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/package-info.java b/apps/netconf/client/src/main/java/org/onosproject/netconf/client/package-info.java
index e331918..30201b2 100644
--- a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/package-info.java
+++ b/apps/netconf/client/src/main/java/org/onosproject/netconf/client/package-info.java
@@ -1,6 +1,5 @@
 /*
- * Copyright 2017-present
- *  Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/apps/netconf/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java b/apps/netconf/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java
index e489692..f31fe43 100644
--- a/apps/netconf/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java
+++ b/apps/netconf/client/src/test/java/org/onosproject/netconf/client/NetconfTranslatorImplTest.java
@@ -1,6 +1,5 @@
 /*
- * Copyright 2017-present
- *  Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,7 +26,7 @@
 import static org.junit.Assert.assertEquals;
 
 /**
- * Test class for {@link NetconfTranslatorImpl}
+ * Test class for {@link NetconfTranslatorImpl}.
  */
 @Beta
 public class NetconfTranslatorImplTest {
@@ -54,7 +53,8 @@
             "      </t:top>\n" +
             "    </data>\n" +
             "  </rpc-reply>";
-    private static final String CORRECT_FILTERED_GET_REPLY = "<t:top xmlns:t=\"http://example.com/schema/1.2/stats\">\n" +
+    private static final String CORRECT_FILTERED_GET_REPLY =
+            "<t:top xmlns:t=\"http://example.com/schema/1.2/stats\">\n" +
             "        <t:interfaces>\n" +
             "          <t:interface t:ifName=\"eth0\">\n" +
             "            <t:ifInOctets>45621</t:ifInOctets>\n" +
@@ -103,7 +103,9 @@
         matcher.find();
 //        System.out.println(matcher.group(1));
 //        System.out.println(DESIRED_SUBSTRING_GET_CONFIG);
-        assertEquals("Messages did not match", CORRECT_FILTERED_GET_CONFIG_REPLY, matcher.group(GET_CONFIG_CORE_MESSAGE_GROUP));
+        assertEquals("Messages did not match",
+                    CORRECT_FILTERED_GET_CONFIG_REPLY,
+                    matcher.group(GET_CONFIG_CORE_MESSAGE_GROUP));
         //Basic check for the get regex.
         matcher = GET_CORE_MESSAGE_PATTERN.matcher(SAMPLE_GET_REPLY);
         matcher.find();
diff --git a/apps/openroadm/network/src/main/java/org/onosproject/openroadm/network/package-info.java b/apps/openroadm/network/src/main/java/org/onosproject/openroadm/network/package-info.java
new file mode 100644
index 0000000..65b7320
--- /dev/null
+++ b/apps/openroadm/network/src/main/java/org/onosproject/openroadm/network/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed 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.
+ */
+
+/**
+ * OpenROADM network models.
+ */
+ package org.onosproject.openroadm.network;
diff --git a/apps/openroadm/service/src/main/java/org/onosproject/openroadm/service/package-info.java b/apps/openroadm/service/src/main/java/org/onosproject/openroadm/service/package-info.java
new file mode 100644
index 0000000..292c90b
--- /dev/null
+++ b/apps/openroadm/service/src/main/java/org/onosproject/openroadm/service/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed 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.
+ */
+
+/**
+ * OpenROADM service models.
+ */
+ package org.onosproject.openroadm.service;
diff --git a/apps/vpls/src/test/java/org/onosproject/vpls/VplsManagerTest.java b/apps/vpls/src/test/java/org/onosproject/vpls/VplsManagerTest.java
index 67128db..5583967 100644
--- a/apps/vpls/src/test/java/org/onosproject/vpls/VplsManagerTest.java
+++ b/apps/vpls/src/test/java/org/onosproject/vpls/VplsManagerTest.java
@@ -33,7 +33,7 @@
 import static org.onosproject.vpls.api.VplsData.VplsState.*;
 
 /**
- * Test for {@link VplsManager}
+ * Test for {@link VplsManager}.
  */
 public class VplsManagerTest extends VplsTest {
     private VplsManager vplsManager;
diff --git a/bucklets/onos.bucklet b/bucklets/onos.bucklet
index 711c88f..6341896 100644
--- a/bucklets/onos.bucklet
+++ b/bucklets/onos.bucklet
@@ -196,7 +196,7 @@
   ### Checkstyle
   if do_checkstyle:
       checkstyle(
-          name = name + '-checkstyle-files',
+          name = name,
           srcs = srcs,
           jar_target = ':'+ name,
       )
@@ -287,7 +287,7 @@
       )
 
       checkstyle(
-          name = name + '-tests',
+          name = name + '-tests' + '-checkstyle',
           srcs = test_srcs,
           jar_target = ':' + name + '-tests',
       )
diff --git a/core/common/src/test/java/org/onosproject/utils/ComparatorsTest.java b/core/common/src/test/java/org/onosproject/utils/ComparatorsTest.java
index 6ab8230..0341ac5 100644
--- a/core/common/src/test/java/org/onosproject/utils/ComparatorsTest.java
+++ b/core/common/src/test/java/org/onosproject/utils/ComparatorsTest.java
@@ -1,42 +1,38 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed 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.onosproject.utils;
 
-import com.google.common.collect.ImmutableList;
-import org.junit.Test;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.Ip4Address;
-
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.cluster.DefaultControllerNode;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.core.*;
-import org.onosproject.incubator.net.intf.Interface;
-import org.onosproject.incubator.net.virtual.*;
-import org.onosproject.net.*;
-
-import org.onosproject.net.flow.*;
-import org.onosproject.net.group.*;
-import org.onosproject.net.intent.IntentTestsMocks;
-import org.onosproject.net.key.DeviceKey;
-import org.onosproject.net.key.DeviceKeyId;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.region.DefaultRegion;
-import org.onosproject.net.region.Region;
-import org.onosproject.net.region.RegionId;
-import org.onosproject.net.statistic.DefaultLoad;
-import org.onosproject.net.statistic.FlowEntryWithLoad;
-import org.onosproject.net.statistic.Load;
-import org.onosproject.net.topology.*;
-import org.onosproject.ui.model.topo.UiTopoLayout;
-import org.onosproject.ui.model.topo.UiTopoLayoutId;
-import org.onosproject.net.group.DefaultGroupTest;
-
-
-import java.util.Optional;
-
-
-import static org.junit.Assert.*;
-
-import static org.onosproject.app.DefaultApplicationDescriptionTest.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.APPS;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.CATEGORY;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.DESC;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.FEATURES;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.FURL;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.ICON;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.ORIGIN;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.PERMS;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.README;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.ROLE;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.TITLE;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.URL;
+import static org.onosproject.app.DefaultApplicationDescriptionTest.VER;
 import static org.onosproject.net.DeviceId.deviceId;
 import static org.onosproject.net.NetTestTools.APP_ID;
 import static org.onosproject.net.NetTestTools.did;
@@ -60,17 +56,76 @@
 import static org.onosproject.utils.Comparators.VIRTUAL_NETWORK_COMPARATOR;
 import static org.onosproject.utils.Comparators.VIRTUAL_PORT_COMPARATOR;
 
+import java.util.Optional;
+
+import org.junit.Test;
+import org.onlab.packet.ChassisId;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.cluster.ControllerNode;
+import org.onosproject.cluster.DefaultControllerNode;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.core.Application;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.DefaultApplication;
+import org.onosproject.core.DefaultApplicationId;
+import org.onosproject.core.GroupId;
+import org.onosproject.incubator.net.intf.Interface;
+import org.onosproject.incubator.net.virtual.DefaultVirtualDevice;
+import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
+import org.onosproject.incubator.net.virtual.DefaultVirtualPort;
+import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
+import org.onosproject.incubator.net.virtual.VirtualDevice;
+import org.onosproject.incubator.net.virtual.VirtualNetwork;
+import org.onosproject.incubator.net.virtual.VirtualPort;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.DefaultDevice;
+import org.onosproject.net.DefaultPort;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Element;
+import org.onosproject.net.ElementId;
+import org.onosproject.net.Port;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultFlowEntry;
+import org.onosproject.net.flow.DefaultFlowRule;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.FlowEntry;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.group.DefaultGroup;
+import org.onosproject.net.group.DefaultGroupBucket;
+import org.onosproject.net.group.DefaultGroupDescription;
+import org.onosproject.net.group.Group;
+import org.onosproject.net.group.GroupBucket;
+import org.onosproject.net.group.GroupBuckets;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.key.DeviceKey;
+import org.onosproject.net.key.DeviceKeyId;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.net.region.DefaultRegion;
+import org.onosproject.net.region.Region;
+import org.onosproject.net.region.RegionId;
+import org.onosproject.net.statistic.DefaultLoad;
+import org.onosproject.net.statistic.FlowEntryWithLoad;
+import org.onosproject.net.topology.DefaultTopologyCluster;
+import org.onosproject.net.topology.DefaultTopologyVertex;
+import org.onosproject.net.topology.TopologyCluster;
+import org.onosproject.ui.model.topo.UiTopoLayout;
+import org.onosproject.ui.model.topo.UiTopoLayoutId;
+
+import com.google.common.collect.ImmutableList;
+
 
 public class ComparatorsTest {
-    private final ProviderId PID = new ProviderId("of", "foo");
-    private final DeviceId DID = deviceId("of:foo");
-    private final String MFR = "whitebox";
-    private final String HW = "1.1.x";
-    private final String HW1 = "2.2.x";
-    private final String SW = "3.9.1";
-    private final String SW1 = "4.0.0";
-    private final String SN = "43311-12345";
-    private final ChassisId CID = new ChassisId();
+    private static final ProviderId PID = new ProviderId("of", "foo");
+    private static final DeviceId DID = deviceId("of:foo");
+    private static final String MFR = "whitebox";
+    private static final String HW = "1.1.x";
+    private static final String HW1 = "2.2.x";
+    private static final String SW = "3.9.1";
+    private static final String SW1 = "4.0.0";
+    private static final String SN = "43311-12345";
+    private static final ChassisId CID = new ChassisId();
     private final ConnectPoint cp =
             new ConnectPoint(DeviceId.deviceId("of:00001"), PortNumber.portNumber(100));
     private final GroupBucket testBucket =
@@ -148,12 +203,15 @@
     @Test
     public void testFlowEntryWithLoad() {
         //Rate = (current-previous)/interval
-        assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(FWLoad(20, 10, 1), FWLoad(20, 10, 1)));
-        assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(FWLoad(50, 30, 2), FWLoad(100, 50, 5)));
-        assertEquals(-1, FLOWENTRY_WITHLOAD_COMPARATOR.compare(FWLoad(200, 100, 4), FWLoad(300, 200, 10)));
+        assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(20, 10, 1),
+                                                              flowEntryWithLoad(20, 10, 1)));
+        assertEquals(0, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(50, 30, 2),
+                                                              flowEntryWithLoad(100, 50, 5)));
+        assertEquals(-1, FLOWENTRY_WITHLOAD_COMPARATOR.compare(flowEntryWithLoad(200, 100, 4),
+                                                               flowEntryWithLoad(300, 200, 10)));
     }
 
-    private FlowEntryWithLoad FWLoad(long current, long previous, long interval) {
+    private FlowEntryWithLoad flowEntryWithLoad(long current, long previous, long interval) {
         return new FlowEntryWithLoad(cp, fEntry, new DefaultLoad(current, previous, interval));
     }
 
@@ -213,9 +271,12 @@
 
     @Test
     public void testInterfaceComparator() {
-        assertEquals(0, INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 100), intface("of:0000000000000001", 100)));
-        assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2), intface("of:0000000000000001", 100)) < 0);
-        assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2), intface("of:0000000000000002", 2)) < 0);
+        assertEquals(0, INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 100),
+                                                      intface("of:0000000000000001", 100)));
+        assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2),
+                                                 intface("of:0000000000000001", 100)) < 0);
+        assertTrue(INTERFACES_COMPARATOR.compare(intface("of:0000000000000001", 2),
+                                                 intface("of:0000000000000002", 2)) < 0);
     }
 
     private Interface intface(String deviceID, long port) {
@@ -228,13 +289,16 @@
 
     @Test
     public void testDeviceKeyComparator() {
-        assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"), testDK("ID1", "label", "name")));
-        assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID2", "label", "name"), testDK("ID2", "label", "name")));
-        assertNotEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"), testDK("ID2", "label", "name")));
+        assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"),
+                                                      testDK("ID1", "label", "name")));
+        assertEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID2", "label", "name"),
+                                                      testDK("ID2", "label", "name")));
+        assertNotEquals(0, DEVICE_KEY_COMPARATOR.compare(testDK("ID1", "label", "name"),
+                                                         testDK("ID2", "label", "name")));
     }
 
-    private DeviceKey testDK(String ID, String testLabel, String testName) {
-        return DeviceKey.createDeviceKeyUsingCommunityName(DeviceKeyId.deviceKeyId(ID), testLabel, testName);
+    private DeviceKey testDK(String id, String testLabel, String testName) {
+        return DeviceKey.createDeviceKeyUsingCommunityName(DeviceKeyId.deviceKeyId(id), testLabel, testName);
     }
 
     @Test
@@ -284,13 +348,13 @@
 
     @Test
     public void testVirtualDeviceComparator() {
-        assertEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(VD(0, "of:foo"), VD(0, "of:foo")));
-        assertEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(VD(3, "of:foo"), VD(0, "of:foo")));
-        assertNotEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(VD(0, "of:bar"), VD(0, "of:foo")));
-        assertNotEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(VD(3, "of:bar"), VD(0, "of:foo")));
+        assertEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(0, "of:foo"), vd(0, "of:foo")));
+        assertEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(3, "of:foo"), vd(0, "of:foo")));
+        assertNotEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(0, "of:bar"), vd(0, "of:foo")));
+        assertNotEquals(0, VIRTUAL_DEVICE_COMPARATOR.compare(vd(3, "of:bar"), vd(0, "of:foo")));
     }
 
-    private VirtualDevice VD(int netID, String devID) {
+    private VirtualDevice vd(int netID, String devID) {
         return new DefaultVirtualDevice(NetworkId.networkId(netID), DeviceId.deviceId(devID));
     }
 
diff --git a/incubator/bmv2/model/src/test/java/org/onosproject/bmv2/model/Bmv2PipelineModelParserTest.java b/incubator/bmv2/model/src/test/java/org/onosproject/bmv2/model/Bmv2PipelineModelParserTest.java
index f1bd683..aa44c09 100644
--- a/incubator/bmv2/model/src/test/java/org/onosproject/bmv2/model/Bmv2PipelineModelParserTest.java
+++ b/incubator/bmv2/model/src/test/java/org/onosproject/bmv2/model/Bmv2PipelineModelParserTest.java
@@ -18,7 +18,6 @@
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.common.testing.EqualsTester;
 import org.hamcrest.collection.IsIterableContainingInOrder;
@@ -32,7 +31,6 @@
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
-import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
diff --git a/tools/build/conf/src/main/java/org/onosproject/checkstyle/CheckstyleRunner.java b/tools/build/conf/src/main/java/org/onosproject/checkstyle/CheckstyleRunner.java
index e6638be..9e05fa3 100644
--- a/tools/build/conf/src/main/java/org/onosproject/checkstyle/CheckstyleRunner.java
+++ b/tools/build/conf/src/main/java/org/onosproject/checkstyle/CheckstyleRunner.java
@@ -81,7 +81,7 @@
             checker.addListener(listener);
 
             // run Checker
-            List<File> fileList = input.subList(2, input.size() - 1).stream()
+            List<File> fileList = input.subList(2, input.size()).stream()
                     .filter(s -> !s.contains("/:"))  // Yes, fighting a hack with a hack.
                     .map(File::new)
                     .collect(Collectors.toList());
diff --git a/tools/build/conf/src/main/resources/onos/checkstyle-mvn.xml b/tools/build/conf/src/main/resources/onos/checkstyle-mvn.xml
index 32e4a77..d8401a8 100644
--- a/tools/build/conf/src/main/resources/onos/checkstyle-mvn.xml
+++ b/tools/build/conf/src/main/resources/onos/checkstyle-mvn.xml
@@ -140,9 +140,9 @@
         <!-- See http://checkstyle.sf.net/config_javadoc.html -->
         <module name="JavadocMethod">
             <property name="scope" value="package"/>
-	    <property name="allowMissingJavadoc" value="true"/>
+            <property name="allowMissingJavadoc" value="true"/>
             <property name="allowUndeclaredRTE" value="true"/>
-	    <property name="suppressLoadErrors" value="true"/>
+            <property name="suppressLoadErrors" value="true"/>
         </module>
         <module name="JavadocType">
             <property name="severity" value="warning"/>
diff --git a/tools/build/conf/src/main/resources/onos/checkstyle.xml b/tools/build/conf/src/main/resources/onos/checkstyle.xml
index 1d365a9..9b98d01 100644
--- a/tools/build/conf/src/main/resources/onos/checkstyle.xml
+++ b/tools/build/conf/src/main/resources/onos/checkstyle.xml
@@ -139,9 +139,9 @@
         <!-- See http://checkstyle.sf.net/config_javadoc.html -->
         <module name="JavadocMethod">
             <property name="scope" value="package"/>
-	    <property name="allowMissingJavadoc" value="true"/>
+            <property name="allowMissingJavadoc" value="true"/>
             <property name="allowUndeclaredRTE" value="true"/>
-	    <property name="suppressLoadErrors" value="true"/>
+            <property name="suppressLoadErrors" value="true"/>
         </module>
         <module name="JavadocType">
             <property name="severity" value="warning"/>
diff --git a/tools/build/conf/src/main/resources/onos/suppressions.xml b/tools/build/conf/src/main/resources/onos/suppressions.xml
index a40ce9c..56f3d79 100644
--- a/tools/build/conf/src/main/resources/onos/suppressions.xml
+++ b/tools/build/conf/src/main/resources/onos/suppressions.xml
@@ -39,7 +39,7 @@
     <suppress files="org.onlab.packet.RADIUSAttribute" checks="RegexpHeader" />
 
     <!-- Suppressions for unit testing code -->
-    <suppress checks="Javadoc.*"
+    <suppress checks="Javadoc(Package|Method)"
               files=".*/src/test/.*.java"
             />
 
