Skip to content

Commit 129179e

Browse files
committed
- make sure kotlin implementation works
1 parent c05aacd commit 129179e

4 files changed

Lines changed: 105 additions & 61 deletions

File tree

modules/jooby-apt/src/main/java/io/jooby/internal/apt/MvcRoute.java

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -455,9 +455,11 @@ private List<String> generateTrpcMethod(boolean kt, TrpcMethod trpcMethod) {
455455
var buffer = new ArrayList<String>();
456456

457457
var returnTypeString =
458-
"io.jooby.trpc.TrpcResponse<" + type(kt, getReturnType().toString()) + ">";
458+
"io.jooby.trpc.TrpcResponse<"
459+
+ (returnType.isVoid() ? (kt ? "Unit" : "Void") : type(kt, returnType.toString()))
460+
+ ">";
459461

460-
methodCallHeader(kt, "ctx", trpcMethod.name, buffer, "", returnTypeString, true);
462+
var nullable = methodCallHeader(kt, "ctx", trpcMethod.name, buffer, "", returnTypeString, true);
461463
var hasArgs = !parameters.isEmpty();
462464
if (hasArgs) {
463465
buffer.add(
@@ -476,7 +478,7 @@ private List<String> generateTrpcMethod(boolean kt, TrpcMethod trpcMethod) {
476478
"input = ctx.query(",
477479
string("input"),
478480
").",
479-
parameters.isEmpty() ? "valueOrNull" : "value",
481+
"value",
480482
"()",
481483
semicolon(kt)));
482484
if (kt) {
@@ -503,8 +505,8 @@ private List<String> generateTrpcMethod(boolean kt, TrpcMethod trpcMethod) {
503505
buffer.add(
504506
statement(
505507
indent(2),
506-
"if (input.size < 2 || input[0] != '['.toByte() || input[input.size - 1] !="
507-
+ " ']'.toByte()) throw IllegalArgumentException(",
508+
"if (input.size < 2 || input[0] != '['.code.toByte() || input[input.size - 1] !="
509+
+ " ']'.code.toByte()) throw IllegalArgumentException(",
508510
string("tRPC body must be a JSON array (tuple)"),
509511
")"));
510512
} else {
@@ -533,30 +535,38 @@ private List<String> generateTrpcMethod(boolean kt, TrpcMethod trpcMethod) {
533535
buffer.addAll(argumentStatements);
534536
}
535537
controllerVar(kt, buffer, indent);
536-
var cast = getReturnType().getArgumentsString(kt, false, Set.of(TypeKind.TYPEVAR));
537-
var kotlinNotEnoughTypeInformation = !cast.isEmpty() && kt ? "<Any>" : "";
538538
var call =
539539
of(
540540
"c.",
541541
this.method.getSimpleName(),
542-
kotlinNotEnoughTypeInformation,
542+
"",
543543
arguments.stream().collect(Collectors.joining(", ", "(", ")")));
544-
if (!cast.isEmpty()) {
545-
setUncheckedCast(true);
546-
call = kt ? call + " as " + returnTypeString : "(" + returnTypeString + ") " + call;
547-
}
548544
if (isVoid) {
549545
buffer.add(statement(indent(indent), call, semicolon(kt)));
546+
buffer.add(
547+
statement(
548+
indent(indent), "return ", "io.jooby.trpc.TrpcResponse.empty()", semicolon(kt)));
550549
} else {
551-
buffer.add(statement(indent(indent), var(kt), "result = ", call, semicolon(kt)));
550+
if (kt) {
551+
var cast = !returnType.getArguments().isEmpty();
552+
buffer.add(
553+
statement(
554+
indent(indent),
555+
"val result = ",
556+
call,
557+
cast ? " as " + type(true, returnType.toString()) : ""));
558+
buffer.add(
559+
statement(
560+
indent(indent),
561+
"return ",
562+
"io.jooby.trpc.TrpcResponse.of(result",
563+
nullable ? "!!" : "",
564+
")"));
565+
} else {
566+
buffer.add(statement(indent(indent), "var result = ", call, ";"));
567+
buffer.add(statement(indent(indent), "return ", "io.jooby.trpc.TrpcResponse.of(result);"));
568+
}
552569
}
553-
buffer.add(
554-
statement(
555-
indent(indent),
556-
"return ",
557-
"io.jooby.trpc.TrpcResponse.",
558-
isVoid ? "empty()" : "of(result)",
559-
semicolon(kt)));
560570
if (hasArgs) {
561571
buffer.add(statement(indent(2), "}"));
562572
}
@@ -569,11 +579,11 @@ private List<String> generateTrpcParameter(boolean kt, Consumer<String> argument
569579
var statements = new ArrayList<String>();
570580
for (var parameter : parameters) {
571581
var paramenterName = parameter.getName();
572-
var type = parameter.getType().getRawType().toString();
582+
var type = type(kt, parameter.getType().toString());
573583

574584
boolean isNullable = parameter.isNullable(kt);
575585

576-
switch (type) {
586+
switch (parameter.getType().getRawType().toString()) {
577587
case "io.jooby.Context":
578588
{
579589
arguments.accept("ctx");
@@ -752,7 +762,7 @@ private List<String> generateTrpcParameter(boolean kt, Consumer<String> argument
752762
"val ",
753763
paramenterName,
754764
"Decoder: io.jooby.trpc.TrpcDecoder<",
755-
parameter.getType().toString(),
765+
type,
756766
"> = parser.decoder(",
757767
parameter.getType().toSourceCode(kt),
758768
")",
@@ -788,7 +798,7 @@ private List<String> generateTrpcParameter(boolean kt, Consumer<String> argument
788798
statement(
789799
indent(4),
790800
"io.jooby.trpc.TrpcDecoder<",
791-
parameter.getType().toString(),
801+
type,
792802
"> ",
793803
paramenterName,
794804
"Decoder = parser.decoder(",

modules/jooby-apt/src/main/java/io/jooby/internal/apt/TypeDefinition.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,6 @@ public String toSourceCode(boolean kt) {
4444
return toSourceCode(this, kt, false);
4545
}
4646

47-
public String toJacksonTypeReference(boolean kt) {
48-
if (isParameterizedType()) {
49-
var buffer = new StringBuilder();
50-
if (!kt) {
51-
buffer.append("new ");
52-
}
53-
buffer.append("tools.jackson.core.type.TypeReference<").append(type).append(">() {}");
54-
return buffer.toString();
55-
} else {
56-
return CodeBlock.type(kt, getRawType().toString()) + clazz(kt);
57-
}
58-
}
59-
6047
public String getArgumentsString(boolean kt, boolean convertTypeVar, Set<TypeKind> kinds) {
6148
List<TypeDefinition> arguments = getArguments();
6249
var filtered =

modules/jooby-jackson3/src/test/java/io/jooby/jackson3/PrimitiveTest.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Jooby https://jooby.io
3+
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
4+
* Copyright 2014 Edgar Espina
5+
*/
6+
package i3863
7+
8+
import io.jooby.annotation.Trpc
9+
import io.jooby.annotation.Trpc.Mutation
10+
import io.jooby.i3863.Metadata
11+
import io.jooby.i3863.Movie
12+
import java.util.stream.Collectors
13+
14+
@Trpc("movies")
15+
class KMovieService {
16+
private val database =
17+
listOf<Movie?>(Movie(1, "The Godfather", 1972), Movie(2, "Pulp Fiction", 1994))
18+
19+
/** Procedure: movies.create Takes a single complex object. */
20+
@Mutation
21+
fun create(movie: Movie?): Movie? {
22+
// In a real app, save to DB. For now, just return it.
23+
return movie
24+
}
25+
26+
@Mutation fun resetIndex() {}
27+
28+
/** Procedure: movies.bulkCreate Takes a List of complex objects. */
29+
@Trpc.Query
30+
fun bulkCreate(movies: List<Movie>): List<String> {
31+
return movies
32+
.stream()
33+
.map<String?> { m: Movie -> "Created: " + m.title }
34+
.collect(Collectors.toList())
35+
}
36+
37+
/** Procedure: movies.ping */
38+
@Trpc.Query
39+
fun ping(): String {
40+
return "pong"
41+
}
42+
43+
/** Procedure: movies.getById Single primitive argument */
44+
@Trpc.Query
45+
fun getById(id: Int): Movie? {
46+
return database.stream().filter { m: Movie? -> m!!.id == id }.findFirst().orElse(null)
47+
}
48+
49+
/** Procedure: movies.search Multi-argument (Tuple) */
50+
@Trpc.Query
51+
fun search(title: String, year: Int?): List<Movie?> {
52+
return database
53+
.stream()
54+
.filter { m: Movie? -> m!!.title.contains(title) && (year == null || m.year == year) }
55+
.toList()
56+
}
57+
58+
/** Procedure: movies.addReview Mix of String and int (Mutation) */
59+
@Mutation
60+
fun addReview(movieTitle: String, stars: Int, comment: String?): Map<String, Any> {
61+
// Business logic...
62+
return mapOf("title" to movieTitle, "rating" to stars, "status" to "published")
63+
}
64+
65+
/** Procedure: movies.addReview Mix of String and int (Mutation) */
66+
@Mutation
67+
fun updateMetadata(id: Int, metadata: Metadata?): Metadata? {
68+
// Business logic...
69+
return metadata
70+
}
71+
}

0 commit comments

Comments
 (0)