Skip to content

Commit 1c27559

Browse files
re-thcSentryMan
andauthored
Optimize helidon optionals - io.helidon.common.mapper.OptionalValue (#505)
* Optimize helidon optionals Helidon docs says that `Optional` is expensive and don't use it unless you need to. In the generator, optionals are more of an implementation detail and null or the default value is returned. For better performance, this PR replaces optionals with contains / get as Helidon suggests. * fix build --------- Co-authored-by: Josiah Noel <[email protected]>
1 parent 99aae32 commit 1c27559

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/ControllerWriter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,11 @@ private void writeClassStart() {
202202

203203
if (reader.isIncludeValidator()) {
204204
writer.append(" private String language(ServerRequest req) {").eol();
205-
writer.append(" return req.headers().first(HEADER_ACCEPT_LANGUAGE).orElse(null);").eol();
205+
writer.append(" var headers = req.headers();").eol();
206+
writer.append(" if (headers.contains(HEADER_ACCEPT_LANGUAGE)) {").eol();
207+
writer.append(" return headers.get(HEADER_ACCEPT_LANGUAGE).get();").eol();
208+
writer.append(" }").eol();
209+
writer.append(" return null;").eol();
206210
writer.append(" }").eol().eol();
207211
}
208212
}

http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/NimaPlatformAdapter.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,16 @@ private void addRoleImports(List<String> roles, ControllerReader controller) {
6767
@Override
6868
public void writeReadParameter(Append writer, ParamType paramType, String paramName) {
6969
switch (paramType) {
70-
case PATHPARAM -> writer.append("pathParams.first(\"%s\").get()", paramName);
70+
case PATHPARAM -> writer.append("pathParams.contains(\"%s\") ? pathParams.get(\"%s\") : null", paramName, paramName);
7171

72-
case QUERYPARAM -> writer.append("req.query().first(\"%s\").orElse(null)", paramName);
72+
case QUERYPARAM -> writer.append("req.query().contains(\"%s\") ? req.query().get(\"%s\") : null", paramName, paramName);
7373

74-
case FORMPARAM -> writer.append("formParams.first(\"%s\").orElse(null)", paramName);
74+
case FORMPARAM -> writer.append("formParams.contains(\"%s\") ? formParams.get(\"%s\") : null", paramName, paramName);
7575

7676
case HEADER -> writer.append(
7777
"req.headers().value(HeaderNames.create(\"%s\")).orElse(null)", paramName);
7878

79-
case COOKIE -> writer.append("req.headers().cookies().first(\"%s\").orElse(null)", paramName);
79+
case COOKIE -> writer.append("req.headers().cookies().contains(\"%s\") ? req.headers().cookies().get(\"%s\") : null", paramName, paramName);
8080

8181
default -> writer.append("null // TODO req.%s().param(\"%s\")", paramType.type(), paramName);
8282
}
@@ -86,19 +86,19 @@ public void writeReadParameter(Append writer, ParamType paramType, String paramN
8686
public void writeReadParameter(Append writer, ParamType paramType, String paramName, String paramDefault) {
8787
switch (paramType) {
8888
case PATHPARAM -> writer.append(
89-
"pathParams.first(\"%s\").orElse(\"%s\")", paramName, paramDefault);
89+
"pathParams.contains(\"%s\") ? pathParams.get(\"%s\") : \"%s\"", paramName, paramName, paramDefault);
9090

9191
case QUERYPARAM -> writer.append(
92-
"req.query().first(\"%s\").orElse(\"%s\")", paramName, paramDefault);
92+
"req.query().contains(\"%s\") ? req.query().get(\"%s\") : \"%s\"", paramName, paramName, paramDefault);
9393

9494
case FORMPARAM -> writer.append(
95-
"formParams.first(\"%s\").orElse(\"%s\")", paramName, paramDefault);
95+
"formParams.contains(\"%s\") ? formParams.get(\"%s\") : \"%s\"", paramName, paramName, paramDefault);
9696

9797
case HEADER -> writer.append(
9898
"req.headers().value(Http.Header.create(\"%s\").orElse(\"%s\")", paramName, paramDefault);
9999

100100
case COOKIE -> writer.append(
101-
"req.headers().cookies().first(\"%s\").orElse(\"%s\")", paramName, paramDefault);
101+
"req.headers().cookies().contains(\"%s\") ? req.headers().cookies().get(\"%s\") : \"%s\"", paramName, paramName, paramDefault);
102102

103103
default -> writer.append("null // TODO req.%s().param(\"%s\")", paramType.type(), paramName);
104104
}

0 commit comments

Comments
 (0)