Author: kkolinko Date: Tue Jun 3 12:18:17 2014 New Revision: 1599505 URL: http://svn.apache.org/r1599505 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56582 Convert implementations of ActionHook.action(..) to use switch(enum) operator. Part 1/2: AJP processors.
It is backport of r1599395 from tomcat/trunk. Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1599395 Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1599505&r1=1599504&r2=1599505&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Tue Jun 3 12:18:17 2014 @@ -319,8 +319,8 @@ public abstract class AbstractAjpProcess @Override public final void action(ActionCode actionCode, Object param) { - if (actionCode == ActionCode.COMMIT) { - + switch (actionCode) { + case COMMIT: { if (response.isCommitted()) return; @@ -338,9 +338,9 @@ public abstract class AbstractAjpProcess // Set error flag error = true; } - - } else if (actionCode == ActionCode.CLIENT_FLUSH) { - + break; + } + case CLIENT_FLUSH: { if (!response.isCommitted()) { // Validate and write response headers try { @@ -358,16 +358,19 @@ public abstract class AbstractAjpProcess // Set error flag error = true; } - - } else if (actionCode == ActionCode.IS_ERROR) { + break; + } + case IS_ERROR: { ((AtomicBoolean) param).set(error); - - } else if (actionCode == ActionCode.DISABLE_SWALLOW_INPUT) { + break; + } + case DISABLE_SWALLOW_INPUT: { // TODO: Do not swallow request input but // make sure we are closing the connection error = true; - - } else if (actionCode == ActionCode.CLOSE) { + break; + } + case CLOSE: { // Close // End the processing of the current request, and stop any further // transactions with the client @@ -378,9 +381,9 @@ public abstract class AbstractAjpProcess // Set error flag error = true; } - - } else if (actionCode == ActionCode.REQ_SSL_ATTRIBUTE ) { - + break; + } + case REQ_SSL_ATTRIBUTE: { if (!certificates.isNull()) { ByteChunk certData = certificates.getByteChunk(); X509Certificate jsseCerts[] = null; @@ -419,9 +422,9 @@ public abstract class AbstractAjpProcess } request.setAttribute(SSLSupport.CERTIFICATE_KEY, jsseCerts); } - - } else if (actionCode == ActionCode.REQ_HOST_ATTRIBUTE) { - + break; + } + case REQ_HOST_ATTRIBUTE: { // Get remote host name using a DNS resolution if (request.remoteHost().isNull()) { try { @@ -431,14 +434,14 @@ public abstract class AbstractAjpProcess // Ignore } } - - } else if (actionCode == ActionCode.REQ_LOCAL_ADDR_ATTRIBUTE) { - + break; + } + case REQ_LOCAL_ADDR_ATTRIBUTE: { // Copy from local name for now, which should simply be an address request.localAddr().setString(request.localName().toString()); - - } else if (actionCode == ActionCode.REQ_SET_BODY_REPLAY) { - + break; + } + case REQ_SET_BODY_REPLAY: { // Set the given bytes as the content ByteChunk bc = (ByteChunk) param; int length = bc.getLength(); @@ -448,35 +451,60 @@ public abstract class AbstractAjpProcess empty = false; replay = true; endOfStream = false; - - } else if (actionCode == ActionCode.ASYNC_START) { + break; + } + case ASYNC_START: { asyncStateMachine.asyncStart((AsyncContextCallback) param); // Async time out is based on SocketWrapper access time getSocketWrapper().access(); - } else if (actionCode == ActionCode.ASYNC_DISPATCHED) { + break; + } + case ASYNC_DISPATCHED: { asyncStateMachine.asyncDispatched(); - } else if (actionCode == ActionCode.ASYNC_TIMEOUT) { + break; + } + case ASYNC_TIMEOUT: { AtomicBoolean result = (AtomicBoolean) param; result.set(asyncStateMachine.asyncTimeout()); - } else if (actionCode == ActionCode.ASYNC_RUN) { + break; + } + case ASYNC_RUN: { asyncStateMachine.asyncRun((Runnable) param); - } else if (actionCode == ActionCode.ASYNC_ERROR) { + break; + } + case ASYNC_ERROR: { asyncStateMachine.asyncError(); - } else if (actionCode == ActionCode.ASYNC_IS_STARTED) { + break; + } + case ASYNC_IS_STARTED: { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted()); - } else if (actionCode == ActionCode.ASYNC_IS_DISPATCHING) { + break; + } + case ASYNC_IS_DISPATCHING: { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); - } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) { + break; + } + case ASYNC_IS_ASYNC: { ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) { + break; + } + case ASYNC_IS_TIMINGOUT: { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); - } else if (actionCode == ActionCode.ASYNC_IS_ERROR) { + break; + } + case ASYNC_IS_ERROR: { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncError()); - } else if (actionCode == ActionCode.UPGRADE_TOMCAT) { + break; + } + case UPGRADE_TOMCAT: { // HTTP connections only. Unsupported for AJP. // NOOP - } else { + break; + } + default: { actionInternal(actionCode, param); + break; + } } } Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1599505&r1=1599504&r2=1599505&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Tue Jun 3 12:18:17 2014 @@ -249,24 +249,30 @@ public class AjpAprProcessor extends Abs * @param param Action parameter */ @Override + @SuppressWarnings("incomplete-switch") // Other cases are handled by action() protected void actionInternal(ActionCode actionCode, Object param) { - if (actionCode == ActionCode.ASYNC_COMPLETE) { + switch (actionCode) { + case ASYNC_COMPLETE: { if (asyncStateMachine.asyncComplete()) { ((AprEndpoint)endpoint).processSocketAsync(this.socketWrapper, SocketStatus.OPEN_READ); } - - } else if (actionCode == ActionCode.ASYNC_SETTIMEOUT) { + break; + } + case ASYNC_SETTIMEOUT: { if (param == null) return; long timeout = ((Long)param).longValue(); socketWrapper.setTimeout(timeout); - - } else if (actionCode == ActionCode.ASYNC_DISPATCH) { + break; + } + case ASYNC_DISPATCH: { if (asyncStateMachine.asyncDispatch()) { ((AprEndpoint)endpoint).processSocketAsync(this.socketWrapper, SocketStatus.OPEN_READ); } + break; + } } } Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1599505&r1=1599504&r2=1599505&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Tue Jun 3 12:18:17 2014 @@ -241,26 +241,32 @@ public class AjpNioProcessor extends Abs * @param param Action parameter */ @Override + @SuppressWarnings("incomplete-switch") // Other cases are handled by action() protected void actionInternal(ActionCode actionCode, Object param) { - if (actionCode == ActionCode.ASYNC_COMPLETE) { + switch (actionCode) { + case ASYNC_COMPLETE: { if (asyncStateMachine.asyncComplete()) { ((NioEndpoint)endpoint).processSocket(this.socketWrapper.getSocket(), SocketStatus.OPEN_READ, false); } - - } else if (actionCode == ActionCode.ASYNC_SETTIMEOUT) { + break; + } + case ASYNC_SETTIMEOUT: { if (param == null) return; long timeout = ((Long)param).longValue(); final KeyAttachment ka = (KeyAttachment)socketWrapper.getSocket().getAttachment(false); ka.setTimeout(timeout); - - } else if (actionCode == ActionCode.ASYNC_DISPATCH) { + break; + } + case ASYNC_DISPATCH: { if (asyncStateMachine.asyncDispatch()) { ((NioEndpoint)endpoint).processSocket(this.socketWrapper.getSocket(), SocketStatus.OPEN_READ, true); } + break; + } } } Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1599505&r1=1599504&r2=1599505&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Tue Jun 3 12:18:17 2014 @@ -259,25 +259,31 @@ public class AjpProcessor extends Abstra * @param param Action parameter */ @Override + @SuppressWarnings("incomplete-switch") // Other cases are handled by action() protected void actionInternal(ActionCode actionCode, Object param) { - if (actionCode == ActionCode.ASYNC_COMPLETE) { + switch (actionCode) { + case ASYNC_COMPLETE: { if (asyncStateMachine.asyncComplete()) { ((JIoEndpoint)endpoint).processSocketAsync(this.socketWrapper, SocketStatus.OPEN_READ); } - - } else if (actionCode == ActionCode.ASYNC_SETTIMEOUT) { + break; + } + case ASYNC_SETTIMEOUT: { if (param == null) return; long timeout = ((Long)param).longValue(); // if we are not piggy backing on a worker thread, set the timeout socketWrapper.setTimeout(timeout); - - } else if (actionCode == ActionCode.ASYNC_DISPATCH) { + break; + } + case ASYNC_DISPATCH: { if (asyncStateMachine.asyncDispatch()) { ((JIoEndpoint)endpoint).processSocketAsync(this.socketWrapper, SocketStatus.OPEN_READ); } + break; + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org