Skip to content

Commit 4053d1b

Browse files
authored
Updates header type hierarchy to make HeaderValueCached not writeable. Separates base header classes into writeable and non-writeable. Prevents unnecessary copying of cached headers. (#8000)
1 parent 7e72ac8 commit 4053d1b

8 files changed

+30
-14
lines changed

http/http/src/main/java/io/helidon/http/HeaderValueArray.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22-
class HeaderValueArray extends HeaderValueBase {
22+
class HeaderValueArray extends HeaderWritableValueBase {
2323
private final String[] originalValues;
2424
private List<String> values;
2525

http/http/src/main/java/io/helidon/http/HeaderValueBase.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import io.helidon.common.mapper.MapperManager;
2626
import io.helidon.common.mapper.Value;
2727

28-
abstract class HeaderValueBase implements HeaderWriteable {
28+
abstract class HeaderValueBase implements Header {
2929
private static final String[] QUALIFIER = new String[] {"http", "header"};
3030
private final HeaderName name;
3131
private final String actualName;
@@ -41,9 +41,6 @@ abstract class HeaderValueBase implements HeaderWriteable {
4141
this.firstValue = value;
4242
}
4343

44-
@Override
45-
public abstract HeaderWriteable addValue(String value);
46-
4744
@Override
4845
public String name() {
4946
return actualName;

http/http/src/main/java/io/helidon/http/HeaderValueCached.java

-5
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ public void writeHttp1Header(BufferData buffer) {
5454
buffer.write(cachedHttp1Header);
5555
}
5656

57-
@Override
58-
public HeaderWriteable addValue(String value) {
59-
throw new UnsupportedOperationException("Cannot change values of a cached header " + name());
60-
}
61-
6257
@Override
6358
public List<String> allValues() {
6459
return List.of(value);

http/http/src/main/java/io/helidon/http/HeaderValueCopy.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22-
class HeaderValueCopy extends HeaderValueBase {
22+
class HeaderValueCopy extends HeaderWritableValueBase {
2323
private final Header original;
2424
private List<String> values;
2525

http/http/src/main/java/io/helidon/http/HeaderValueLazy.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import io.helidon.common.buffers.LazyString;
2323

24-
class HeaderValueLazy extends HeaderValueBase {
24+
class HeaderValueLazy extends HeaderWritableValueBase {
2525
private final LazyString value;
2626
private List<String> values;
2727

http/http/src/main/java/io/helidon/http/HeaderValueList.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.util.Collection;
2121
import java.util.List;
2222

23-
class HeaderValueList extends HeaderValueBase {
23+
class HeaderValueList extends HeaderWritableValueBase {
2424
private List<String> values;
2525

2626
HeaderValueList(HeaderName name, boolean changing, boolean sensitive, Collection<String> values) {

http/http/src/main/java/io/helidon/http/HeaderValueSingle.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22-
class HeaderValueSingle extends HeaderValueBase {
22+
class HeaderValueSingle extends HeaderWritableValueBase {
2323
private final String value;
2424
private List<String> values;
2525

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (c) 2023 Oracle and/or its affiliates.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.helidon.http;
18+
19+
abstract class HeaderWritableValueBase extends HeaderValueBase implements HeaderWriteable {
20+
21+
HeaderWritableValueBase(HeaderName name, boolean changing, boolean sensitive, String value) {
22+
super(name, changing, sensitive, value);
23+
}
24+
}

0 commit comments

Comments
 (0)