Revise changes to DefaultGenerationContext and GeneratedClasses
In order to reduce the surface area of published APIs in the affected classes, this commit: - Reverts the changes made to GeneratedClasses inc354b1014d
. - Reverts the changes made to DefaultGenerationContext ina28ec3a0a8
. - Makes the DefaultGenerationContext(DefaultGenerationContext, String) constructor protected. - Reworks the internals of TestContextGenerationContext to align with the above changes. See gh-30861 Closes gh-30895 Closes gh-30897
This commit is contained in:
parent
3a278cc66d
commit
2ba9939bd8
|
@ -78,7 +78,7 @@ public class DefaultGenerationContext implements GenerationContext {
|
||||||
* @param generatedFiles the generated files
|
* @param generatedFiles the generated files
|
||||||
* @param runtimeHints the runtime hints
|
* @param runtimeHints the runtime hints
|
||||||
*/
|
*/
|
||||||
protected DefaultGenerationContext(GeneratedClasses generatedClasses,
|
DefaultGenerationContext(GeneratedClasses generatedClasses,
|
||||||
GeneratedFiles generatedFiles, RuntimeHints runtimeHints) {
|
GeneratedFiles generatedFiles, RuntimeHints runtimeHints) {
|
||||||
|
|
||||||
Assert.notNull(generatedClasses, "'generatedClasses' must not be null");
|
Assert.notNull(generatedClasses, "'generatedClasses' must not be null");
|
||||||
|
@ -90,9 +90,18 @@ public class DefaultGenerationContext implements GenerationContext {
|
||||||
this.runtimeHints = runtimeHints;
|
this.runtimeHints = runtimeHints;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DefaultGenerationContext(DefaultGenerationContext existing, String name) {
|
/**
|
||||||
int sequence = existing.sequenceGenerator.computeIfAbsent(name, key -> new AtomicInteger()).getAndIncrement();
|
* Create a new {@link DefaultGenerationContext} instance based on the
|
||||||
String featureName = (sequence > 0 ? name + sequence : name);
|
* supplied {@code existing} context and feature name.
|
||||||
|
* @param existing the existing context upon which to base the new one
|
||||||
|
* @param featureName the feature name to use
|
||||||
|
* @since 6.0.12
|
||||||
|
*/
|
||||||
|
protected DefaultGenerationContext(DefaultGenerationContext existing, String featureName) {
|
||||||
|
int sequence = existing.sequenceGenerator.computeIfAbsent(featureName, key -> new AtomicInteger()).getAndIncrement();
|
||||||
|
if (sequence > 0) {
|
||||||
|
featureName += sequence;
|
||||||
|
}
|
||||||
this.sequenceGenerator = existing.sequenceGenerator;
|
this.sequenceGenerator = existing.sequenceGenerator;
|
||||||
this.generatedClasses = existing.generatedClasses.withFeatureNamePrefix(featureName);
|
this.generatedClasses = existing.generatedClasses.withFeatureNamePrefix(featureName);
|
||||||
this.generatedFiles = existing.generatedFiles;
|
this.generatedFiles = existing.generatedFiles;
|
||||||
|
|
|
@ -176,19 +176,6 @@ public class GeneratedClasses {
|
||||||
return addForFeatureComponent(featureName, ClassName.get(targetComponent), type);
|
return addForFeatureComponent(featureName, ClassName.get(targetComponent), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new {@link GeneratedClasses} instance using the specified feature
|
|
||||||
* name prefix to qualify generated class names for a dedicated round of code
|
|
||||||
* generation.
|
|
||||||
* @param featureNamePrefix the feature name prefix to use
|
|
||||||
* @return a new instance for the specified feature name prefix
|
|
||||||
* @since 6.0.12
|
|
||||||
*/
|
|
||||||
public GeneratedClasses withFeatureNamePrefix(String featureNamePrefix) {
|
|
||||||
return new GeneratedClasses(this.classNameGenerator.withFeatureNamePrefix(featureNamePrefix),
|
|
||||||
this.classes, this.classesByOwner);
|
|
||||||
}
|
|
||||||
|
|
||||||
private GeneratedClass createAndAddGeneratedClass(String featureName,
|
private GeneratedClass createAndAddGeneratedClass(String featureName,
|
||||||
@Nullable ClassName targetComponent, Consumer<TypeSpec.Builder> type) {
|
@Nullable ClassName targetComponent, Consumer<TypeSpec.Builder> type) {
|
||||||
|
|
||||||
|
@ -212,6 +199,18 @@ public class GeneratedClasses {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new {@link GeneratedClasses} instance using the specified feature
|
||||||
|
* name prefix to qualify generated class names for a dedicated round of code
|
||||||
|
* generation.
|
||||||
|
* @param featureNamePrefix the feature name prefix to use
|
||||||
|
* @return a new instance for the specified feature name prefix
|
||||||
|
*/
|
||||||
|
GeneratedClasses withFeatureNamePrefix(String featureNamePrefix) {
|
||||||
|
return new GeneratedClasses(this.classNameGenerator.withFeatureNamePrefix(featureNamePrefix),
|
||||||
|
this.classes, this.classesByOwner);
|
||||||
|
}
|
||||||
|
|
||||||
private record Owner(String featureNamePrefix, String featureName, @Nullable ClassName target) {
|
private record Owner(String featureNamePrefix, String featureName, @Nullable ClassName target) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ package org.springframework.test.context.aot;
|
||||||
|
|
||||||
import org.springframework.aot.generate.ClassNameGenerator;
|
import org.springframework.aot.generate.ClassNameGenerator;
|
||||||
import org.springframework.aot.generate.DefaultGenerationContext;
|
import org.springframework.aot.generate.DefaultGenerationContext;
|
||||||
import org.springframework.aot.generate.GeneratedClasses;
|
|
||||||
import org.springframework.aot.generate.GeneratedFiles;
|
import org.springframework.aot.generate.GeneratedFiles;
|
||||||
import org.springframework.aot.hint.RuntimeHints;
|
import org.springframework.aot.hint.RuntimeHints;
|
||||||
|
|
||||||
|
@ -49,16 +48,13 @@ class TestContextGenerationContext extends DefaultGenerationContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new {@link TestContextGenerationContext} instance backed by the
|
* Create a new {@link TestContextGenerationContext} instance based on the
|
||||||
* specified {@link GeneratedClasses}, {@link GeneratedFiles}, and
|
* supplied {@code existing} context and feature name.
|
||||||
* {@link RuntimeHints}.
|
* @param existing the existing context upon which to base the new one
|
||||||
* @param generatedClasses the generated classes
|
* @param featureName the feature name to use
|
||||||
* @param generatedFiles the generated files
|
|
||||||
* @param runtimeHints the runtime hints
|
|
||||||
*/
|
*/
|
||||||
private TestContextGenerationContext(GeneratedClasses generatedClasses, GeneratedFiles generatedFiles,
|
private TestContextGenerationContext(TestContextGenerationContext existing, String featureName) {
|
||||||
RuntimeHints runtimeHints, String featureName) {
|
super(existing, featureName);
|
||||||
super(generatedClasses, generatedFiles, runtimeHints);
|
|
||||||
this.featureName = featureName;
|
this.featureName = featureName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,8 +63,8 @@ class TestContextGenerationContext extends DefaultGenerationContext {
|
||||||
* Create a new {@link TestContextGenerationContext} instance using the specified
|
* Create a new {@link TestContextGenerationContext} instance using the specified
|
||||||
* feature name to qualify generated assets for a dedicated round of code generation.
|
* feature name to qualify generated assets for a dedicated round of code generation.
|
||||||
* <p>If <em>this</em> {@code TestContextGenerationContext} has a configured feature
|
* <p>If <em>this</em> {@code TestContextGenerationContext} has a configured feature
|
||||||
* name, the supplied feature name will be appended to the existing feature name
|
* name, the existing feature name will prepended to the supplied feature name in
|
||||||
* in order to avoid naming collisions.
|
* order to avoid naming collisions.
|
||||||
* @param featureName the feature name to use
|
* @param featureName the feature name to use
|
||||||
* @return a specialized {@link TestContextGenerationContext} for the specified
|
* @return a specialized {@link TestContextGenerationContext} for the specified
|
||||||
* feature name
|
* feature name
|
||||||
|
@ -78,8 +74,7 @@ class TestContextGenerationContext extends DefaultGenerationContext {
|
||||||
if (this.featureName != null) {
|
if (this.featureName != null) {
|
||||||
featureName = this.featureName + featureName;
|
featureName = this.featureName + featureName;
|
||||||
}
|
}
|
||||||
GeneratedClasses generatedClasses = getGeneratedClasses().withFeatureNamePrefix(featureName);
|
return new TestContextGenerationContext(this, featureName);
|
||||||
return new TestContextGenerationContext(generatedClasses, getGeneratedFiles(), getRuntimeHints(), featureName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue