Rename registerResourceIfNecessary to registerResource

This commit renames registerResourceIfNecessary() to registerResource()
and throws an exception if the class path resource does not exist.

Closes gh-29083
This commit is contained in:
Sam Brannen 2022-09-10 19:49:56 +02:00
parent d883c8fbb3
commit 6d83a959fb
5 changed files with 25 additions and 18 deletions

View File

@ -27,6 +27,7 @@ import java.util.stream.Stream;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* Gather the need for resources available at runtime.
@ -113,15 +114,18 @@ public class ResourceHints {
}
/**
* Determine if the supplied resource is a {@link ClassPathResource} that
* {@linkplain Resource#exists() exists} and register the resource for run-time
* availability accordingly.
* Register that the supplied resource should be made available at runtime.
* <p>If the supplied resource is not a {@link ClassPathResource}, it will
* not be registered.
* @param resource the resource to register
* @throws IllegalArgumentException if the supplied class path resource does
* not {@linkplain Resource#exists() exist}
* @see #registerPattern(String)
* @see ClassPathResource#getAbsolutePath()
*/
public void registerResourceIfNecessary(Resource resource) {
if (resource instanceof ClassPathResource classPathResource && classPathResource.exists()) {
public void registerResource(Resource resource) {
if (resource instanceof ClassPathResource classPathResource) {
Assert.isTrue(classPathResource.exists(), () -> "Resource does not exist: " + classPathResource);
registerPattern(classPathResource.getAbsolutePath());
}
}

View File

@ -28,6 +28,7 @@ import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.DescriptiveResource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verifyNoInteractions;
@ -114,32 +115,33 @@ class ResourceHintsTests {
}
@Test
void registerResourceIfNecessaryWithUnsupportedResourceType() {
void registerResourceWithUnsupportedResourceType() {
DescriptiveResource resource = new DescriptiveResource("bogus");
this.resourceHints.registerResourceIfNecessary(resource);
this.resourceHints.registerResource(resource);
assertThat(this.resourceHints.resourcePatterns()).isEmpty();
}
@Test
void registerResourceIfNecessaryWithNonexistentClassPathResource() {
void registerResourceWithNonexistentClassPathResource() {
ClassPathResource resource = new ClassPathResource("bogus", getClass());
this.resourceHints.registerResourceIfNecessary(resource);
assertThat(this.resourceHints.resourcePatterns()).isEmpty();
assertThatIllegalArgumentException()
.isThrownBy(() -> this.resourceHints.registerResource(resource))
.withMessage("Resource does not exist: %s", resource);
}
@Test
void registerResourceIfNecessaryWithExistingClassPathResource() {
void registerResourceWithExistingClassPathResource() {
String path = "org/springframework/aot/hint/support";
ClassPathResource resource = new ClassPathResource(path);
this.resourceHints.registerResourceIfNecessary(resource);
this.resourceHints.registerResource(resource);
assertThat(this.resourceHints.resourcePatterns()).singleElement().satisfies(patternOf(path));
}
@Test
void registerResourceIfNecessaryWithExistingRelativeClassPathResource() {
void registerResourceWithExistingRelativeClassPathResource() {
String path = "org/springframework/aot/hint/support";
ClassPathResource resource = new ClassPathResource("support", RuntimeHints.class);
this.resourceHints.registerResourceIfNecessary(resource);
this.resourceHints.registerResource(resource);
assertThat(this.resourceHints.resourcePatterns()).singleElement().satisfies(patternOf(path));
}

View File

@ -100,7 +100,7 @@ class StandardTestRuntimeHints implements TestRuntimeHintsRegistrar {
Arrays.stream(paths)
.filter(path -> path.startsWith(CLASSPATH_URL_PREFIX))
.map(resourceLoader::getResource)
.forEach(runtimeHints.resources()::registerResourceIfNecessary);
.forEach(runtimeHints.resources()::registerResource);
}
private void registerClasspathResourceDirectoryStructure(String directory, RuntimeHints runtimeHints) {

View File

@ -396,7 +396,7 @@ public class SqlScriptsTestExecutionListener extends AbstractTestExecutionListen
Arrays.stream(paths)
.filter(path -> path.startsWith(CLASSPATH_URL_PREFIX))
.map(resourceLoader::getResource)
.forEach(runtimeHints.resources()::registerResourceIfNecessary);
.forEach(runtimeHints.resources()::registerResource);
}
}

View File

@ -22,7 +22,7 @@ import org.springframework.core.io.ClassPathResource;
/**
* {@link RuntimeHintsRegistrar} implementation that registers resource
* hints for web util classes.
* hints for web util resources.
*
* @author Sebastien Deleuze
* @since 6.0
@ -31,7 +31,8 @@ class WebUtilRuntimeHints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
hints.resources().registerResourceIfNecessary(
hints.resources().registerResource(
new ClassPathResource("HtmlCharacterEntityReferences.properties", getClass()));
}
}