Polishing contribution

Closes gh-29247
This commit is contained in:
rstoyanchev 2022-10-03 17:23:02 +01:00
parent b5adae2086
commit 4d5b0c91a3
4 changed files with 37 additions and 70 deletions

View File

@ -19,12 +19,11 @@ package org.springframework.http.client.reactive;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.StreamSupport;
import io.netty5.handler.codec.http.headers.HttpHeaders;
@ -38,7 +37,7 @@ import org.springframework.util.MultiValueMap;
*
* <p>There is a duplicate of this class in the server package!
*
* This class is based on {@link NettyHeadersAdapter}.
* <p>This class is based on {@link NettyHeadersAdapter}.
*
* @author Violeta Georgieva
* @since 6.0
@ -57,7 +56,7 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Nullable
public String getFirst(String key) {
CharSequence value = this.headers.get(key);
return value != null ? value.toString() : null;
return (value != null ? value.toString() : null);
}
@Override
@ -117,17 +116,19 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public boolean containsValue(Object value) {
return (value instanceof String &&
StreamSupport.stream(
Spliterators.spliteratorUnknownSize(this.headers.iterator(), Spliterator.ORDERED), false)
return (value instanceof CharSequence &&
StreamSupport.stream(this.headers.spliterator(), false)
.anyMatch(entry -> value.equals(entry.getValue())));
}
@Override
@Nullable
public List<String> get(Object key) {
if (containsKey(key)) {
return getAll(this.headers.valuesIterator((CharSequence) key));
Iterator<CharSequence> iterator = this.headers.valuesIterator((CharSequence) key);
if (iterator.hasNext()) {
List<String> result = new ArrayList<>();
iterator.forEachRemaining(value -> result.add(value.toString()));
return result;
}
return null;
}
@ -135,7 +136,7 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Nullable
@Override
public List<String> put(String key, @Nullable List<String> value) {
List<String> previousValues = getAll(this.headers.valuesIterator(key));
List<String> previousValues = get(key);
this.headers.set(key, value);
return previousValues;
}
@ -144,7 +145,7 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public List<String> remove(Object key) {
if (key instanceof String headerName) {
List<String> previousValues = getAll(this.headers.valuesIterator(headerName));
List<String> previousValues = get(headerName);
this.headers.remove(headerName);
return previousValues;
}
@ -168,8 +169,9 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public Collection<List<String>> values() {
return this.headers.names().stream()
.map(key -> getAll(this.headers.valuesIterator(key))).toList();
List<List<String>> result = new ArrayList<>(this.headers.size());
forEach((key, value) -> result.add(value));
return result;
}
@Override
@ -194,19 +196,6 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
}
@Nullable
private static List<String> getAll(Iterator<CharSequence> valuesIterator) {
if (!valuesIterator.hasNext()) {
return null;
}
List<String> result = new ArrayList<>();
while (valuesIterator.hasNext()) {
result.add(valuesIterator.next().toString());
}
return result;
}
private class EntryIterator implements Iterator<Entry<String, List<String>>> {
private final Iterator<CharSequence> names = headers.names().iterator();
@ -238,12 +227,8 @@ class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public List<String> getValue() {
List<String> result = new ArrayList<>();
Iterator<CharSequence> valuesIterator = headers.valuesIterator(this.key);
while (valuesIterator.hasNext()) {
result.add(valuesIterator.next().toString());
}
return result;
List<String> values = get(this.key);
return (values != null ? values : Collections.emptyList());
}
@Override

View File

@ -19,12 +19,11 @@ package org.springframework.http.server.reactive;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.StreamSupport;
import io.netty5.handler.codec.http.headers.HttpHeaders;
@ -55,7 +54,7 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Nullable
public String getFirst(String key) {
CharSequence value = this.headers.get(key);
return value != null ? value.toString() : null;
return (value != null ? value.toString() : null);
}
@Override
@ -116,16 +115,18 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public boolean containsValue(Object value) {
return (value instanceof String &&
StreamSupport.stream(
Spliterators.spliteratorUnknownSize(this.headers.iterator(), Spliterator.ORDERED), false)
StreamSupport.stream(this.headers.spliterator(), false)
.anyMatch(entry -> value.equals(entry.getValue())));
}
@Override
@Nullable
public List<String> get(Object key) {
if (containsKey(key)) {
return getAll(this.headers.valuesIterator((CharSequence) key));
Iterator<CharSequence> iterator = this.headers.valuesIterator((CharSequence) key);
if (iterator.hasNext()) {
List<String> result = new ArrayList<>();
iterator.forEachRemaining(value -> result.add(value.toString()));
return result;
}
return null;
}
@ -133,7 +134,7 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Nullable
@Override
public List<String> put(String key, @Nullable List<String> value) {
List<String> previousValues = getAll(this.headers.valuesIterator(key));
List<String> previousValues = get(key);
this.headers.set(key, value);
return previousValues;
}
@ -142,7 +143,7 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public List<String> remove(Object key) {
if (key instanceof String headerName) {
List<String> previousValues = getAll(this.headers.valuesIterator(headerName));
List<String> previousValues = get(headerName);
this.headers.remove(headerName);
return previousValues;
}
@ -166,8 +167,9 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public Collection<List<String>> values() {
return this.headers.names().stream()
.map(key -> getAll(this.headers.valuesIterator(key))).toList();
List<List<String>> result = new ArrayList<>(this.headers.size());
forEach((key, value) -> result.add(value));
return result;
}
@Override
@ -192,19 +194,6 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
}
@Nullable
private static List<String> getAll(Iterator<CharSequence> valuesIterator) {
if (!valuesIterator.hasNext()) {
return null;
}
List<String> result = new ArrayList<>();
while (valuesIterator.hasNext()) {
result.add(valuesIterator.next().toString());
}
return result;
}
private class EntryIterator implements Iterator<Entry<String, List<String>>> {
private final Iterator<CharSequence> names = headers.names().iterator();
@ -236,12 +225,8 @@ final class Netty5HeadersAdapter implements MultiValueMap<String, String> {
@Override
public List<String> getValue() {
List<String> result = new ArrayList<>();
Iterator<CharSequence> valuesIterator = headers.valuesIterator(this.key);
while (valuesIterator.hasNext()) {
result.add(valuesIterator.next().toString());
}
return result;
List<String> values = get(this.key);
return (values != null ? values : Collections.emptyList());
}
@Override

View File

@ -80,9 +80,9 @@ class ReactorNetty2ServerHttpRequest extends AbstractServerHttpRequest {
private static URI resolveBaseUrl(HttpServerRequest request) throws URISyntaxException {
String scheme = getScheme(request);
CharSequence headerCS = request.requestHeaders().get(HttpHeaderNames.HOST);
if (headerCS != null) {
String header = headerCS.toString();
CharSequence charSequence = request.requestHeaders().get(HttpHeaderNames.HOST);
if (charSequence != null) {
String header = charSequence.toString();
final int portIndex;
if (header.startsWith("[")) {
portIndex = header.indexOf(':', header.indexOf(']'));

View File

@ -157,11 +157,8 @@ public class ReactorNetty2WebSocketClient implements WebSocketClient {
private HttpHeaders toHttpHeaders(WebsocketInbound inbound) {
HttpHeaders headers = new HttpHeaders();
io.netty5.handler.codec.http.headers.HttpHeaders nettyHeaders = inbound.headers();
nettyHeaders.forEach(entry -> {
CharSequence name = entry.getKey();
headers.put(name.toString(), getAll(nettyHeaders.valuesIterator(name)));
});
inbound.headers().iterator().forEachRemaining(entry ->
headers.add(entry.getKey().toString(), entry.getValue().toString()));
return headers;
}