diff --git a/has-project/has-common/src/main/java/org/apache/kerby/has/common/spnego/KerberosUtil.java b/has-project/has-common/src/main/java/org/apache/kerby/has/common/spnego/KerberosUtil.java
index 14e30dd..f2cafd6 100644
--- a/has-project/has-common/src/main/java/org/apache/kerby/has/common/spnego/KerberosUtil.java
+++ b/has-project/has-common/src/main/java/org/apache/kerby/has/common/spnego/KerberosUtil.java
@@ -205,7 +205,7 @@
    */
   static final String[] getPrincipalNames(String keytabFileName) throws IOException {
     Keytab keytab = Keytab.loadKeytab(new File(keytabFileName));
-    Set<String> principals = new HashSet<String>();
+    Set<String> principals = new HashSet<>();
     List<PrincipalName> entries = keytab.getPrincipals();
     for (PrincipalName entry : entries) {
       principals.add(entry.getName().replace("\\", "/"));
@@ -225,7 +225,7 @@
                                                  Pattern pattern) throws IOException {
     String[] principals = getPrincipalNames(keytab);
     if (principals.length != 0) {
-      List<String> matchingPrincipals = new ArrayList<String>();
+      List<String> matchingPrincipals = new ArrayList<>();
       for (String principal : principals) {
         if (pattern.matcher(principal).matches()) {
           matchingPrincipals.add(principal);
diff --git a/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/ReloadingX509TrustManager.java b/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/ReloadingX509TrustManager.java
index 29ed038..37b8160 100644
--- a/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/ReloadingX509TrustManager.java
+++ b/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/ReloadingX509TrustManager.java
@@ -81,7 +81,7 @@
     this.type = type;
     file = new File(location);
     this.password = password;
-    trustManagerRef = new AtomicReference<X509TrustManager>();
+    trustManagerRef = new AtomicReference<>();
     trustManagerRef.set(loadTrustManager());
     this.reloadInterval = reloadInterval;
   }
diff --git a/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/SSLHostnameVerifier.java b/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/SSLHostnameVerifier.java
index c2ffe3e..c5a0f40 100644
--- a/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/SSLHostnameVerifier.java
+++ b/has-project/has-common/src/main/java/org/apache/kerby/has/common/ssl/SSLHostnameVerifier.java
@@ -393,7 +393,7 @@
             // STRICT implementations of the HostnameVerifier only use the
             // first CN provided.  All other CNs are ignored.
             // (Firefox, wget, curl, Sun Java 1.4, 5, 6 all work this way).
-            final Set<String> names = new TreeSet<String>();
+            final Set<String> names = new TreeSet<>();
             if (cns != null && cns.length > 0 && cns[0] != null) {
                 names.add(cns[0]);
                 if (ie6) {
@@ -525,7 +525,7 @@
 
     class Certificates {
       public static String[] getCNs(X509Certificate cert) {
-        final List<String> cnList = new LinkedList<String>();
+        final List<String> cnList = new LinkedList<>();
         /*
           Sebastian Hauer's original StrictSSLProtocolSocketFactory used
           getName() and had the following comment:
@@ -582,7 +582,7 @@
        * @return Array of SubjectALT DNS names stored in the certificate.
        */
       public static String[] getDNSSubjectAlts(X509Certificate cert) {
-          final List<String> subjectAltList = new LinkedList<String>();
+          final List<String> subjectAltList = new LinkedList<>();
           Collection<List<?>> c = null;
           try {
               c = cert.getSubjectAlternativeNames();
diff --git a/has-project/has-server/src/main/java/org/apache/kerby/has/server/kdc/HasKdcHandler.java b/has-project/has-server/src/main/java/org/apache/kerby/has/server/kdc/HasKdcHandler.java
index ce60739..6d5353d 100644
--- a/has-project/has-server/src/main/java/org/apache/kerby/has/server/kdc/HasKdcHandler.java
+++ b/has-project/has-server/src/main/java/org/apache/kerby/has/server/kdc/HasKdcHandler.java
@@ -119,7 +119,7 @@
     public KrbMessage handleMessage(AuthToken authToken, String passPhrase) throws KrbException {
 
         // set the audiences
-        List<String> auds = new ArrayList<String>();
+        List<String> auds = new ArrayList<>();
         String audience = getAudience("krbtgt");
         auds.add(audience);
         authToken.setAudiences(auds);
@@ -296,7 +296,7 @@
     }
 
     public HostAddresses getHostAddresses() {
-        List<HostAddress> hostAddresses = new ArrayList<HostAddress>();
+        List<HostAddress> hostAddresses = new ArrayList<>();
         HostAddresses addresses = null;
         //empty
         if (!hostAddresses.isEmpty()) {
diff --git a/kerby-backend/mavibot-backend/src/main/java/org/apache/kerby/MavibotBackend.java b/kerby-backend/mavibot-backend/src/main/java/org/apache/kerby/MavibotBackend.java
index 9711a54..996b55c 100644
--- a/kerby-backend/mavibot-backend/src/main/java/org/apache/kerby/MavibotBackend.java
+++ b/kerby-backend/mavibot-backend/src/main/java/org/apache/kerby/MavibotBackend.java
@@ -101,7 +101,7 @@
      */
     @Override
     protected Iterable<String> doGetIdentities() throws KrbException {
-        List<String> keys = new ArrayList<String>();
+        List<String> keys = new ArrayList<>();
         KeyCursor<String> cursor = null;
 
         try {
diff --git a/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/IdentityZNode.java b/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/IdentityZNode.java
index 883d9f8..e51b7da 100644
--- a/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/IdentityZNode.java
+++ b/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/IdentityZNode.java
@@ -308,7 +308,7 @@
             throw new IllegalArgumentException("The znode " + znode + " is not found");
         }
         List<String> typeNames = ZKUtil.listChildrenNoWatch(this.zk, znode);
-        List<EncryptionKey> keys = new ArrayList<EncryptionKey>(typeNames.size());
+        List<EncryptionKey> keys = new ArrayList<>(typeNames.size());
         for (String typeName : typeNames) {
             byte[] key = getEncryptionKey(typeName);
             EncryptionKey encryptionKey = new EncryptionKey();
diff --git a/kerby-common/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java b/kerby-common/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
index 355dd8c..8ee2e15 100644
--- a/kerby-common/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
+++ b/kerby-common/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
@@ -270,7 +270,7 @@
     }
 
     public static String[] split(String input, char delimiter) {
-        List<String> v = new ArrayList<String>();
+        List<String> v = new ArrayList<>();
         boolean moreTokens = true;
         String subString;
 
diff --git a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/Conf.java b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/Conf.java
index a715089..67fc37d 100644
--- a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/Conf.java
+++ b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/Conf.java
@@ -40,7 +40,7 @@
     private final ConfigImpl config;
 
     public Conf() {
-        this.resourceConfigs = new ArrayList<ConfigLoader>(1);
+        this.resourceConfigs = new ArrayList<>(1);
         this.config = new ConfigImpl("Conf");
     }
 
diff --git a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigImpl.java b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigImpl.java
index ec3090f..22cb957 100644
--- a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigImpl.java
+++ b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigImpl.java
@@ -41,7 +41,7 @@
     protected ConfigImpl(String resource) {
         this.resource = resource;
         this.properties = new HashMap<String, ConfigObject>();
-        this.configs = new ArrayList<Config>(0);
+        this.configs = new ArrayList<>(0);
     }
 
     protected void reset() {
@@ -56,7 +56,7 @@
 
     @Override
     public Set<String> getNames() {
-        Set<String>propNames = new HashSet<String>(properties.keySet());
+        Set<String>propNames = new HashSet<>(properties.keySet());
         for (Config config : configs) {
             propNames.addAll(config.getNames());
         }
diff --git a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigObject.java b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigObject.java
index 98b78e4..7008147 100644
--- a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigObject.java
+++ b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/ConfigObject.java
@@ -34,7 +34,7 @@
     }
 
     public ConfigObject(String[] values) {
-        List<String> valuesList = new ArrayList<String>();
+        List<String> valuesList = new ArrayList<>();
         for (String v : values) {
             valuesList.add(v);
         }
@@ -45,9 +45,9 @@
 
     public ConfigObject(List<String> values) {
         if (values != null) {
-            this.value = new ArrayList<String>(values);
+            this.value = new ArrayList<>(values);
         } else {
-            this.value = new ArrayList<String>();
+            this.value = new ArrayList<>();
         }
         this.valueType = ValueType.LIST;
     }
diff --git a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/XmlConfigLoader.java b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/XmlConfigLoader.java
index 78ac7a4..72da7ff 100644
--- a/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/XmlConfigLoader.java
+++ b/kerby-common/kerby-config/src/main/java/org/apache/kerby/config/XmlConfigLoader.java
@@ -118,7 +118,7 @@
         }
 
         NodeList nodes = ele.getChildNodes();
-        List<String> values = new ArrayList<String>(nodes.getLength());
+        List<String> values = new ArrayList<>(nodes.getLength());
         for (int i = 0; i < nodes.getLength(); i++) {
             String value = null;
             Node valueNode = nodes.item(i);
diff --git a/kerby-common/kerby-util/src/main/java/org/apache/kerby/util/Util.java b/kerby-common/kerby-util/src/main/java/org/apache/kerby/util/Util.java
index 2d55e21..e487c8b 100644
--- a/kerby-common/kerby-util/src/main/java/org/apache/kerby/util/Util.java
+++ b/kerby-common/kerby-util/src/main/java/org/apache/kerby/util/Util.java
@@ -104,7 +104,7 @@
     }
 
     private static Set<String> aliases(KeyStore ks) throws KeyStoreException {
-        Set<String> aliases = new TreeSet<String>();
+        Set<String> aliases = new TreeSet<>();
         Enumeration<String> en = ks.aliases();
         while (en.hasMoreElements()) {
             aliases.add(en.nextElement());
diff --git a/kerby-common/kerby-xdr/src/main/java/org/apache/kerby/xdr/type/XdrString.java b/kerby-common/kerby-xdr/src/main/java/org/apache/kerby/xdr/type/XdrString.java
index d648e01..539f17c 100644
--- a/kerby-common/kerby-xdr/src/main/java/org/apache/kerby/xdr/type/XdrString.java
+++ b/kerby-common/kerby-xdr/src/main/java/org/apache/kerby/xdr/type/XdrString.java
@@ -319,7 +319,7 @@
     }
 
     public static String[] split(String input, char delimiter) {
-        List<String> v = new ArrayList<String>();
+        List<String> v = new ArrayList<>();
         boolean moreTokens = true;
         String subString;
 
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/TokenKdcTestBase.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/TokenKdcTestBase.java
index 88d2286..a7c6eb8 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/TokenKdcTestBase.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/TokenKdcTestBase.java
@@ -92,7 +92,7 @@
         authToken.addAttribute("group", GROUP);
         authToken.addAttribute("role", ROLE);
 
-        List<String> aud = new ArrayList<String>();
+        List<String> aud = new ArrayList<>();
         aud.add(audience);
         authToken.setAudiences(aud);
 
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
index e064b20..aedc0c5 100644
--- a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
@@ -114,7 +114,7 @@
 
         authToken.addAttribute("role", ROLE);
 
-        List<String> aud = new ArrayList<String>();
+        List<String> aud = new ArrayList<>();
         aud.add(KrbUtil.makeTgsPrincipal(TestKdcServer.KDC_REALM).getName());
         authToken.setAudiences(aud);
 
diff --git a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/AuthUtil.java b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/AuthUtil.java
index 68d03e7..0a8b3df 100644
--- a/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/AuthUtil.java
+++ b/kerby-kerb/kerb-admin/src/main/java/org/apache/kerby/kerberos/kerb/admin/AuthUtil.java
@@ -44,7 +44,7 @@
 
     public static Subject loginUsingTicketCache(
         String principal, File cacheFile) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
@@ -59,7 +59,7 @@
 
     public static Subject loginUsingKeytab(
         String principal, File keytabFile) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/jaas/TokenJaasKrbUtil.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/jaas/TokenJaasKrbUtil.java
index 0ec8df3..d623de6 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/jaas/TokenJaasKrbUtil.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/jaas/TokenJaasKrbUtil.java
@@ -72,7 +72,7 @@
     public static Subject loginUsingToken(
             String principal, String tokenStr, File armorCache, File ccache, File signKeyFile)
             throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthContext.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthContext.java
index d5fa43b..49eab44 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthContext.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthContext.java
@@ -33,8 +33,8 @@
     private PaData errorPaData;
     private UserResponser userResponser = new UserResponser();
     private PaDataType allowedPaType;
-    private final List<PaDataType> triedPaTypes = new ArrayList<PaDataType>(1);
-    private final List<PreauthHandle> handles = new ArrayList<PreauthHandle>(5);
+    private final List<PaDataType> triedPaTypes = new ArrayList<>(1);
+    private final List<PreauthHandle> handles = new ArrayList<>(5);
 
     public PreauthContext() {
         this.allowedPaType = PaDataType.NONE;
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthHandler.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthHandler.java
index 443195a..a93329b 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthHandler.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/PreauthHandler.java
@@ -44,7 +44,7 @@
     }
 
     private void loadPreauthPlugins(KrbContext context) {
-        preauths = new ArrayList<KrbPreauth>();
+        preauths = new ArrayList<>();
 
         KrbPreauth preauth = new EncTsPreauth();
         preauth.init(context);
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/UserResponser.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/UserResponser.java
index eeaad10..7775ba3 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/UserResponser.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/preauth/UserResponser.java
@@ -24,7 +24,7 @@
 
 public class UserResponser {
 
-    private final List<UserResponseItem> items = new ArrayList<UserResponseItem>(1);
+    private final List<UserResponseItem> items = new ArrayList<>(1);
 
     /**
      * Let customize an interface like CMD or WEB UI to selectively respond all the questions
diff --git a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
index bb9a6ac..9583bff 100644
--- a/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
+++ b/kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/request/KdcRequest.java
@@ -62,7 +62,7 @@
     private Object sessionData;
     private KOptions requestOptions;
     private PrincipalName serverPrincipal;
-    private List<HostAddress> hostAddresses = new ArrayList<HostAddress>();
+    private List<HostAddress> hostAddresses = new ArrayList<>();
     private KdcOptions kdcOptions = new KdcOptions();
     private List<EncryptionType> encryptionTypes;
     private EncryptionType chosenEncryptionType;
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/EncryptionUtil.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/EncryptionUtil.java
index 777e5a4..c41dc28 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/EncryptionUtil.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/EncryptionUtil.java
@@ -104,7 +104,7 @@
     public static List<EncryptionKey> generateKeys(
             String principal, String passwd,
             List<EncryptionType> encryptionTypes) throws KrbException {
-        List<EncryptionKey> results = new ArrayList<EncryptionKey>(encryptionTypes.size());
+        List<EncryptionKey> results = new ArrayList<>(encryptionTypes.size());
         for (EncryptionType eType : encryptionTypes) {
             EncryptionKey encKey = EncryptionHandler.string2Key(
                 principal, passwd, eType);
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/KrbErrorUtil.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/KrbErrorUtil.java
index 98063d0..fb953af 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/KrbErrorUtil.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/KrbErrorUtil.java
@@ -53,7 +53,7 @@
     private static List<EncryptionType> getEtypes(byte[] data) throws IOException {
         EtypeInfo info = new EtypeInfo();
         info.decode(data);
-        List<EncryptionType> results = new ArrayList<EncryptionType>();
+        List<EncryptionType> results = new ArrayList<>();
         for (EtypeInfoEntry entry : info.getElements()) {
             results.add(entry.getEtype());
         }
@@ -63,7 +63,7 @@
     private static List<EncryptionType> getEtypes2(byte[] data) throws IOException {
         EtypeInfo2 info2 = new EtypeInfo2();
         info2.decode(data);
-        List<EncryptionType> results = new ArrayList<EncryptionType>();
+        List<EncryptionType> results = new ArrayList<>();
         for (EtypeInfo2Entry entry : info2.getElements()) {
             results.add(entry.getEtype());
         }
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/IdentityOpts.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/IdentityOpts.java
index ff900b4..dcb8868 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/IdentityOpts.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/IdentityOpts.java
@@ -28,10 +28,10 @@
 public class IdentityOpts {
 
     private String identity;
-    private List<String> altIdentities = new ArrayList<String>(1);
-    private List<String> anchors = new ArrayList<String>(4);
-    private List<String> intermediates = new ArrayList<String>(2);
-    private List<String> crls = new ArrayList<String>(2);
+    private List<String> altIdentities = new ArrayList<>(1);
+    private List<String> anchors = new ArrayList<>(4);
+    private List<String> intermediates = new ArrayList<>(2);
+    private List<String> crls = new ArrayList<>(2);
     private String ocsp;
     private IdentityType idType;
     private String certFile;
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcUdpTransport.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcUdpTransport.java
index 34d38d3..41f3cc0 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcUdpTransport.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/transport/KdcUdpTransport.java
@@ -31,7 +31,7 @@
  * Default implementation of {@link KrbTransport} using UDP.
  */
 public class KdcUdpTransport extends KrbUdpTransport {
-    private BlockingQueue<ByteBuffer> bufferQueue = new ArrayBlockingQueue<ByteBuffer>(2);
+    private BlockingQueue<ByteBuffer> bufferQueue = new ArrayBlockingQueue<>(2);
 
     public KdcUdpTransport(DatagramChannel channel, InetSocketAddress remoteAddress) throws IOException {
         super(remoteAddress);
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbIntegers.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbIntegers.java
index 9ca2826..aab34fd 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbIntegers.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbIntegers.java
@@ -45,7 +45,7 @@
     }
 
     public List<Integer> getValues() {
-        List<Integer> results = new ArrayList<Integer>();
+        List<Integer> results = new ArrayList<>();
         for (Asn1Integer value : getElements()) {
             results.add(value.getValue().intValue());
         }
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceOfType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceOfType.java
index 10e2832..8f9f7d9 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceOfType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceOfType.java
@@ -45,7 +45,7 @@
             return new ArrayList<String>();
         }
         
-        List<String> results = new ArrayList<String>(elements.size());
+        List<String> results = new ArrayList<>(elements.size());
         
         for (T ele : elements) {
             if (ele instanceof Asn1String) {
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADAndOr.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADAndOr.java
index 50ac2f7..308d34a 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADAndOr.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADAndOr.java
@@ -36,7 +36,7 @@
 
     public ADAndOr() {
         super(AuthorizationType.AD_AND_OR);
-        myAndOr = new KrbSequenceOfType<AndOr>();
+        myAndOr = new KrbSequenceOfType<>();
         myAndOr.outerEncodeable = this;
     }
 
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADEnctypeNegotiation.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADEnctypeNegotiation.java
index 3a40490..52db970 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADEnctypeNegotiation.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/ADEnctypeNegotiation.java
@@ -37,7 +37,7 @@
 
     public ADEnctypeNegotiation() {
         super(AuthorizationType.AD_ETYPE_NEGOTIATION);
-        myEnctypeNeg = new KrbSequenceOfType<Asn1Integer>();
+        myEnctypeNeg = new KrbSequenceOfType<>();
         myEnctypeNeg.outerEncodeable = this;
     }
 
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
index 2c171a6..17f89d3 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
@@ -145,7 +145,7 @@
             return Collections.emptyList();
         }
 
-        List<EncryptionType> results = new ArrayList<EncryptionType>();
+        List<EncryptionType> results = new ArrayList<>();
         for (Integer value : values.getValues()) {
             results.add(EncryptionType.fromValue(value));
         }
@@ -153,7 +153,7 @@
     }
 
     public void setEtypes(List<EncryptionType> etypes) {
-        List<Integer> values = new ArrayList<Integer>();
+        List<Integer> values = new ArrayList<>();
         for (EncryptionType etype: etypes) {
             values.add(etype.getValue());
         }
diff --git a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java
index 33d0efe..a07f179 100644
--- a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java
+++ b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java
@@ -41,7 +41,7 @@
  */
 public class CamelliaEncTest {
 
-    private List<String> outputs = new ArrayList<String>();
+    private List<String> outputs = new ArrayList<>();
 
     private byte[] plain = new byte[16];
     private byte[] cipher = new byte[16];
@@ -50,7 +50,7 @@
     private List<String> getExpectedLines() throws IOException {
         try (InputStream res = getClass().getResourceAsStream("/camellia-expect-vt.txt");
              BufferedReader br = new BufferedReader(new InputStreamReader(res))) {
-            List<String> results = new ArrayList<String>();
+            List<String> results = new ArrayList<>();
             String line;
             while ((line = br.readLine()) != null) {
                 line = line.trim();
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthContext.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthContext.java
index 21d2106..7bc5826 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthContext.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthContext.java
@@ -27,7 +27,7 @@
 
 public class PreauthContext {
     private boolean preauthRequired = true;
-    private List<PreauthHandle> handles = new ArrayList<PreauthHandle>(5);
+    private List<PreauthHandle> handles = new ArrayList<>(5);
     private PaData outputPaData;
 
     public PreauthContext() {
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthHandler.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthHandler.java
index 4f45026..b9482d5 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthHandler.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/PreauthHandler.java
@@ -45,7 +45,7 @@
     }
 
     private void loadPreauthPlugins() {
-        preauths = new ArrayList<KdcPreauth>();
+        preauths = new ArrayList<>();
 
         KdcPreauth preauth = new EncTsPreauth();
         preauths.add(preauth);
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/SimpleCacheService.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/SimpleCacheService.java
index 90b27ec..3f9bf77 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/SimpleCacheService.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/replay/SimpleCacheService.java
@@ -26,7 +26,7 @@
     private final Set<RequestRecord> requests;
 
     public SimpleCacheService() {
-        requests = new HashSet<RequestRecord>();
+        requests = new HashSet<>();
     }
 
     @Override
diff --git a/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java b/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
index 224d869..fd39a82 100644
--- a/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
+++ b/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
@@ -48,7 +48,7 @@
 
     public static Subject loginUsingPassword(
             String principal, String password) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
@@ -64,7 +64,7 @@
 
     public static Subject loginUsingTicketCache(
             String principal, File cacheFile) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
@@ -79,7 +79,7 @@
 
     public static Subject loginUsingKeytab(
             String principal, File keytabFile) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
diff --git a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredCacheInputStream.java b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredCacheInputStream.java
index dded504..610a2af 100644
--- a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredCacheInputStream.java
+++ b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredCacheInputStream.java
@@ -58,7 +58,7 @@
 
         String realm = readCountedString();
 
-        List<String> nameStrings = new ArrayList<String>();
+        List<String> nameStrings = new ArrayList<>();
         String component;
         for (int i = 0; i < numComponents; i++) { // sub 1 if version 0x501
             component = readCountedString();
diff --git a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredentialCache.java b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredentialCache.java
index 828a0c5..d979580 100644
--- a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredentialCache.java
+++ b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/ccache/CredentialCache.java
@@ -232,7 +232,7 @@
 
     private List<Credential> readCredentials(CredCacheInputStream ccis)
             throws IOException {
-        List<Credential> results = new ArrayList<Credential>(2);
+        List<Credential> results = new ArrayList<>(2);
 
         Credential cred;
         while (ccis.available() > 0) {
@@ -252,7 +252,7 @@
 
     private List<Tag> readTags(CredCacheInputStream ccis) throws IOException {
         int len = ccis.readShort();
-        List<Tag> tags = new ArrayList<Tag>();
+        List<Tag> tags = new ArrayList<>();
 
         int tag, tagLen, time, usec;
         while (len > 0) {
diff --git a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/Keytab.java b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/Keytab.java
index 52e15d9..d876d91 100644
--- a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/Keytab.java
+++ b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/Keytab.java
@@ -107,7 +107,7 @@
 
     @Override
     public List<KeytabEntry> getKeytabEntries(PrincipalName principal) {
-        List<KeytabEntry> results = new ArrayList<KeytabEntry>();
+        List<KeytabEntry> results = new ArrayList<>();
 
         List<KeytabEntry> internal = principalEntries.get(principal);
         if (internal == null) {
@@ -167,7 +167,7 @@
         PrincipalName principal = entry.getPrincipal();
         List<KeytabEntry> entries = principalEntries.get(principal);
         if (entries == null) {
-            entries = new ArrayList<KeytabEntry>();
+            entries = new ArrayList<>();
             principalEntries.put(principal, entries);
         }
         entries.add(entry);
@@ -178,7 +178,7 @@
     }
 
     private List<KeytabEntry> readEntries(KeytabInputStream kis) throws IOException {
-        List<KeytabEntry> entries = new ArrayList<KeytabEntry>();
+        List<KeytabEntry> entries = new ArrayList<>();
 
         int bytesLeft = kis.available();
         while (bytesLeft > 0) {
diff --git a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/KeytabInputStream.java b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/KeytabInputStream.java
index 0b839c7..67ad554 100644
--- a/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/KeytabInputStream.java
+++ b/kerby-kerb/kerb-util/src/main/java/org/apache/kerby/kerberos/kerb/keytab/KeytabInputStream.java
@@ -49,7 +49,7 @@
 
         String realm = readCountedString();
 
-        List<String> nameStrings = new ArrayList<String>();
+        List<String> nameStrings = new ArrayList<>();
         for (int i = 0; i < numComponents; i++) { // sub 1 if version 0x501
             String component = readCountedString();
             nameStrings.add(component);
diff --git a/kerby-provider/token-provider/src/test/java/org/apache/kerby/kerberos/provider/token/TokenTest.java b/kerby-provider/token-provider/src/test/java/org/apache/kerby/kerberos/provider/token/TokenTest.java
index 602a941..2a93f32 100644
--- a/kerby-provider/token-provider/src/test/java/org/apache/kerby/kerberos/provider/token/TokenTest.java
+++ b/kerby-provider/token-provider/src/test/java/org/apache/kerby/kerberos/provider/token/TokenTest.java
@@ -50,7 +50,7 @@
     static final String ROLE = "ADMIN";
 
     private AuthToken authToken;
-    private List<String> auds = new ArrayList<String>();
+    private List<String> auds = new ArrayList<>();
     private EncryptionMethod encryptionMethod = EncryptionMethod.A128GCM;
 
     @Before
@@ -263,7 +263,7 @@
 
     @Test
     public void testInvalidAudienceJWT() throws Exception {
-        List<String> audiences = new ArrayList<String>();
+        List<String> audiences = new ArrayList<>();
         audiences.add("invalid@EXAMPLE.COM");
 
         TokenEncoder tokenEncoder = KrbRuntime.getTokenProvider("JWT").createTokenEncoder();
diff --git a/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/token/TokenInit.java b/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/token/TokenInit.java
index a1cd5da..ad26d37 100644
--- a/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/token/TokenInit.java
+++ b/kerby-tool/client-tool/src/main/java/org/apache/kerby/kerberos/tool/token/TokenInit.java
@@ -48,7 +48,7 @@
             authToken.addAttribute("role", role);
         }
 
-        List<String> aud = new ArrayList<String>();
+        List<String> aud = new ArrayList<>();
         aud.add("krb5kdc-with-token-extension");
         authToken.setAudiences(aud);
 
diff --git a/kerby-tool/has-tool/src/main/java/org/apache/kerby/kerberos/tool/hclient/HasClientLoginTool.java b/kerby-tool/has-tool/src/main/java/org/apache/kerby/kerberos/tool/hclient/HasClientLoginTool.java
index 585b9ee..697ab2c 100644
--- a/kerby-tool/has-tool/src/main/java/org/apache/kerby/kerberos/tool/hclient/HasClientLoginTool.java
+++ b/kerby-tool/has-tool/src/main/java/org/apache/kerby/kerberos/tool/hclient/HasClientLoginTool.java
@@ -43,8 +43,8 @@
 import java.util.concurrent.TimeUnit;
 
 public class HasClientLoginTool {
-    private static List<String> principalList = new ArrayList<String>();
-    private static List<File>  keytabList = new ArrayList<File>();
+    private static List<String> principalList = new ArrayList<>();
+    private static List<File>  keytabList = new ArrayList<>();
 
     private static final String KEYTAB_USAGE = (OSUtil.isWindows()
         ? "Usage: bin\\k=login-test.cmd" : "Usage: sh bin/login-test.sh")
diff --git a/kerby-tool/kdc-tool/src/main/java/org/apache/kerby/kerberos/tool/kadmin/AuthUtil.java b/kerby-tool/kdc-tool/src/main/java/org/apache/kerby/kerberos/tool/kadmin/AuthUtil.java
index f0f3f62..4374d9c 100644
--- a/kerby-tool/kdc-tool/src/main/java/org/apache/kerby/kerberos/tool/kadmin/AuthUtil.java
+++ b/kerby-tool/kdc-tool/src/main/java/org/apache/kerby/kerberos/tool/kadmin/AuthUtil.java
@@ -44,7 +44,7 @@
 
     public static Subject loginUsingTicketCache(
         String principal, File cacheFile) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
@@ -59,7 +59,7 @@
 
     public static Subject loginUsingKeytab(
         String principal, File keytabFile) throws LoginException {
-        Set<Principal> principals = new HashSet<Principal>();
+        Set<Principal> principals = new HashSet<>();
         principals.add(new KerberosPrincipal(principal));
 
         Subject subject = new Subject(false, principals,
