Skip to content

Commit e54e4b5

Browse files
committed
remove: runApp(String[], Class) #2969
- fix #2969
1 parent 2fb59e8 commit e54e4b5

File tree

8 files changed

+48
-78
lines changed

8 files changed

+48
-78
lines changed

jooby/src/main/java/io/jooby/Jooby.java

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.util.function.Predicate;
4141
import java.util.function.Supplier;
4242
import java.util.stream.Collectors;
43-
import java.util.stream.Stream;
4443

4544
import org.slf4j.Logger;
4645
import org.slf4j.LoggerFactory;
@@ -1124,48 +1123,6 @@ public String toString() {
11241123
return getName() + ":" + getVersion();
11251124
}
11261125

1127-
/**
1128-
* Setup default environment, logging (logback or log4j2) and run application.
1129-
*
1130-
* @param args Application arguments.
1131-
* @param applicationType Application type.
1132-
*/
1133-
public static void runApp(
1134-
@NonNull String[] args, @NonNull Class<? extends Jooby> applicationType) {
1135-
runApp(args, ExecutionMode.DEFAULT, applicationType);
1136-
}
1137-
1138-
/**
1139-
* Setup default environment, logging (logback or log4j2) and run application.
1140-
*
1141-
* @param args Application arguments.
1142-
* @param executionMode Application execution mode.
1143-
* @param applicationType Application type.
1144-
*/
1145-
public static void runApp(
1146-
@NonNull String[] args,
1147-
@NonNull ExecutionMode executionMode,
1148-
@NonNull Class<? extends Jooby> applicationType) {
1149-
configurePackage(applicationType.getPackage());
1150-
runApp(args, executionMode, reflectionProvider(applicationType));
1151-
}
1152-
1153-
/**
1154-
* Setup default environment, logging (logback or log4j2) and run application.
1155-
*
1156-
* @param args Application arguments.
1157-
* @param executionMode Application execution mode.
1158-
* @param applicationType Application type.
1159-
* @return Application.
1160-
*/
1161-
public static Jooby createApp(
1162-
@NonNull String[] args,
1163-
@NonNull ExecutionMode executionMode,
1164-
@NonNull Class<? extends Jooby> applicationType) {
1165-
configurePackage(applicationType.getPackage());
1166-
return createApp(args, executionMode, reflectionProvider(applicationType));
1167-
}
1168-
11691126
/**
11701127
* Setup default environment, logging (logback or log4j2) and run application.
11711128
*
@@ -1354,20 +1311,6 @@ private static Supplier<Jooby> consumerProvider(Consumer<Jooby> consumer) {
13541311
};
13551312
}
13561313

1357-
private static Supplier<Jooby> reflectionProvider(
1358-
@NonNull Class<? extends Jooby> applicationType) {
1359-
return () ->
1360-
(Jooby)
1361-
Stream.of(applicationType.getDeclaredConstructors())
1362-
.filter(it -> it.getParameterCount() == 0)
1363-
.findFirst()
1364-
.map(SneakyThrows.throwingFunction(c -> c.newInstance()))
1365-
.orElseThrow(
1366-
() ->
1367-
new IllegalArgumentException(
1368-
"Default constructor for: " + applicationType.getName()));
1369-
}
1370-
13711314
/**
13721315
* Check if we are running from joobyRun and invoke a hook class passing the web server. JoobyRun
13731316
* intercept the server and use it for doing hotswap.

modules/jooby-cli/src/main/resources/cli/App.kt.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ class App: Kooby({
2222
})
2323

2424
fun main(args: Array<String>) {
25-
runApp(args, App::class)
25+
runApp(args, ::App)
2626
}

modules/jooby-kotlin/src/main/kotlin/io/jooby/kt/Kooby.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
44
* Copyright 2014 Edgar Espina
55
*/
6-
@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE")
6+
@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE", "NOTHING_TO_INLINE")
77

