You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2021/07/27 15:46:03 UTC

[tomcat] branch main updated (46a8745 -> bc11f60)

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

markt pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git.


    from 46a8745  Simplify
     new abd84d2  Fix redundant specification of type arguments warnings
     new bc11f60  Handle new TLS handshake state.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../servlet/jsp/el/ImplicitObjectELResolver.java     | 20 ++++++++++----------
 .../catalina/authenticator/DigestAuthenticator.java  |  2 +-
 .../catalina/filters/CsrfPreventionFilter.java       |  2 +-
 java/org/apache/catalina/realm/LockOutRealm.java     |  2 +-
 .../apache/catalina/tribes/util/StringManager.java   |  2 +-
 .../coyote/http2/Http2AsyncUpgradeHandler.java       |  4 ++--
 .../collections/ManagedConcurrentWeakHashMap.java    |  6 +++---
 java/org/apache/tomcat/util/net/Nio2Channel.java     |  4 ++--
 java/org/apache/tomcat/util/net/Nio2Endpoint.java    |  8 ++++----
 .../apache/tomcat/util/net/SecureNio2Channel.java    |  4 ++--
 java/org/apache/tomcat/util/res/StringManager.java   |  2 +-
 .../tomcat/websocket/AsyncChannelWrapperSecure.java  |  9 ++++++---
 .../apache/tomcat/websocket/LocalStrings.properties  |  2 +-
 .../tomcat/websocket/LocalStrings_fr.properties      |  2 +-
 .../tomcat/websocket/LocalStrings_ja.properties      |  2 +-
 .../tomcat/websocket/LocalStrings_ko.properties      |  2 +-
 .../tomcat/websocket/LocalStrings_zh_CN.properties   |  1 -
 test/org/apache/catalina/valves/Benchmarks.java      | 20 ++++++++++----------
 .../websocket/drawboard/DrawboardEndpoint.java       |  2 +-
 19 files changed, 49 insertions(+), 47 deletions(-)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


[tomcat] 02/02: Handle new TLS handshake state.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit bc11f601e2ea0cc1e0d858a8e35ab2ae37fd214b
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Jul 27 16:44:30 2021 +0100

    Handle new TLS handshake state.
    
    Only applies to DLTS so is always an error here
---
 java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java | 9 ++++++---
 java/org/apache/tomcat/websocket/LocalStrings.properties        | 2 +-
 java/org/apache/tomcat/websocket/LocalStrings_fr.properties     | 2 +-
 java/org/apache/tomcat/websocket/LocalStrings_ja.properties     | 2 +-
 java/org/apache/tomcat/websocket/LocalStrings_ko.properties     | 2 +-
 java/org/apache/tomcat/websocket/LocalStrings_zh_CN.properties  | 1 -
 6 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java b/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java
index a72949e..34485e9 100644
--- a/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java
+++ b/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java
@@ -411,9 +411,12 @@ public class AsyncChannelWrapperSecure implements AsyncChannelWrapper {
                             handshaking = false;
                             break;
                         }
-                        case NOT_HANDSHAKING: {
-                            throw new SSLException(
-                                    sm.getString("asyncChannelWrapperSecure.notHandshaking"));
+                        case NOT_HANDSHAKING:
+                            // Don't expect to see this during a handshake
+                        case NEED_UNWRAP_AGAIN: {
+                            // Only applies to DLTS
+                            throw new SSLException(sm.getString(
+                                    "asyncChannelWrapperSecure.unexpectedHandshakeState", handshakeStatus));
                         }
                     }
                 }
diff --git a/java/org/apache/tomcat/websocket/LocalStrings.properties b/java/org/apache/tomcat/websocket/LocalStrings.properties
index 382cc04..9031baf 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings.properties
@@ -22,10 +22,10 @@ asyncChannelWrapperSecure.closeFail=Failed to close channel cleanly
 asyncChannelWrapperSecure.concurrentRead=Concurrent read operations are not permitted
 asyncChannelWrapperSecure.concurrentWrite=Concurrent write operations are not permitted
 asyncChannelWrapperSecure.eof=Unexpected end of stream
-asyncChannelWrapperSecure.notHandshaking=Unexpected state [NOT_HANDSHAKING] during TLS handshake
 asyncChannelWrapperSecure.statusUnwrap=Unexpected Status of SSLEngineResult after an unwrap() operation
 asyncChannelWrapperSecure.statusWrap=Unexpected Status of SSLEngineResult after a wrap() operation
 asyncChannelWrapperSecure.tooBig=The result [{0}] is too big to be expressed as an Integer
+asyncChannelWrapperSecure.unexpectedHandshakeState=Unexpected state [{0}] during TLS handshake
 asyncChannelWrapperSecure.wrongStateRead=Flag that indicates a read is in progress was found to be false (it should have been true) when trying to complete a read operation
 asyncChannelWrapperSecure.wrongStateWrite=Flag that indicates a write is in progress was found to be false (it should have been true) when trying to complete a write operation
 
diff --git a/java/org/apache/tomcat/websocket/LocalStrings_fr.properties b/java/org/apache/tomcat/websocket/LocalStrings_fr.properties
index 72f3c1e..acaa7c1 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings_fr.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings_fr.properties
@@ -22,10 +22,10 @@ asyncChannelWrapperSecure.closeFail=Impossible de fermer proprement le canal
 asyncChannelWrapperSecure.concurrentRead=Les opérations de lecture concurrentes ne sont pas permises
 asyncChannelWrapperSecure.concurrentWrite=Les opérations d'écriture concurrentes ne sont pas permises
 asyncChannelWrapperSecure.eof=Fin de flux inattendue
-asyncChannelWrapperSecure.notHandshaking=Etat NOT_HANDSHAKING inattendu pendant la négociation TLS
 asyncChannelWrapperSecure.statusUnwrap=Etat inattendu de SSLEngineResult après une opération unwrap()
 asyncChannelWrapperSecure.statusWrap=Etat inattendu de SSLEngineResult après une opération wrap()
 asyncChannelWrapperSecure.tooBig=Le résultat [{0}] est trop grand pour pouvoir être converti en Integer
+asyncChannelWrapperSecure.unexpectedHandshakeState=Etat [{0}] inattendu pendant la négociation TLS
 asyncChannelWrapperSecure.wrongStateRead=L'indicateur de lecture en cours était faux alors qu'il aurait dû vrai lors d'une tentative pour terminer une opération de lecture
 asyncChannelWrapperSecure.wrongStateWrite=L'indicateur d'écriture en cours était faux alors qu'il aurait dû vrai lors d'une tentative pour terminer une opération d'écriture
 
diff --git a/java/org/apache/tomcat/websocket/LocalStrings_ja.properties b/java/org/apache/tomcat/websocket/LocalStrings_ja.properties
index 3813553..ca24dfe 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings_ja.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings_ja.properties
@@ -22,10 +22,10 @@ asyncChannelWrapperSecure.closeFail=チャンネルをきれいに閉じるこ
 asyncChannelWrapperSecure.concurrentRead=コンカレントな読み取り操作を行うことはできません。
 asyncChannelWrapperSecure.concurrentWrite=コンカレントな書き込み操作を行うことはできません。
 asyncChannelWrapperSecure.eof=予期せぬ位置にストリームの終端を検出しました。
-asyncChannelWrapperSecure.notHandshaking=TLSハンドシェイク中に予期しない状態[NOT_HANDSHAKING]
 asyncChannelWrapperSecure.statusUnwrap=unwrap()操作後のSSLEngineResultの予期しないステータス
 asyncChannelWrapperSecure.statusWrap=wrap()操作後のSSLEngineResultの予期しないステータス。
 asyncChannelWrapperSecure.tooBig=Integer として解釈するには大きすぎる結果 [{0}] です。
+asyncChannelWrapperSecure.unexpectedHandshakeState=TLSハンドシェイク中に予期しない状態[{0}]
 asyncChannelWrapperSecure.wrongStateRead=読み取り操作の完了中に読み取り中を意味するフラグが false になっていることを検出しました (true になっているべきです)。
 asyncChannelWrapperSecure.wrongStateWrite=書き込み操作を完了しようとすると、書き込みが進行中であることを示すフラグがfalse(trueであったはずです)であることが判明しました。
 
diff --git a/java/org/apache/tomcat/websocket/LocalStrings_ko.properties b/java/org/apache/tomcat/websocket/LocalStrings_ko.properties
index dc4e6b9..57d7532 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings_ko.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings_ko.properties
@@ -22,10 +22,10 @@ asyncChannelWrapperSecure.closeFail=채널을 깨끗하게 닫지 못했습니
 asyncChannelWrapperSecure.concurrentRead=동시 발생적인 읽기 오퍼레이션들은 허용되지 않습니다.
 asyncChannelWrapperSecure.concurrentWrite=동시적인 쓰기 오퍼레이션들은 허용되지 않습니다.
 asyncChannelWrapperSecure.eof=예기치 않은 스트림의 끝
-asyncChannelWrapperSecure.notHandshaking=TLS handshake 과정 중 예기치 않은 상태 [NOT_HANDSHAKING]입니다.
 asyncChannelWrapperSecure.statusUnwrap=unwrap() 오퍼레이션 후에, SSLEngineResult의 예기치 않은 상태입니다.
 asyncChannelWrapperSecure.statusWrap=wrap() 오퍼레이션 수행 이후, SSLEngineResult의 예기치 않은 상태입니다.
 asyncChannelWrapperSecure.tooBig=결과 [{0}]이(가) 너무 커서, 정수로서 표현될 수 없습니다.
+asyncChannelWrapperSecure.unexpectedHandshakeState=TLS handshake 과정 중 예기치 않은 상태 [{0}]입니다.
 asyncChannelWrapperSecure.wrongStateRead=읽기 오퍼레이션을 완료하려 시도할 때에, 읽기 진행 중임을 표시하는 플래그가 false인 것으로 (true였어만 했음에도) 밝혀졌습니다.
 asyncChannelWrapperSecure.wrongStateWrite=쓰기 오퍼레이션을 완료하려 시도할 때, 쓰기 진행 중이라는 플래그가 false로 (true였어야 함에도) 밝혀졌습니다.
 
diff --git a/java/org/apache/tomcat/websocket/LocalStrings_zh_CN.properties b/java/org/apache/tomcat/websocket/LocalStrings_zh_CN.properties
index 61ac558..0b01791 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings_zh_CN.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings_zh_CN.properties
@@ -22,7 +22,6 @@ asyncChannelWrapperSecure.closeFail=干净的关闭通道失败
 asyncChannelWrapperSecure.concurrentRead=不允许并发读取操作
 asyncChannelWrapperSecure.concurrentWrite=不允许并发写操作
 asyncChannelWrapperSecure.eof=意外的流结尾
-asyncChannelWrapperSecure.notHandshaking=TLS握手过程中出现意外状态[非握手]
 asyncChannelWrapperSecure.statusUnwrap=unwrap()操作后SSLEngineResult 的意外状态
 asyncChannelWrapperSecure.statusWrap=wrap()操作后SSLEngineResult的意外状态
 asyncChannelWrapperSecure.tooBig=结果[{0}]太大,无法表示为整数

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


[tomcat] 01/02: Fix redundant specification of type arguments warnings

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit abd84d2096124a597e342897e0be25bbe8a03214
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Jul 27 16:26:05 2021 +0100

    Fix redundant specification of type arguments warnings
