Skip to content

Commit

Permalink
馃悶 java.nio.file.Path#getFileName can return null
Browse files Browse the repository at this point in the history
  • Loading branch information
jhannes committed Dec 1, 2022
1 parent 6074bd1 commit 103f253
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
23 changes: 12 additions & 11 deletions logevents/src/main/java/org/logevents/config/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.time.format.DateTimeParseException;
Expand Down Expand Up @@ -393,10 +394,11 @@ private static Optional<String> calculateMainClassName() {
* If run from a directory classpath, use the name of the current working directory instead
*/
private static String calculateApplicationName(Optional<String> mainClassName) {
Optional<Path> workingDir = Optional.ofNullable(Paths.get("").toAbsolutePath().getFileName());
if (isRunningInTest()) {
return currentWorkingDirectory();
return workingDir.map(Object::toString).orElse("junit");
}
return mainClassName.map(Configuration::determineJarName).orElseGet(Configuration::currentWorkingDirectory);
return calculateApplicationName(mainClassName, workingDir);
}

public static Optional<String> getMainClassName() {
Expand All @@ -418,22 +420,21 @@ private static boolean isRunningInTest(StackTraceElement[] stackTrace) {
.anyMatch(className -> className.startsWith("org.junit.runners.") || className.startsWith("org.junit.jupiter.engine.execution"));
}

static String determineJarName(String className) {
static String calculateApplicationName(Optional<String> mainClassName, Optional<Path> workingDir) {
if (!mainClassName.isPresent()) {
return workingDir.map(Object::toString).orElse("(unknown app)");
}
String defaultAppName = workingDir.map(Object::toString).orElse(mainClassName.get());
try {
return Optional.ofNullable(Class.forName(className).getProtectionDomain().getCodeSource())
return Optional.ofNullable(Class.forName(mainClassName.get()).getProtectionDomain().getCodeSource())
.map(codeSource -> codeSource.getLocation().getPath())
.filter(path -> !path.endsWith("/"))
.map(Configuration::toApplicationName)
.orElseGet(Configuration::currentWorkingDirectory);
.orElse(defaultAppName);
} catch (ClassNotFoundException e) {
return currentWorkingDirectory();
return defaultAppName;
}
}

private static String currentWorkingDirectory() {
return Paths.get("").toAbsolutePath().getFileName().toString();
}

/**
* Remove directory name, .jar suffix and semver version from file path
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import junit.framework.TestCase;
import org.junit.Test;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
Expand Down Expand Up @@ -127,9 +128,12 @@ public void shouldListProperties() {

@Test
public void shouldDetermineJarName() {
assertEquals("junit", Configuration.determineJarName(TestCase.class.getName()));
assertEquals(currentWorkingDirectory(), Configuration.determineJarName(String.class.getName()));
assertEquals(currentWorkingDirectory(), Configuration.determineJarName(getClass().getName()));
Optional<Path> workingDir = Optional.of(Paths.get("").toAbsolutePath().getFileName());
assertEquals("junit", Configuration.calculateApplicationName(Optional.of(TestCase.class.getName()), Optional.empty()));
assertEquals(currentWorkingDirectory(), Configuration.calculateApplicationName(Optional.of(String.class.getName()), workingDir));
assertEquals(currentWorkingDirectory(), Configuration.calculateApplicationName(Optional.of(getClass().getName()), workingDir));
assertEquals(getClass().getName(), Configuration.calculateApplicationName(Optional.of(getClass().getName()), Optional.empty()));
assertEquals("(unknown app)", Configuration.calculateApplicationName(Optional.empty(), Optional.empty()));
}

@Test
Expand Down

0 comments on commit 103f253

Please sign in to comment.