Migrate to Palentir's JavaPoet
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
Deploy Docs / Dispatch docs deployment (push) Waiting to run Details

Closes gh-35214
This commit is contained in:
Stéphane Nicoll 2025-07-17 16:25:46 +02:00
parent 200b3ea023
commit dd8313f200
7 changed files with 18 additions and 17 deletions

View File

@ -14,7 +14,7 @@ multiRelease {
releaseVersions 21, 24 releaseVersions 21, 24
} }
def javapoetVersion = "1.13.0" def javapoetVersion = "0.7.0"
def objenesisVersion = "3.4" def objenesisVersion = "3.4"
configurations { configurations {
@ -30,12 +30,12 @@ tasks.register('javapoetRepackJar', ShadowJar) {
archiveBaseName = 'spring-javapoet-repack' archiveBaseName = 'spring-javapoet-repack'
archiveVersion = javapoetVersion archiveVersion = javapoetVersion
configurations = [project.configurations.javapoet] configurations = [project.configurations.javapoet]
relocate('com.squareup.javapoet', 'org.springframework.javapoet') relocate('com.palantir.javapoet', 'org.springframework.javapoet')
} }
tasks.register('javapoetSource', ShadowSource) { tasks.register('javapoetSource', ShadowSource) {
configurations = [project.configurations.javapoet] configurations = [project.configurations.javapoet]
relocate('com.squareup.javapoet', 'org.springframework.javapoet') relocate('com.palantir.javapoet', 'org.springframework.javapoet')
outputDirectory = file("build/shadow-source/javapoet") outputDirectory = file("build/shadow-source/javapoet")
} }
@ -67,7 +67,7 @@ tasks.register('objenesisSourceJar', Jar) {
} }
dependencies { dependencies {
javapoet("com.squareup:javapoet:${javapoetVersion}@jar") javapoet("com.palantir.javapoet:javapoet:${javapoetVersion}@jar")
objenesis("org.objenesis:objenesis:${objenesisVersion}@jar") objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
api(files(javapoetRepackJar)) api(files(javapoetRepackJar))
api(files(objenesisRepackJar)) api(files(objenesisRepackJar))

View File

@ -26,6 +26,7 @@ import org.jspecify.annotations.Nullable;
import org.springframework.javapoet.ClassName; import org.springframework.javapoet.ClassName;
import org.springframework.javapoet.CodeBlock; import org.springframework.javapoet.CodeBlock;
import org.springframework.javapoet.MethodSpec; import org.springframework.javapoet.MethodSpec;
import org.springframework.javapoet.ParameterSpec;
import org.springframework.javapoet.TypeName; import org.springframework.javapoet.TypeName;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -51,7 +52,7 @@ public class DefaultMethodReference implements MethodReference {
@Override @Override
public CodeBlock toCodeBlock() { public CodeBlock toCodeBlock() {
String methodName = this.method.name; String methodName = this.method.name();
if (isStatic()) { if (isStatic()) {
Assert.state(this.declaringClass != null, "Static method reference must define a declaring class"); Assert.state(this.declaringClass != null, "Static method reference must define a declaring class");
return CodeBlock.of("$T::$L", this.declaringClass, methodName); return CodeBlock.of("$T::$L", this.declaringClass, methodName);
@ -65,7 +66,7 @@ public class DefaultMethodReference implements MethodReference {
public CodeBlock toInvokeCodeBlock(ArgumentCodeGenerator argumentCodeGenerator, public CodeBlock toInvokeCodeBlock(ArgumentCodeGenerator argumentCodeGenerator,
@Nullable ClassName targetClassName) { @Nullable ClassName targetClassName) {
String methodName = this.method.name; String methodName = this.method.name();
CodeBlock.Builder code = CodeBlock.builder(); CodeBlock.Builder code = CodeBlock.builder();
if (isStatic()) { if (isStatic()) {
Assert.state(this.declaringClass != null, "Static method reference must define a declaring class"); Assert.state(this.declaringClass != null, "Static method reference must define a declaring class");
@ -96,8 +97,8 @@ public class DefaultMethodReference implements MethodReference {
*/ */
protected void addArguments(CodeBlock.Builder code, ArgumentCodeGenerator argumentCodeGenerator) { protected void addArguments(CodeBlock.Builder code, ArgumentCodeGenerator argumentCodeGenerator) {
List<CodeBlock> arguments = new ArrayList<>(); List<CodeBlock> arguments = new ArrayList<>();
TypeName[] argumentTypes = this.method.parameters.stream() TypeName[] argumentTypes = this.method.parameters().stream()
.map(parameter -> parameter.type).toArray(TypeName[]::new); .map(ParameterSpec::type).toArray(TypeName[]::new);
for (int i = 0; i < argumentTypes.length; i++) { for (int i = 0; i < argumentTypes.length; i++) {
TypeName argumentType = argumentTypes[i]; TypeName argumentType = argumentTypes[i];
CodeBlock argumentCode = argumentCodeGenerator.generateCode(argumentType); CodeBlock argumentCode = argumentCodeGenerator.generateCode(argumentType);
@ -115,12 +116,12 @@ public class DefaultMethodReference implements MethodReference {
} }
private boolean isStatic() { private boolean isStatic() {
return this.method.modifiers.contains(Modifier.STATIC); return this.method.modifiers().contains(Modifier.STATIC);
} }
@Override @Override
public String toString() { public String toString() {
String methodName = this.method.name; String methodName = this.method.name();
if (isStatic()) { if (isStatic()) {
return this.declaringClass + "::" + methodName; return this.declaringClass + "::" + methodName;
} }

View File

@ -48,8 +48,8 @@ public interface GeneratedFiles {
* @param javaFile the java file to add * @param javaFile the java file to add
*/ */
default void addSourceFile(JavaFile javaFile) { default void addSourceFile(JavaFile javaFile) {
validatePackage(javaFile.packageName, javaFile.typeSpec.name); validatePackage(javaFile.packageName(), javaFile.typeSpec().name());
String className = javaFile.packageName + "." + javaFile.typeSpec.name; String className = javaFile.packageName() + "." + javaFile.typeSpec().name();
addSourceFile(className, javaFile::writeTo); addSourceFile(className, javaFile::writeTo);
} }

View File

@ -53,7 +53,7 @@ public final class GeneratedMethod {
MethodSpec.Builder builder = MethodSpec.methodBuilder(this.name); MethodSpec.Builder builder = MethodSpec.methodBuilder(this.name);
method.accept(builder); method.accept(builder);
this.methodSpec = builder.build(); this.methodSpec = builder.build();
Assert.state(this.name.equals(this.methodSpec.name), Assert.state(this.name.equals(this.methodSpec.name()),
"'method' consumer must not change the generated method name"); "'method' consumer must not change the generated method name");
} }

View File

@ -112,8 +112,8 @@ class GeneratedClassTests {
@Test @Test
void generateJavaFileIncludesDeclaredClasses() { void generateJavaFileIncludesDeclaredClasses() {
GeneratedClass generatedClass = createGeneratedClass(TEST_CLASS_NAME); GeneratedClass generatedClass = createGeneratedClass(TEST_CLASS_NAME);
generatedClass.getOrAdd("First", type -> type.modifiers.add(Modifier.STATIC)); generatedClass.getOrAdd("First", type -> type.addModifiers(Modifier.STATIC));
generatedClass.getOrAdd("Second", type -> type.modifiers.add(Modifier.PRIVATE)); generatedClass.getOrAdd("Second", type -> type.addModifiers(Modifier.PRIVATE));
assertThat(generatedClass.generateJavaFile().toString()) assertThat(generatedClass.generateJavaFile().toString())
.contains("static class First").contains("private class Second"); .contains("static class First").contains("private class Second");
} }

View File

@ -53,7 +53,7 @@ class GeneratedMethodTests {
@Test @Test
void generateMethodSpecReturnsMethodSpec() { void generateMethodSpecReturnsMethodSpec() {
GeneratedMethod generatedMethod = create(method -> method.addJavadoc("Test")); GeneratedMethod generatedMethod = create(method -> method.addJavadoc("Test"));
assertThat(generatedMethod.getMethodSpec().javadoc).asString().contains("Test"); assertThat(generatedMethod.getMethodSpec().javadoc()).asString().contains("Test");
} }
@Test @Test

View File

@ -119,7 +119,7 @@ class GeneratedMethodsTests {
this.methods.add("springBeans", methodSpecCustomizer); this.methods.add("springBeans", methodSpecCustomizer);
this.methods.add("springContext", methodSpecCustomizer); this.methods.add("springContext", methodSpecCustomizer);
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
this.methods.doWithMethodSpecs(methodSpec -> names.add(methodSpec.name)); this.methods.doWithMethodSpecs(methodSpec -> names.add(methodSpec.name()));
assertThat(names).containsExactly("springBeans", "springContext"); assertThat(names).containsExactly("springBeans", "springContext");
} }