Migrate to Palentir's JavaPoet
Closes gh-35214
This commit is contained in:
parent
200b3ea023
commit
dd8313f200
|
@ -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))
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue