Skip to content

Commit 81fdb76

Browse files
committed
Merge pull request #31701 from GGGGGHT
* gh-31701: Polish "Use StackWalker to deduce main application class" Use StackWalker to deduce main application class Closes gh-31701
2 parents 19030f6 + 38fedcf commit 81fdb76

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot;
1818

19+
import java.lang.StackWalker.StackFrame;
1920
import java.time.Duration;
2021
import java.util.ArrayList;
2122
import java.util.Arrays;
@@ -25,9 +26,12 @@
2526
import java.util.LinkedHashSet;
2627
import java.util.List;
2728
import java.util.Map;
29+
import java.util.Objects;
30+
import java.util.Optional;
2831
import java.util.Properties;
2932
import java.util.Set;
3033
import java.util.stream.Collectors;
34+
import java.util.stream.Stream;
3135

3236
import org.apache.commons.logging.Log;
3337
import org.apache.commons.logging.LogFactory;
@@ -274,18 +278,13 @@ public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySourc
274278
}
275279

276280
private Class<?> deduceMainApplicationClass() {
277-
try {
278-
StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
279-
for (StackTraceElement stackTraceElement : stackTrace) {
280-
if ("main".equals(stackTraceElement.getMethodName())) {
281-
return Class.forName(stackTraceElement.getClassName());
282-
}
283-
}
284-
}
285-
catch (ClassNotFoundException ex) {
286-
// Swallow and continue
287-
}
288-
return null;
281+
return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk(this::findMainClass)
282+
.orElse(null);
283+
}
284+
285+
private Optional<Class<?>> findMainClass(Stream<StackFrame> stack) {
286+
return stack.filter((frame) -> Objects.equals(frame.getMethodName(), "main")).findFirst()
287+
.map(StackWalker.StackFrame::getDeclaringClass);
289288
}
290289

291290
/**

0 commit comments

Comments
 (0)