---
 .../servlet/jsp/el/ImplicitObjectELResolver.java     | 20 ++++++++++----------
 .../catalina/authenticator/DigestAuthenticator.java  |  2 +-
 .../catalina/filters/CsrfPreventionFilter.java       |  2 +-
 java/org/apache/catalina/realm/LockOutRealm.java     |  2 +-
 .../apache/catalina/tribes/util/StringManager.java   |  2 +-
 .../coyote/http2/Http2AsyncUpgradeHandler.java       |  4 ++--
 .../collections/ManagedConcurrentWeakHashMap.java    |  6 +++---
 java/org/apache/tomcat/util/net/Nio2Channel.java     |  4 ++--
 java/org/apache/tomcat/util/net/Nio2Endpoint.java    |  8 ++++----
 .../apache/tomcat/util/net/SecureNio2Channel.java    |  4 ++--
 java/org/apache/tomcat/util/res/StringManager.java   |  2 +-
 test/org/apache/catalina/valves/Benchmarks.java      | 20 ++++++++++----------
 .../websocket/drawboard/DrawboardEndpoint.java       |  2 +-
 13 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/java/jakarta/servlet/jsp/el/ImplicitObjectELResolver.java b/java/jakarta/servlet/jsp/el/ImplicitObjectELResolver.java
