提交 11806b92 编写于 作者: J Juergen Hoeller

Class identity comparisons wherever possible (and further polishing)

Issue: SPR-12926
上级 4261f34b
......@@ -922,7 +922,7 @@ class CglibAopProxy implements AopProxy, Serializable {
if (aa == null || ba == null) {
return (aa == ba);
}
return aa.getClass().equals(ba.getClass());
return (aa.getClass() == ba.getClass());
}
private boolean equalsPointcuts(Advisor a, Advisor b) {
......
......@@ -165,7 +165,7 @@ public abstract class AbstractBeanFactoryBasedTargetSource implements TargetSour
if (this == other) {
return true;
}
if (other == null || !getClass().equals(other.getClass())) {
if (other == null || getClass() != other.getClass()) {
return false;
}
AbstractBeanFactoryBasedTargetSource otherTargetSource = (AbstractBeanFactoryBasedTargetSource) other;
......
......@@ -203,7 +203,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA
*/
public void setWrappedInstance(Object object, String nestedPath, Object rootObject) {
Assert.notNull(object, "Target object must not be null");
if (object.getClass().equals(javaUtilOptionalClass)) {
if (object.getClass() == javaUtilOptionalClass) {
this.object = OptionalUnwrapper.unwrap(object);
}
else {
......@@ -834,7 +834,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA
PropertyTokenHolder tokens = getPropertyNameTokens(nestedProperty);
String canonicalName = tokens.canonicalName;
Object value = getPropertyValue(tokens);
if (value == null || (value.getClass().equals(javaUtilOptionalClass) && OptionalUnwrapper.isEmpty(value))) {
if (value == null || (value.getClass() == javaUtilOptionalClass && OptionalUnwrapper.isEmpty(value))) {
if (isAutoGrowNestedPaths()) {
value = setDefaultValue(tokens);
}
......@@ -846,7 +846,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA
// Lookup cached sub-PropertyAccessor, create new one if not found.
AbstractNestablePropertyAccessor nestedPa = this.nestedPropertyAccessors.get(canonicalName);
if (nestedPa == null || nestedPa.getWrappedInstance() !=
(value.getClass().equals(javaUtilOptionalClass) ? OptionalUnwrapper.unwrap(value) : value)) {
(value.getClass() == javaUtilOptionalClass ? OptionalUnwrapper.unwrap(value) : value)) {
if (logger.isTraceEnabled()) {
logger.trace("Creating new nested " + getClass().getSimpleName() + " for property '" + canonicalName + "'");
}
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -105,7 +105,7 @@ public class InjectionMetadata {
public static boolean needsRefresh(InjectionMetadata metadata, Class<?> clazz) {
return (metadata == null || !metadata.targetClass.equals(clazz));
return (metadata == null || metadata.targetClass != clazz);
}
......
......@@ -174,7 +174,7 @@ public class CglibSubclassingInstantiationStrategy extends SimpleInstantiationSt
@Override
public boolean equals(Object other) {
return (getClass().equals(other.getClass()) &&
return (getClass() == other.getClass() &&
this.beanDefinition.equals(((CglibIdentitySupport) other).beanDefinition));
}
......
......@@ -184,7 +184,7 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter {
* @param objectName the name of the target object
*/
public DataBinder(Object target, String objectName) {
if (target != null && target.getClass().equals(javaUtilOptionalClass)) {
if (target != null && target.getClass() == javaUtilOptionalClass) {
this.target = OptionalUnwrapper.unwrap(target);
}
else {
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -78,7 +78,7 @@ public class ObjectError extends DefaultMessageSourceResolvable {
if (this == other) {
return true;
}
if (!(getClass().equals(other.getClass())) || !super.equals(other)) {
if (getClass() != other.getClass() || !super.equals(other)) {
return false;
}
ObjectError otherError = (ObjectError) other;
......
......@@ -376,7 +376,7 @@ public class MethodReference extends SpelNodeImpl {
}
public boolean isSuitable(Object value, TypeDescriptor target, List<TypeDescriptor> argumentTypes) {
return ((this.staticClass == null || this.staticClass.equals(value)) &&
return ((this.staticClass == null || this.staticClass == value) &&
this.target.equals(target) && this.argumentTypes.equals(argumentTypes));
}
......
......@@ -131,7 +131,7 @@ public class BeanPropertyRowMapper<T> implements RowMapper<T> {
initialize(mappedClass);
}
else {
if (!this.mappedClass.equals(mappedClass)) {
if (this.mappedClass != mappedClass) {
throw new InvalidDataAccessApiUsageException("The mapped class can not be reassigned to map to " +
mappedClass + " since it is already providing mapping for " + this.mappedClass);
}
......
......@@ -276,7 +276,7 @@ class CachedMessageProducer implements MessageProducer, QueueSender, TopicPublis
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
if (method.getName().equals("send") && args != null &&
completionListenerClass.equals(method.getParameterTypes()[args.length - 1])) {
completionListenerClass == method.getParameterTypes()[args.length - 1]) {
switch (args.length) {
case 2: // send(message, completionListener)
return sendWithCompletionListenerMethod.invoke(
......
......@@ -528,7 +528,7 @@ public class CachingConnectionFactory extends SingleConnectionFactory {
}
protected boolean destinationEquals(DestinationCacheKey otherKey) {
return (this.destination.getClass().equals(otherKey.destination.getClass()) &&
return (this.destination.getClass() == otherKey.destination.getClass() &&
(this.destination.equals(otherKey.destination) ||
getDestinationString().equals(otherKey.getDestinationString())));
}
......
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -28,19 +28,12 @@ import java.util.Iterator;
*/
public abstract class AbstractMessageCondition<T extends AbstractMessageCondition<T>> implements MessageCondition<T> {
/**
* @return the collection of objects the message condition is composed of
* .g. destination patterns), never {@code null}
*/
protected abstract Collection<?> getContent();
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj != null && getClass().equals(obj.getClass())) {
if (obj != null && getClass() == obj.getClass()) {
AbstractMessageCondition<?> other = (AbstractMessageCondition<?>) obj;
return getContent().equals(other.getContent());
}
......@@ -66,6 +59,13 @@ public abstract class AbstractMessageCondition<T extends AbstractMessageConditio
return builder.toString();
}
/**
* Return the collection of objects the message condition is composed of
* (e.g. destination patterns), never {@code null}.
*/
protected abstract Collection<?> getContent();
/**
* The notation to use when printing discrete items of content.
* For example " || " for URL patterns or " && " for param expressions.
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -236,9 +236,9 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
@Override
public boolean supports(Class<?> clazz) {
Assert.notNull(clazz, "'clazz' must not be null");
Assert.notNull(clazz, "Class must not be null");
if (this.targetClass != null) {
return this.targetClass.equals(clazz);
return (this.targetClass == clazz);
}
String[] mappedClasses = this.bindingFactory.getMappedClasses();
String className = clazz.getName();
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.web.client;
import java.io.IOException;
......@@ -52,7 +53,6 @@ public class MockMvcClientHttpRequestFactory implements ClientHttpRequestFactory
@Override
public ClientHttpRequest createRequest(final URI uri, final HttpMethod httpMethod) throws IOException {
return new MockClientHttpRequest(httpMethod, uri) {
@Override
public ClientHttpResponse executeInternal() throws IOException {
try {
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.web.client;
import java.io.IOException;
......@@ -29,7 +30,6 @@ public interface RequestMatcher {
/**
* Match the given request against some expectations.
*
* @param request the request to make assertions on
* @throws IOException in case of I/O errors
* @throws AssertionError if expectations are not met
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -46,6 +46,7 @@ class RequestMatcherClientHttpRequest extends MockAsyncClientHttpRequest impleme
this.requestMatchers.add(requestMatcher);
}
@Override
public ResponseActions andExpect(RequestMatcher requestMatcher) {
Assert.notNull(requestMatcher, "RequestMatcher is required");
......@@ -61,22 +62,19 @@ class RequestMatcherClientHttpRequest extends MockAsyncClientHttpRequest impleme
@Override
public ClientHttpResponse executeInternal() throws IOException {
if (this.requestMatchers.isEmpty()) {
throw new AssertionError("No request expectations to execute");
}
if (this.responseCreator == null) {
throw new AssertionError("No ResponseCreator was set up. Add it after request expectations, "
+ "e.g. MockRestServiceServer.expect(requestTo(\"/foo\")).andRespond(withSuccess())");
throw new AssertionError("No ResponseCreator was set up. Add it after request expectations, " +
"e.g. MockRestServiceServer.expect(requestTo(\"/foo\")).andRespond(withSuccess())");
}
for (RequestMatcher requestMatcher : this.requestMatchers) {
requestMatcher.match(this);
}
setResponse(this.responseCreator.createResponse(this));
return super.executeInternal();
}
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.web.client;
/**
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.web.client;
import java.io.IOException;
......
......@@ -131,7 +131,7 @@ public class HttpEntity<T> {
if (this == other) {
return true;
}
if (other == null || !other.getClass().equals(getClass())) {
if (other == null || other.getClass() != getClass()) {
return false;
}
HttpEntity<?> otherEntity = (HttpEntity<?>) other;
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -23,7 +23,8 @@ import org.springframework.http.HttpMethod;
import org.springframework.util.Assert;
/**
* Abstract base class for {@link ClientHttpRequestFactory} implementations that decorate another request factory.
* Abstract base class for {@link ClientHttpRequestFactory} implementations
* that decorate another request factory.
*
* @author Arjen Poutsma
* @since 3.1
......@@ -34,11 +35,11 @@ public abstract class AbstractClientHttpRequestFactoryWrapper implements ClientH
/**
* Creates a {@code AbstractClientHttpRequestFactoryWrapper} wrapping the given request factory.
* Create a {@code AbstractClientHttpRequestFactoryWrapper} wrapping the given request factory.
* @param requestFactory the request factory to be wrapped
*/
protected AbstractClientHttpRequestFactoryWrapper(ClientHttpRequestFactory requestFactory) {
Assert.notNull(requestFactory, "'requestFactory' must not be null");
Assert.notNull(requestFactory, "ClientHttpRequestFactory must not be null");
this.requestFactory = requestFactory;
}
......@@ -50,12 +51,12 @@ public abstract class AbstractClientHttpRequestFactoryWrapper implements ClientH
*/
@Override
public final ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
return createRequest(uri, httpMethod, requestFactory);
return createRequest(uri, httpMethod, this.requestFactory);
}
/**
* Create a new {@link ClientHttpRequest} for the specified URI and HTTP method by using the
* passed-on request factory.
* Create a new {@link ClientHttpRequest} for the specified URI and HTTP method
* by using the passed-on request factory.
* <p>Called from {@link #createRequest(URI, HttpMethod)}.
* @param uri the URI to create a request for
* @param httpMethod the HTTP method to execute
......
......@@ -190,12 +190,14 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
HttpClient client = getHttpClient();
Assert.state(client != null, "Synchronous execution requires an HttpClient to be set");
HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri);
postProcessHttpRequest(httpRequest);
HttpContext context = createHttpContext(httpMethod, uri);
if (context == null) {
context = HttpClientContext.create();
}
// Request configuration not set in the context
if (context.getAttribute(HttpClientContext.REQUEST_CONFIG) == null) {
// Use request configuration given by the user, when available
......@@ -210,6 +212,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
}
}
if (this.bufferRequestBody) {
return new HttpComponentsClientHttpRequest(client, httpRequest, context);
}
......@@ -285,20 +288,20 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest
switch (httpMethod) {
case GET:
return new HttpGet(uri);
case DELETE:
return new HttpDelete(uri);
case HEAD:
return new HttpHead(uri);
case OPTIONS:
return new HttpOptions(uri);
case POST:
return new HttpPost(uri);
case PUT:
return new HttpPut(uri);
case TRACE:
return new HttpTrace(uri);
case PATCH:
return new HttpPatch(uri);
case DELETE:
return new HttpDelete(uri);
case OPTIONS:
return new HttpOptions(uri);
case TRACE:
return new HttpTrace(uri);
default:
throw new IllegalArgumentException("Invalid HTTP method: " + httpMethod);
}
......
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -42,52 +42,51 @@ class InterceptingClientHttpRequest extends AbstractBufferingClientHttpRequest {
private URI uri;
protected InterceptingClientHttpRequest(ClientHttpRequestFactory requestFactory,
List<ClientHttpRequestInterceptor> interceptors,
URI uri,
HttpMethod method) {
List<ClientHttpRequestInterceptor> interceptors, URI uri, HttpMethod method) {
this.requestFactory = requestFactory;
this.interceptors = interceptors;
this.method = method;
this.uri = uri;
}
@Override
public HttpMethod getMethod() {
return method;
return this.method;
}
@Override
public URI getURI() {
return uri;
return this.uri;
}
@Override
protected final ClientHttpResponse executeInternal(HttpHeaders headers, byte[] bufferedOutput) throws IOException {
RequestExecution requestExecution = new RequestExecution();
InterceptingRequestExecution requestExecution = new InterceptingRequestExecution();
return requestExecution.execute(this, bufferedOutput);
}
private class RequestExecution implements ClientHttpRequestExecution {
private class InterceptingRequestExecution implements ClientHttpRequestExecution {
private final Iterator<ClientHttpRequestInterceptor> iterator;
private RequestExecution() {
public InterceptingRequestExecution() {
this.iterator = interceptors.iterator();
}
@Override
public ClientHttpResponse execute(HttpRequest request, byte[] body) throws IOException {
if (iterator.hasNext()) {
ClientHttpRequestInterceptor nextInterceptor = iterator.next();
if (this.iterator.hasNext()) {
ClientHttpRequestInterceptor nextInterceptor = this.iterator.next();
return nextInterceptor.intercept(request, body, this);
}
else {
ClientHttpRequest delegate = requestFactory.createRequest(request.getURI(), request.getMethod());
delegate.getHeaders().putAll(request.getHeaders());
if (body.length > 0) {
StreamUtils.copy(body, delegate.getBody());
}
......
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -32,20 +32,22 @@ public class InterceptingClientHttpRequestFactory extends AbstractClientHttpRequ
private final List<ClientHttpRequestInterceptor> interceptors;
/**
* Creates a new instance of the {@code InterceptingClientHttpRequestFactory} with the given parameters.
*
* Create a new instance of the {@code InterceptingClientHttpRequestFactory} with the given parameters.
* @param requestFactory the request factory to wrap
* @param interceptors the interceptors that are to be applied. Can be {@code null}.
* @param interceptors the interceptors that are to be applied (can be {@code null})
*/
public InterceptingClientHttpRequestFactory(ClientHttpRequestFactory requestFactory,
List<ClientHttpRequestInterceptor> interceptors) {
super(requestFactory);
this.interceptors = interceptors != null ? interceptors : Collections.<ClientHttpRequestInterceptor>emptyList();
this.interceptors = (interceptors != null ? interceptors : Collections.<ClientHttpRequestInterceptor>emptyList());
}
@Override
protected ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod, ClientHttpRequestFactory requestFactory) {
return new InterceptingClientHttpRequest(requestFactory, interceptors, uri, httpMethod);
return new InterceptingClientHttpRequest(requestFactory, this.interceptors, uri, httpMethod);
}
}
......@@ -39,7 +39,6 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.http.HttpMethod;
import org.springframework.util.Assert;
/**
* {@link org.springframework.http.client.ClientHttpRequestFactory} implementation that
* uses <a href="http://netty.io/">Netty 4</a> to create requests.
......@@ -69,12 +68,12 @@ public class Netty4ClientHttpRequestFactory implements ClientHttpRequestFactory,
private SslContext sslContext;
private volatile Bootstrap bootstrap;
private int connectTimeout = -1;
private int readTimeout = -1;
private volatile Bootstrap bootstrap;
/**
* Create a new {@code Netty4ClientHttpRequestFactory} with a default
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -136,6 +136,7 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory,
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
HttpURLConnection connection = openConnection(uri.toURL(), this.proxy);
prepareConnection(connection, httpMethod.name());
if (this.bufferRequestBody) {
return new SimpleBufferingClientHttpRequest(connection, this.outputStreaming);
}
......@@ -146,20 +147,23 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory,
/**
* {@inheritDoc}
* <p>Setting the {@link #setTaskExecutor(org.springframework.core.task.AsyncListenableTaskExecutor) taskExecutor} property
* is required before calling this method.
* <p>Setting the {@link #setTaskExecutor taskExecutor} property is required before calling this method.
*/
@Override
public AsyncClientHttpRequest createAsyncRequest(URI uri, HttpMethod httpMethod) throws IOException {
Assert.state(this.taskExecutor != null, "Asynchronous execution requires an AsyncTaskExecutor to be set");
Assert.state(this.taskExecutor != null,
"Asynchronous execution requires an AsyncTaskExecutor to be set");
HttpURLConnection connection = openConnection(uri.toURL(), this.proxy);
prepareConnection(connection, httpMethod.name());
if (this.bufferRequestBody) {
return new SimpleBufferingAsyncClientHttpRequest(connection, this.outputStreaming, this.taskExecutor);
return new SimpleBufferingAsyncClientHttpRequest(
connection, this.outputStreaming, this.taskExecutor);
}
else {
return new SimpleStreamingAsyncClientHttpRequest(connection, this.chunkSize,
this.outputStreaming, this.taskExecutor);
return new SimpleStreamingAsyncClientHttpRequest(
connection, this.chunkSize, this.outputStreaming, this.taskExecutor);
}
}
......@@ -192,20 +196,24 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory,
if (this.readTimeout >= 0) {
connection.setReadTimeout(this.readTimeout);
}
connection.setDoInput(true);
if ("GET".equals(httpMethod)) {
connection.setInstanceFollowRedirects(true);
}
else {
connection.setInstanceFollowRedirects(false);
}
if ("PUT".equals(httpMethod) || "POST".equals(httpMethod) ||
if ("POST".equals(httpMethod) || "PUT".equals(httpMethod) ||
"PATCH".equals(httpMethod) || "DELETE".equals(httpMethod)) {
connection.setDoOutput(true);
}
else {
connection.setDoOutput(false);
}
connection.setRequestMethod(httpMethod);
}
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -24,8 +24,10 @@ import org.springframework.http.HttpRequest;
import org.springframework.util.Assert;
/**
* Provides a convenient implementation of the {@link HttpRequest} interface that can be overridden to adapt the
* request. Methods default to calling through to the wrapped request object.
* Provides a convenient implementation of the {@link HttpRequest} interface
* that can be overridden to adapt the request.
*
* <p>These methods default to calling through to the wrapped request object.
*
* @author Arjen Poutsma
* @since 3.1
......@@ -36,24 +38,24 @@ public class HttpRequestWrapper implements HttpRequest {
/**
* Creates a new {@code HttpRequest} wrapping the given request object.
*
* Create a new {@code HttpRequest} wrapping the given request object.
* @param request the request object to be wrapped
*/
public HttpRequestWrapper(HttpRequest request) {
Assert.notNull(request, "'request' must not be null");
Assert.notNull(request, "HttpRequest must not be null");
this.request = request;
}
/**
* Returns the wrapped request.
* Return the wrapped request.
*/
public HttpRequest getRequest() {
return request;
return this.request;
}
/**
* Returns the method of the wrapped request.
* Return the method of the wrapped request.
*/
@Override
public HttpMethod getMethod() {
......@@ -61,7 +63,7 @@ public class HttpRequestWrapper implements HttpRequest {
}
/**
* Returns the URI of the wrapped request.
* Return the URI of the wrapped request.
*/
@Override
public URI getURI() {
......@@ -69,7 +71,7 @@ public class HttpRequestWrapper implements HttpRequest {
}
/**
* Returns the headers of the wrapped request.
* Return the headers of the wrapped request.
*/
@Override
public HttpHeaders getHeaders() {
......
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -41,36 +41,39 @@ abstract class AbstractMediaTypeExpression implements Comparable<AbstractMediaTy
private final boolean isNegated;
AbstractMediaTypeExpression(String expression) {
if (expression.startsWith("!")) {
isNegated = true;
this.isNegated = true;
expression = expression.substring(1);
}
else {
isNegated = false;
this.isNegated = false;
}
this.mediaType = MediaType.parseMediaType(expression);
}
AbstractMediaTypeExpression(MediaType mediaType, boolean negated) {
this.mediaType = mediaType;
isNegated = negated;
this.isNegated = negated;
}
@Override
public MediaType getMediaType() {
return mediaType;
return this.mediaType;
}
@Override
public boolean isNegated() {
return isNegated;
return this.isNegated;
}
public final boolean match(HttpServletRequest request) {
try {
boolean match = matchMediaType(request);
return !isNegated ? match : !match;
return (!this.isNegated ? match : !match);
}
catch (HttpMediaTypeException ex) {
return false;
......@@ -79,6 +82,7 @@ abstract class AbstractMediaTypeExpression implements Comparable<AbstractMediaTy
protected abstract boolean matchMediaType(HttpServletRequest request) throws HttpMediaTypeException;
@Override
public int compareTo(AbstractMediaTypeExpression other) {
return MediaType.SPECIFICITY_COMPARATOR.compare(this.getMediaType(), other.getMediaType());
......@@ -89,25 +93,25 @@ abstract class AbstractMediaTypeExpression implements Comparable<AbstractMediaTy
if (this == obj) {
return true;
}
if (obj != null && getClass().equals(obj.getClass())) {
if (obj != null && getClass() == obj.getClass()) {
AbstractMediaTypeExpression other = (AbstractMediaTypeExpression) obj;
return (this.mediaType.equals(other.mediaType)) && (this.isNegated == other.isNegated);
return (this.mediaType.equals(other.mediaType) && this.isNegated == other.isNegated);
}
return false;
}
@Override
public int hashCode() {
return mediaType.hashCode();
return this.mediaType.hashCode();
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
if (isNegated) {
if (this.isNegated) {
builder.append('!');
}
builder.append(mediaType.toString());
builder.append(this.mediaType.toString());
return builder.toString();
}
......
......@@ -33,7 +33,7 @@ public abstract class AbstractRequestCondition<T extends AbstractRequestConditio
if (this == obj) {
return true;
}
if (obj != null && getClass().equals(obj.getClass())) {
if (obj != null && getClass() == obj.getClass()) {
AbstractRequestCondition<?> other = (AbstractRequestCondition<?>) obj;
return getContent().equals(other.getContent());
}
......
......@@ -158,7 +158,7 @@ public class PathResourceResolver extends AbstractResourceResolver {
}
private boolean isResourceUnderLocation(Resource resource, Resource location) throws IOException {
if (!resource.getClass().equals(location.getClass())) {
if (resource.getClass() != location.getClass()) {
return false;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册