Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internal cleanup of AbstractLocationConfigSourceLoader #1214

Merged
merged 1 commit into from
Aug 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ protected List<ConfigSource> tryFileSystem(final URI uri, final int ordinal) {
} else if (Files.isDirectory(urlPath)) {
try (DirectoryStream<Path> paths = Files.newDirectoryStream(urlPath, this::validExtension)) {
for (Path path : paths) {
addConfigSource(path.toUri(), ordinal, configSources);
configSources.add(loadConfigSource(path.toUri(), ordinal));
}
} catch (IOException e) {
throw ConfigMessages.msg.failedToLoadResource(e, uri.toString());
Expand All @@ -142,7 +142,7 @@ protected List<ConfigSource> tryClassPath(final URI uri, final int ordinal, fina
} catch (IOException e) {
throw ConfigMessages.msg.failedToLoadResource(e, uri.toString());
} catch (IllegalArgumentException e) {
configSources.addAll(fallbackToUnknownProtocol(uri, ordinal, useClassloader));
return fallbackToUnknownProtocol(uri, ordinal, useClassloader);
}
return configSources;
}
Expand All @@ -164,7 +164,8 @@ protected List<ConfigSource> fallbackToUnknownProtocol(final URI uri, final int
while (resources.hasMoreElements()) {
URL resourceUrl = resources.nextElement();
if (validExtension(resourceUrl.getFile())) {
ConfigSource mainSource = addConfigSource(resourceUrl, ordinal, configSources);
ConfigSource mainSource = loadConfigSourceInternal(resourceUrl, ordinal);
configSources.add(mainSource);
configSources.add(new ConfigurableConfigSource((ProfileConfigSourceFactory) profiles -> {
List<ConfigSource> profileSources = new ArrayList<>();
for (int i = profiles.size() - 1; i >= 0; i--) {
Expand All @@ -174,8 +175,8 @@ protected List<ConfigSource> fallbackToUnknownProtocol(final URI uri, final int
try {
Enumeration<URL> profileResources = classLoader.getResources(profileUri.toString());
while (profileResources.hasMoreElements()) {
final URL profileUrl = profileResources.nextElement();
addProfileConfigSource(profileUrl, mainOrdinal, profileSources);
profileSources
.addAll(loadProfileConfigSource(profileResources.nextElement(), mainOrdinal));
}
} catch (IOException e) {
// It is ok to not find the resource here, because it is an optional profile resource.
Expand All @@ -195,7 +196,8 @@ protected List<ConfigSource> fallbackToUnknownProtocol(final URI uri, final int
protected List<ConfigSource> tryHttpResource(final URI uri, final int ordinal) {
final List<ConfigSource> configSources = new ArrayList<>();
if (validExtension(uri.getPath())) {
final ConfigSource mainSource = addConfigSource(uri, ordinal, configSources);
ConfigSource mainSource = loadConfigSource(uri, ordinal);
configSources.add(mainSource);
configSources.addAll(tryProfiles(uri, mainSource));
}
return configSources;
Expand All @@ -211,8 +213,8 @@ public Iterable<ConfigSource> getProfileConfigSources(final List<String> profile
int ordinal = mainSource.getOrdinal() + profiles.size() - i;
for (String fileExtension : getFileExtensions()) {
URI profileUri = addProfileName(uri, profiles.get(i), fileExtension);
AbstractLocationConfigSourceLoader.this.addProfileConfigSource(toURL(profileUri), ordinal,
profileSources);
AbstractLocationConfigSourceLoader loader = AbstractLocationConfigSourceLoader.this;
profileSources.addAll(loader.loadProfileConfigSource(profileUri, ordinal));
}
}
return profileSources;
Expand All @@ -234,31 +236,34 @@ private static URL toURL(final URI uri) {
}
}

private ConfigSource addConfigSource(final URI uri, final int ordinal, final List<ConfigSource> configSources) {
return addConfigSource(toURL(uri), ordinal, configSources);
}

private ConfigSource addConfigSource(final URL url, final int ordinal, final List<ConfigSource> configSources) {
private ConfigSource loadConfigSourceInternal(final URL url, int ordinal) {
try {
ConfigSource configSource = loadConfigSource(url, ordinal);
configSources.add(configSource);
return configSource;
return loadConfigSource(url, ordinal);
} catch (IOException e) {
throw ConfigMessages.msg.failedToLoadResource(e, url.toString());
}
}

private void addProfileConfigSource(final URL profileToFileName, final int ordinal,
final List<ConfigSource> profileSources) {
private ConfigSource loadConfigSource(final URI uri, final int ordinal) {
URL url = toURL(uri);
return loadConfigSourceInternal(url, ordinal);
}

private List<ConfigSource> loadProfileConfigSource(final URL url, final int ordinal) {
try {
profileSources.add(loadConfigSource(profileToFileName, ordinal));
return List.of(loadConfigSource(url, ordinal));
} catch (FileNotFoundException | NoSuchFileException e) {
// It is ok to not find the resource here, because it is an optional profile resource.
return Collections.emptyList();
} catch (IOException e) {
throw ConfigMessages.msg.failedToLoadResource(e, profileToFileName.toString());
throw ConfigMessages.msg.failedToLoadResource(e, url.toString());
}
}

private List<ConfigSource> loadProfileConfigSource(final URI uri, final int ordinal) {
return loadProfileConfigSource(toURL(uri), ordinal);
}

private boolean validExtension(final Path fileName) {
return validExtension(fileName.getFileName().toString());
}
Expand Down Expand Up @@ -333,7 +338,8 @@ public ConfigSourcePathConsumer(final int ordinal, final List<ConfigSource> conf
public void accept(final Path path) {
final AbstractLocationConfigSourceLoader loader = AbstractLocationConfigSourceLoader.this;
if (loader.validExtension(path.getFileName().toString())) {
final ConfigSource mainSource = loader.addConfigSource(path.toUri(), ordinal, configSources);
ConfigSource mainSource = loader.loadConfigSource(path.toUri(), ordinal);
configSources.add(mainSource);
configSources.addAll(loader.tryProfiles(path.toUri(), mainSource));
}
}
Expand Down