Skip to content

Commit c083e0b

Browse files
committed
Avoid using temp before @tempdir has initialized it
Closes gh-28748
1 parent f2b959b commit c083e0b

File tree

2 files changed

+33
-7
lines changed
  • buildSrc/src/main/java/org/springframework/boot/build
  • spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling

2 files changed

+33
-7
lines changed

buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,29 @@
1616

1717
package org.springframework.boot.build;
1818

19+
import java.io.File;
1920
import java.util.Arrays;
2021
import java.util.Collections;
2122
import java.util.List;
2223
import java.util.Map;
2324
import java.util.Set;
2425
import java.util.TreeMap;
2526
import java.util.stream.Collectors;
27+
import java.util.stream.Stream;
2628

2729
import io.spring.javaformat.gradle.SpringJavaFormatPlugin;
2830
import io.spring.javaformat.gradle.tasks.CheckFormat;
2931
import io.spring.javaformat.gradle.tasks.Format;
32+
import org.gradle.api.Action;
33+
import org.gradle.api.GradleException;
3034
import org.gradle.api.JavaVersion;
3135
import org.gradle.api.Project;
36+
import org.gradle.api.Task;
3237
import org.gradle.api.artifacts.Configuration;
3338
import org.gradle.api.artifacts.ConfigurationContainer;
3439
import org.gradle.api.artifacts.Dependency;
3540
import org.gradle.api.artifacts.DependencySet;
41+
import org.gradle.api.file.FileTree;
3642
import org.gradle.api.plugins.JavaBasePlugin;
3743
import org.gradle.api.plugins.JavaPlugin;
3844
import org.gradle.api.plugins.JavaPluginExtension;
@@ -178,7 +184,10 @@ private boolean isCi() {
178184
}
179185

180186
private void configureJavadocConventions(Project project) {
181-
project.getTasks().withType(Javadoc.class, (javadoc) -> javadoc.getOptions().source("1.8").encoding("UTF-8"));
187+
project.getTasks().withType(Javadoc.class, (javadoc) -> {
188+
javadoc.getOptions().source("1.8").encoding("UTF-8");
189+
javadoc.doFirst(new VerifyPackageInfo());
190+
});
182191
}
183192

184193
private void configureJavaConventions(Project project) {
@@ -264,4 +273,22 @@ private void createProhibitedDependenciesCheck(Configuration classpath, Project
264273
project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForProhibitedDependencies);
265274
}
266275

276+
private static final class VerifyPackageInfo implements Action<Task> {
277+
278+
@Override
279+
public void execute(Task javadoc) {
280+
FileTree source = ((Javadoc) javadoc).getSource();
281+
Stream<File> dirs = source.getFiles().stream().map((file) -> file.getParentFile()).distinct();
282+
Set<File> missingPackageInfo = dirs.map((file) -> new File(file, "package-info.java"))
283+
.filter((packageInfo) -> !packageInfo.isFile()).collect(Collectors.toSet());
284+
if (!missingPackageInfo.isEmpty()) {
285+
StringBuilder message = new StringBuilder(
286+
"A package-info.java file was missing from the following directories:\n");
287+
missingPackageInfo.forEach((packageInfo) -> message.append("\t" + packageInfo.getParentFile() + "\n"));
288+
throw new GradleException(message.toString());
289+
}
290+
}
291+
292+
}
293+
267294
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.gradle.api.GradleException;
2525
import org.gradle.api.JavaVersion;
2626
import org.gradle.api.Project;
27+
import org.junit.jupiter.api.BeforeEach;
2728
import org.junit.jupiter.api.Test;
2829
import org.junit.jupiter.api.io.TempDir;
2930

@@ -45,15 +46,13 @@
4546
*/
4647
class BootBuildImageTests {
4748

48-
@TempDir
49-
File temp;
50-
5149
Project project;
5250

53-
private final BootBuildImage buildImage;
51+
private BootBuildImage buildImage;
5452

55-
BootBuildImageTests() {
56-
File projectDir = new File(this.temp, "project");
53+
@BeforeEach
54+
void setUp(@TempDir File temp) {
55+
File projectDir = new File(temp, "project");
5756
projectDir.mkdirs();
5857
this.project = GradleProjectBuilder.builder().withProjectDir(projectDir).withName("build-image-test").build();
5958
this.project.setDescription("Test project for BootBuildImage");

0 commit comments

Comments
 (0)