88
package io.jooby.kt
99

@@ -119,7 +119,6 @@ inline fun <T : Any> Context.query(klass: KClass<T>): T {
119119
* Welcome to Jooby for Kotlin
120120
*
121121
* <p>Hello World:
122-
*
123122
* <pre>{@code
124123
*
125124
* import io.jooby.kt.runApp
@@ -343,13 +342,13 @@ fun runApp(args: Array<String>, init: Kooby.() -> Unit) {
343342
Jooby.runApp(args, ExecutionMode.DEFAULT, fun() = Kooby(init))
344343
}
345344

346-
fun <T : Jooby> runApp(args: Array<String>, application: KClass<T>) {
347-
runApp(args, ExecutionMode.DEFAULT, application)
345+
fun <T : Jooby> runApp(args: Array<String>, provider: () -> T) {
346+
runApp(args, ExecutionMode.DEFAULT, provider)
348347
}
349348

350-
fun <T : Jooby> runApp(args: Array<String>, mode: ExecutionMode, application: KClass<T>) {
351-
System.setProperty("___app_name__", application.java.simpleName)
352-
Jooby.runApp(args, mode, application.java)
349+
fun <T : Jooby> runApp(args: Array<String>, mode: ExecutionMode, provider: () -> T) {
350+
// System.setProperty("___app_name__", application.java.simpleName)
351+
Jooby.runApp(args, mode, provider)
353352
}
354353

355354
internal fun configurePackage(value: Any) {

modules/jooby-kotlin/src/test/kotlin/apps/Apps.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ class App :
2929

3030
/** run class: */
3131
fun runClass(args: Array<String>) {
32-
runApp(args, App::class)
32+
runApp(args, ::App)
3333
}
3434

3535
/** run class with mode: */
3636
fun runWithMode(args: Array<String>) {
37-
runApp(args, ExecutionMode.DEFAULT, App::class)
37+
runApp(args, ExecutionMode.DEFAULT, ::App)
3838
}
3939

4040
/** run inline: */

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/RouteParser.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import static io.jooby.internal.openapi.TypeFactory.KT_FUN_1;
1414
import static io.jooby.internal.openapi.TypeFactory.OBJECT;
1515
import static io.jooby.internal.openapi.TypeFactory.STRING;
16+
import static io.jooby.internal.openapi.TypeFactory.STRING_ARRAY;
1617
import static org.objectweb.asm.Opcodes.GETSTATIC;
1718

1819
import java.io.IOException;
@@ -423,7 +424,12 @@ private List<OperationExt> routeHandler(ParserContext ctx, String prefix, Method
423424
handlerList.addAll(kotlinHandler(ctx, null, prefix, node));
424425
}
425426
} else if (signature.matches(KOOBYKT, "runApp")) {
426-
handlerList.addAll(kotlinRunApp(ctx, prefix, node));
427+
handlerList.addAll(
428+
kotlinRunApp(
429+
ctx,
430+
prefix,
431+
node,
432+
signature.matches("runApp", STRING_ARRAY, TypeFactory.KT_FUN_0)));
427433
} else if (signature.matches(Route.class, "produces", MediaType[].class)) {
428434
if (instructionTo != null) {
429435
OperationExt route = handlerList.get(handlerList.size() - 1);
@@ -489,7 +495,8 @@ private AbstractInsnNode parseTags(
489495
return start;
490496
}
491497

492-
private List<OperationExt> kotlinRunApp(ParserContext ctx, String prefix, MethodInsnNode node) {
498+
private List<OperationExt> kotlinRunApp(
499+
ParserContext ctx, String prefix, MethodInsnNode node, boolean supplier) {
493500
List<OperationExt> handlerList = new ArrayList<>();
494501
Type type = null;
495502
for (AbstractInsnNode it : InsnSupport.prev(node).collect(Collectors.toList())) {
@@ -499,19 +506,20 @@ private List<OperationExt> kotlinRunApp(ParserContext ctx, String prefix, Method
499506
type = Type.getObjectType(getstatic.owner);
500507
break;
501508
}
502-
} else if (it instanceof LdcInsnNode) {
503-
LdcInsnNode e = (LdcInsnNode) it;
504-
if (e.cst instanceof Type) {
505-
type = (Type) e.cst;
506-
ctx.setMainClass(type.getClassName());
507-
break;
508-
}
509509
}
510510
}
511511
if (type == null) {
512512
throw new IllegalStateException("io.jooby.runApp(String[]) parsing failure");
513513
}
514514
ClassNode classNode = ctx.classNode(type);
515+
if (supplier) {
516+
/** runApp(args, ::App); */
517+
var signature = classNode.signature;
518+
var mainClass =
519+
Type.getType(signature.substring(signature.lastIndexOf('<') + 1, signature.length() - 2));
520+
ctx.setMainClass(mainClass.getClassName());
521+
classNode = ctx.classNode(mainClass);
522+
}
515523
handlerList.addAll(parse(ctx, prefix, classNode));
516524
return handlerList;
517525
}

modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/TypeFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class TypeFactory {
2020
public static final Type VOID = Type.getType(void.class);
2121

2222
public static final Type STRING = Type.getType(String.class);
23+
24+
public static final Type STRING_ARRAY = Type.getType(String[].class);
2325
public static final Type HANDLER = Type.getType(Route.Handler.class);
2426

2527
public static final Type ROUTER = Type.getType(Router.class);

modules/jooby-openapi/src/test/kotlin/kt/KtAppWithMain.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ class App :
1717
})
1818

1919
fun main(args: Array<String>) {
20-
runApp(args, App::class)
20+
runApp(args, ::App)
2121
}

modules/jooby-test/src/main/java/io/jooby/test/JoobyExtension.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.lang.reflect.Parameter;
1515
import java.util.Optional;
1616
import java.util.function.Supplier;
17+
import java.util.stream.Stream;
1718

1819
import org.junit.jupiter.api.extension.AfterAllCallback;
1920
import org.junit.jupiter.api.extension.AfterEachCallback;
@@ -26,6 +27,7 @@
2627
import org.junit.jupiter.api.extension.TestInstancePostProcessor;
2728

2829
import com.typesafe.config.Config;
30+
import edu.umd.cs.findbugs.annotations.NonNull;
2931
import io.jooby.Environment;
3032
import io.jooby.Jooby;
3133
import io.jooby.Server;
@@ -73,7 +75,9 @@ private Jooby startApp(ExtensionContext context, JoobyTest metadata) throws Exce
7375
if (factoryMethod.isEmpty()) {
7476
app =
7577
Jooby.createApp(
76-
new String[] {metadata.environment()}, metadata.executionMode(), metadata.value());
78+
new String[] {metadata.environment()},
79+
metadata.executionMode(),
80+
reflectionProvider(metadata.value()));
7781
} else {
7882
app = fromFactoryMethod(context, metadata, factoryMethod);
7983
}
@@ -90,6 +94,20 @@ private Jooby startApp(ExtensionContext context, JoobyTest metadata) throws Exce
9094
return app;
9195
}
9296

97+
private static Supplier<Jooby> reflectionProvider(
98+
@NonNull Class<? extends Jooby> applicationType) {
99+
return () ->
100+
(Jooby)
101+
Stream.of(applicationType.getDeclaredConstructors())
102+
.filter(it -> it.getParameterCount() == 0)
103+
.findFirst()
104+
.map(SneakyThrows.throwingFunction(c -> c.newInstance()))
105+
.orElseThrow(
106+
() ->
107+
new IllegalArgumentException(
108+
"Default constructor for: " + applicationType.getName()));
109+
}
110+
93111
@Override
94112
public void beforeEach(ExtensionContext context) throws Exception {
95113
context

0 commit comments

Comments
 (0)