index 4e63e26..3d00c87 100644
--- a/java/jakarta/servlet/jsp/el/ImplicitObjectELResolver.java
+++ b/java/jakarta/servlet/jsp/el/ImplicitObjectELResolver.java
@@ -222,7 +222,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,Object> getApplicationScope() {
             if (this.applicationScope == null) {
-                this.applicationScope = new ScopeMap<Object>() {
+                this.applicationScope = new ScopeMap<>() {
                     @Override
                     protected void setAttribute(String name, Object value) {
                         page.getServletContext().setAttribute(name, value);
@@ -249,7 +249,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,Cookie> getCookie() {
             if (this.cookie == null) {
-                this.cookie = new ScopeMap<Cookie>() {
+                this.cookie = new ScopeMap<>() {
                     @Override
                     protected Enumeration<String> getAttributeNames() {
                         Cookie[] cookies = ((HttpServletRequest) page.getRequest()).getCookies();
@@ -283,7 +283,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,String> getHeader() {
             if (this.header == null) {
-                this.header = new ScopeMap<String>() {
+                this.header = new ScopeMap<>() {
                     @Override
                     protected Enumeration<String> getAttributeNames() {
                         return ((HttpServletRequest) page.getRequest())
@@ -302,7 +302,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,String[]> getHeaderValues() {
             if (this.headerValues == null) {
-                this.headerValues = new ScopeMap<String[]>() {
+                this.headerValues = new ScopeMap<>() {
                     @Override
                     protected Enumeration<String> getAttributeNames() {
                         return ((HttpServletRequest) page.getRequest())
@@ -331,7 +331,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,String> getInitParam() {
             if (this.initParam == null) {
-                this.initParam = new ScopeMap<String>() {
+                this.initParam = new ScopeMap<>() {
                     @Override
                     protected Enumeration<String> getAttributeNames() {
                         return page.getServletContext().getInitParameterNames();
@@ -352,7 +352,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,Object> getPageScope() {
             if (this.pageScope == null) {
-                this.pageScope = new ScopeMap<Object>() {
+                this.pageScope = new ScopeMap<>() {
                     @Override
                     protected void setAttribute(String name, Object value) {
                         page.setAttribute(name, value);
@@ -380,7 +380,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,String> getParam() {
             if (this.param == null) {
-                this.param = new ScopeMap<String>() {
+                this.param = new ScopeMap<>() {
                     @Override
                     protected Enumeration<String> getAttributeNames() {
                         return page.getRequest().getParameterNames();
@@ -397,7 +397,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,String[]> getParamValues() {
             if (this.paramValues == null) {
-                this.paramValues = new ScopeMap<String[]>() {
+                this.paramValues = new ScopeMap<>() {
                     @Override
                     protected String[] getAttribute(String name) {
                         return page.getRequest().getParameterValues(name);
@@ -414,7 +414,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,Object> getRequestScope() {
             if (this.requestScope == null) {
-                this.requestScope = new ScopeMap<Object>() {
+                this.requestScope = new ScopeMap<>() {
                     @Override
                     protected void setAttribute(String name, Object value) {
                         page.getRequest().setAttribute(name, value);
@@ -441,7 +441,7 @@ public class ImplicitObjectELResolver extends ELResolver {
 
         public Map<String,Object> getSessionScope() {
             if (this.sessionScope == null) {
-                this.sessionScope = new ScopeMap<Object>() {
+                this.sessionScope = new ScopeMap<>() {
                     @Override
                     protected void setAttribute(String name, Object value) {
                         ((HttpServletRequest) page.getRequest()).getSession()
diff --git a/java/org/apache/catalina/authenticator/DigestAuthenticator.java b/java/org/apache/catalina/authenticator/DigestAuthenticator.java
index ee926f7..a66b047 100644
--- a/java/org/apache/catalina/authenticator/DigestAuthenticator.java
+++ b/java/org/apache/catalina/authenticator/DigestAuthenticator.java
@@ -383,7 +383,7 @@ public class DigestAuthenticator extends AuthenticatorBase {
             setOpaque(sessionIdGenerator.generateSessionId());
         }
 
-        nonces = new LinkedHashMap<String, DigestAuthenticator.NonceInfo>() {
+        nonces = new LinkedHashMap<>() {
 
             private static final long serialVersionUID = 1L;
             private static final long LOG_SUPPRESS_TIME = 5 * 60 * 1000;
diff --git a/java/org/apache/catalina/filters/CsrfPreventionFilter.java b/java/org/apache/catalina/filters/CsrfPreventionFilter.java
index 2392a6b..22efa40 100644
--- a/java/org/apache/catalina/filters/CsrfPreventionFilter.java
+++ b/java/org/apache/catalina/filters/CsrfPreventionFilter.java
@@ -294,7 +294,7 @@ public class CsrfPreventionFilter extends CsrfPreventionFilterBase {
         private final Map<T,T> cache;
 
         public LruCache(final int cacheSize) {
-            cache = new LinkedHashMap<T,T>() {
+            cache = new LinkedHashMap<>() {
                 private static final long serialVersionUID = 1L;
                 @Override
                 protected boolean removeEldestEntry(Map.Entry<T,T> eldest) {
diff --git a/java/org/apache/catalina/realm/LockOutRealm.java b/java/org/apache/catalina/realm/LockOutRealm.java
index 1eaff96..0743df6 100644
--- a/java/org/apache/catalina/realm/LockOutRealm.java
+++ b/java/org/apache/catalina/realm/LockOutRealm.java
@@ -91,7 +91,7 @@ public class LockOutRealm extends CombinedRealm {
     protected synchronized void startInternal() throws LifecycleException {
         // Configure the list of failed users to delete the oldest entry once it
         // exceeds the specified size
-        failedUsers = new LinkedHashMap<String, LockRecord>(cacheSize, 0.75f,
+        failedUsers = new LinkedHashMap<>(cacheSize, 0.75f,
                 true) {
             private static final long serialVersionUID = 1L;
             @Override
diff --git a/java/org/apache/catalina/tribes/util/StringManager.java b/java/org/apache/catalina/tribes/util/StringManager.java
index 0979c46..aeb82f4 100644
--- a/java/org/apache/catalina/tribes/util/StringManager.java
+++ b/java/org/apache/catalina/tribes/util/StringManager.java
@@ -233,7 +233,7 @@ public class StringManager {
              * for removal needs to use one less than the maximum desired size
              *
              */
-            map = new LinkedHashMap<Locale,StringManager>(LOCALE_CACHE_SIZE, 1, true) {
+            map = new LinkedHashMap<>(LOCALE_CACHE_SIZE, 1, true) {
                 private static final long serialVersionUID = 1L;
                 @Override
                 protected boolean removeEldestEntry(
diff --git a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
index 5d11879..4dc268a 100644
--- a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
@@ -52,7 +52,7 @@ public class Http2AsyncUpgradeHandler extends Http2UpgradeHandler {
         super(protocol, adapter, coyoteRequest);
     }
 
-    private final CompletionHandler<Long, Void> errorCompletion = new CompletionHandler<Long, Void>() {
+    private final CompletionHandler<Long, Void> errorCompletion = new CompletionHandler<>() {
         @Override
         public void completed(Long result, Void attachment) {
         }
@@ -61,7 +61,7 @@ public class Http2AsyncUpgradeHandler extends Http2UpgradeHandler {
             error.set(t);
         }
     };
-    private final CompletionHandler<Long, Void> applicationErrorCompletion = new CompletionHandler<Long, Void>() {
+    private final CompletionHandler<Long, Void> applicationErrorCompletion = new CompletionHandler<>() {
         @Override
         public void completed(Long result, Void attachment) {
         }
diff --git a/java/org/apache/tomcat/util/collections/ManagedConcurrentWeakHashMap.java b/java/org/apache/tomcat/util/collections/ManagedConcurrentWeakHashMap.java
index 5ccad11..53f3e77 100644
--- a/java/org/apache/tomcat/util/collections/ManagedConcurrentWeakHashMap.java
+++ b/java/org/apache/tomcat/util/collections/ManagedConcurrentWeakHashMap.java
@@ -214,7 +214,7 @@ public class ManagedConcurrentWeakHashMap<K, V> extends AbstractMap<K, V> implem
 
     @Override
     public Set<Map.Entry<K, V>> entrySet() {
-        return new AbstractSet<Map.Entry<K, V>>() {
+        return new AbstractSet<>() {
             @Override
             public boolean isEmpty() {
                 return map.isEmpty();
@@ -227,7 +227,7 @@ public class ManagedConcurrentWeakHashMap<K, V> extends AbstractMap<K, V> implem
 
             @Override
             public Iterator<Map.Entry<K, V>> iterator() {
-                return new Iterator<Map.Entry<K, V>>() {
+                return new Iterator<>() {
                     private final Iterator<Map.Entry<Key, V>> it = map
                             .entrySet().iterator();
 
@@ -238,7 +238,7 @@ public class ManagedConcurrentWeakHashMap<K, V> extends AbstractMap<K, V> implem
 
                     @Override
                     public Map.Entry<K, V> next() {
-                        return new Map.Entry<K, V>() {
+                        return new Map.Entry<>() {
                             private final Map.Entry<Key, V> en = it.next();
 
                             @SuppressWarnings("unchecked")
diff --git a/java/org/apache/tomcat/util/net/Nio2Channel.java b/java/org/apache/tomcat/util/net/Nio2Channel.java
index a2612fd..603c43f 100644
--- a/java/org/apache/tomcat/util/net/Nio2Channel.java
+++ b/java/org/apache/tomcat/util/net/Nio2Channel.java
@@ -184,7 +184,7 @@ public class Nio2Channel implements AsynchronousByteChannel {
         sc.write(srcs, offset, length, timeout, unit, attachment, handler);
     }
 
-    private static final Future<Boolean> DONE = new Future<Boolean>() {
+    private static final Future<Boolean> DONE = new Future<>() {
         @Override
         public boolean cancel(boolean mayInterruptIfRunning) {
             return false;
@@ -222,7 +222,7 @@ public class Nio2Channel implements AsynchronousByteChannel {
         return appReadBufHandler;
     }
 
-    private static final Future<Integer> DONE_INT = new Future<Integer>() {
+    private static final Future<Integer> DONE_INT = new Future<>() {
         @Override
         public boolean cancel(boolean mayInterruptIfRunning) {
             return false;
diff --git a/java/org/apache/tomcat/util/net/Nio2Endpoint.java b/java/org/apache/tomcat/util/net/Nio2Endpoint.java
index 8c3f561..f80dd5d 100644
--- a/java/org/apache/tomcat/util/net/Nio2Endpoint.java
+++ b/java/org/apache/tomcat/util/net/Nio2Endpoint.java
@@ -490,7 +490,7 @@ public class Nio2Endpoint extends AbstractJsseEndpoint<Nio2Channel,AsynchronousS
         private boolean writeNotify = false;
 
         private CompletionHandler<Integer, SendfileData> sendfileHandler
-            = new CompletionHandler<Integer, SendfileData>() {
+            = new CompletionHandler<>() {
 
             @Override
             public void completed(Integer nWrite, SendfileData attachment) {
@@ -576,7 +576,7 @@ public class Nio2Endpoint extends AbstractJsseEndpoint<Nio2Channel,AsynchronousS
             nioChannels = endpoint.getNioChannels();
             socketBufferHandler = channel.getBufHandler();
 
-            this.readCompletionHandler = new CompletionHandler<Integer, ByteBuffer>() {
+            this.readCompletionHandler = new CompletionHandler<>() {
                 @Override
                 public void completed(Integer nBytes, ByteBuffer attachment) {
                     if (log.isDebugEnabled()) {
@@ -622,7 +622,7 @@ public class Nio2Endpoint extends AbstractJsseEndpoint<Nio2Channel,AsynchronousS
                 }
             };
 
-            this.writeCompletionHandler = new CompletionHandler<Integer, ByteBuffer>() {
+            this.writeCompletionHandler = new CompletionHandler<>() {
                 @Override
                 public void completed(Integer nBytes, ByteBuffer attachment) {
                     writeNotify = false;
@@ -676,7 +676,7 @@ public class Nio2Endpoint extends AbstractJsseEndpoint<Nio2Channel,AsynchronousS
                 }
             };
 
-            gatheringWriteCompletionHandler = new CompletionHandler<Long, ByteBuffer[]>() {
+            gatheringWriteCompletionHandler = new CompletionHandler<>() {
                 @Override
                 public void completed(Long nBytes, ByteBuffer[] attachment) {
                     writeNotify = false;
diff --git a/java/org/apache/tomcat/util/net/SecureNio2Channel.java b/java/org/apache/tomcat/util/net/SecureNio2Channel.java
index f0e4bb7..f460304 100644
--- a/java/org/apache/tomcat/util/net/SecureNio2Channel.java
+++ b/java/org/apache/tomcat/util/net/SecureNio2Channel.java
@@ -935,7 +935,7 @@ public class SecureNio2Channel extends Nio2Channel  {
         if (!handshakeComplete) {
             throw new IllegalStateException(sm.getString("channel.nio.ssl.incompleteHandshake"));
         }
-        CompletionHandler<Integer, A> readCompletionHandler = new CompletionHandler<Integer, A>() {
+        CompletionHandler<Integer, A> readCompletionHandler = new CompletionHandler<>() {
             @Override
             public void completed(Integer nBytes, A attach) {
                 if (nBytes.intValue() < 0) {
@@ -1039,7 +1039,7 @@ public class SecureNio2Channel extends Nio2Channel  {
         if (!handshakeComplete) {
             throw new IllegalStateException(sm.getString("channel.nio.ssl.incompleteHandshake"));
         }
-        CompletionHandler<Integer, A> readCompletionHandler = new CompletionHandler<Integer, A>() {
+        CompletionHandler<Integer, A> readCompletionHandler = new CompletionHandler<>() {
             @Override
             public void completed(Integer nBytes, A attach) {
                 if (nBytes.intValue() < 0) {
diff --git a/java/org/apache/tomcat/util/res/StringManager.java b/java/org/apache/tomcat/util/res/StringManager.java
index d9e11bb..17132b3 100644
--- a/java/org/apache/tomcat/util/res/StringManager.java
+++ b/java/org/apache/tomcat/util/res/StringManager.java
@@ -244,7 +244,7 @@ public class StringManager {
              * for removal needs to use one less than the maximum desired size
              *
              */
-            map = new LinkedHashMap<Locale,StringManager>(LOCALE_CACHE_SIZE, 1, true) {
+            map = new LinkedHashMap<>(LOCALE_CACHE_SIZE, 1, true) {
                 private static final long serialVersionUID = 1L;
                 @Override
                 protected boolean removeEldestEntry(
diff --git a/test/org/apache/catalina/valves/Benchmarks.java b/test/org/apache/catalina/valves/Benchmarks.java
index 30ea36e..9c6f774 100644
--- a/test/org/apache/catalina/valves/Benchmarks.java
+++ b/test/org/apache/catalina/valves/Benchmarks.java
@@ -75,7 +75,7 @@ public class Benchmarks {
             return "ThreadLocals";
         }
 
-        private ThreadLocal<Long> currentMillisLocal = new ThreadLocal<Long>() {
+        private ThreadLocal<Long> currentMillisLocal = new ThreadLocal<>() {
             @Override
             protected Long initialValue() {
                 return Long.valueOf(0);
@@ -111,7 +111,7 @@ public class Benchmarks {
             long value = 0;
         }
 
-        private ThreadLocal<MutableLong> currentMillisLocal = new ThreadLocal<MutableLong>() {
+        private ThreadLocal<MutableLong> currentMillisLocal = new ThreadLocal<>() {
             @Override
             protected MutableLong initialValue() {
                 return new MutableLong();
@@ -148,7 +148,7 @@ public class Benchmarks {
             public Date currentDate;
         }
 
-        private ThreadLocal<Struct> currentStruct = new ThreadLocal<Struct>() {
+        private ThreadLocal<Struct> currentStruct = new ThreadLocal<>() {
             @Override
             protected Struct initialValue() {
                 return new Struct();
@@ -267,31 +267,31 @@ public class Benchmarks {
 
         private ThreadLocal<String> currentDateStringLocal = new ThreadLocal<>();
 
-        private ThreadLocal<Date> currentDateLocal = new ThreadLocal<Date>() {
+        private ThreadLocal<Date> currentDateLocal = new ThreadLocal<>() {
             @Override
             protected Date initialValue() {
                 return new Date();
             }
         };
-        private ThreadLocal<SimpleDateFormat> dayFormatterLocal = new ThreadLocal<SimpleDateFormat>() {
+        private ThreadLocal<SimpleDateFormat> dayFormatterLocal = new ThreadLocal<>() {
             @Override
             protected SimpleDateFormat initialValue() {
                 return new SimpleDateFormat("dd");
             }
         };
-        private ThreadLocal<SimpleDateFormat> monthFormatterLocal = new ThreadLocal<SimpleDateFormat>() {
+        private ThreadLocal<SimpleDateFormat> monthFormatterLocal = new ThreadLocal<>() {
             @Override
             protected SimpleDateFormat initialValue() {
                 return new SimpleDateFormat("MM");
             }
         };
-        private ThreadLocal<SimpleDateFormat> yearFormatterLocal = new ThreadLocal<SimpleDateFormat>() {
+        private ThreadLocal<SimpleDateFormat> yearFormatterLocal = new ThreadLocal<>() {
             @Override
             protected SimpleDateFormat initialValue() {
                 return new SimpleDateFormat("yyyy");
             }
         };
-        private ThreadLocal<SimpleDateFormat> timeFormatterLocal = new ThreadLocal<SimpleDateFormat>() {
+        private ThreadLocal<SimpleDateFormat> timeFormatterLocal = new ThreadLocal<>() {
             @Override
             protected SimpleDateFormat initialValue() {
                 return new SimpleDateFormat("hh:mm:ss");
@@ -353,7 +353,7 @@ public class Benchmarks {
                     "hh:mm:ss");
         }
 
-        private ThreadLocal<Struct> structLocal = new ThreadLocal<Struct>() {
+        private ThreadLocal<Struct> structLocal = new ThreadLocal<>() {
             @Override
             protected Struct initialValue() {
                 return new Struct();
@@ -414,7 +414,7 @@ public class Benchmarks {
                     "hh:mm:ss");
         }
 
-        private ThreadLocal<Struct> structLocal = new ThreadLocal<Struct>() {
+        private ThreadLocal<Struct> structLocal = new ThreadLocal<>() {
             @Override
             protected Struct initialValue() {
                 return new Struct();
diff --git a/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java b/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
index df98966..10ffd2c 100644
--- a/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
+++ b/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
@@ -165,7 +165,7 @@ public final class DrawboardEndpoint extends Endpoint {
 
 
     private final MessageHandler.Whole<String> stringHandler =
-            new MessageHandler.Whole<String>() {
+            new MessageHandler.Whole<>() {
 
         @Override
         public void onMessage(final String message) {

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org