diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java index 9f9989b74741..b4f97bf82e58 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java @@ -747,7 +747,7 @@ public CodeBlock generateInstanceSupplierCode(GenerationContext generationContex class DeprecationTests { private static final TestCompiler TEST_COMPILER = TestCompiler.forSystem() - .withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Werror"); + .withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Xlint:-processing", "-Werror"); @Test void generateBeanDefinitionMethodWithDeprecatedTargetClass() { diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/CodeWarningsTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/CodeWarningsTests.java index 4f7c57edcd10..e13837adf80c 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/CodeWarningsTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/CodeWarningsTests.java @@ -41,7 +41,7 @@ class CodeWarningsTests { private static final TestCompiler TEST_COMPILER = TestCompiler.forSystem() - .withCompilerOptions("-Xlint:all", "-Werror"); + .withCompilerOptions("-Xlint:all", "-Xlint:-processing", "-Werror"); private final CodeWarnings codeWarnings; diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGeneratorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGeneratorTests.java index 0f60beecac6d..bdea61ed1c56 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGeneratorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGeneratorTests.java @@ -267,7 +267,7 @@ void generateWhenHasStaticFactoryMethodCheckedException() { class DeprecationTests { private static final TestCompiler TEST_COMPILER = TestCompiler.forSystem() - .withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Werror"); + .withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Xlint:-processing", "-Werror"); @Test @Disabled("Need to move to a separate method so that the warning can be suppressed") @@ -323,7 +323,7 @@ private void compileAndCheckWarnings(BeanDefinition beanDefinition) { class DeprecationForRemovalTests { private static final TestCompiler TEST_COMPILER = TestCompiler.forSystem() - .withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Werror"); + .withCompilerOptions("-Xlint:all", "-Xlint:-rawtypes", "-Xlint:-processing", "-Werror"); @Test @Disabled("Need to move to a separate method so that the warning can be suppressed") diff --git a/spring-core/src/main/java/org/springframework/aot/generate/Generated.java b/spring-core/src/main/java/org/springframework/aot/generate/Generated.java new file mode 100644 index 000000000000..95574e248085 --- /dev/null +++ b/spring-core/src/main/java/org/springframework/aot/generate/Generated.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.aot.generate; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Indicate that the type has been generated ahead of time. + * + * @author Stephane Nicoll + * @since 6.1.2 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Generated { +} diff --git a/spring-core/src/main/java/org/springframework/aot/generate/GeneratedClass.java b/spring-core/src/main/java/org/springframework/aot/generate/GeneratedClass.java index 0cf0507e4b35..2b1caa6d1365 100644 --- a/spring-core/src/main/java/org/springframework/aot/generate/GeneratedClass.java +++ b/spring-core/src/main/java/org/springframework/aot/generate/GeneratedClass.java @@ -142,6 +142,7 @@ JavaFile generateJavaFile() { private TypeSpec.Builder apply() { TypeSpec.Builder type = getBuilder(this.type); + type.addAnnotation(Generated.class); this.methods.doWithMethodSpecs(type::addMethod); this.declaredClasses.values().forEach(declaredClass -> type.addType(declaredClass.apply().build())); diff --git a/spring-core/src/test/java/org/springframework/aot/generate/GeneratedClassTests.java b/spring-core/src/test/java/org/springframework/aot/generate/GeneratedClassTests.java index 23802ed069f8..0f8adeb35f49 100644 --- a/spring-core/src/test/java/org/springframework/aot/generate/GeneratedClassTests.java +++ b/spring-core/src/test/java/org/springframework/aot/generate/GeneratedClassTests.java @@ -94,6 +94,14 @@ void getOrAddWhenRepeatReturnsSameGeneratedClass() { assertThat(innerGeneratedClass).isSameAs(innerGeneratedClass2).isSameAs(innerGeneratedClass3); } + @Test + void generateJavaFileIsAnnotatedWithGenerated() { + GeneratedClass generatedClass = createGeneratedClass(TEST_CLASS_NAME); + assertThat(generatedClass.generateJavaFile().toString()) + .contains("@Generated") + .contains("import " + Generated.class.getName() + ";"); + } + @Test void generateJavaFileIncludesGeneratedMethods() { GeneratedClass generatedClass = createGeneratedClass(TEST_CLASS_NAME);