Class EntityPropertiesEmitter<T extends EntityProperties>
java.lang.Object
com.atlassian.bamboo.specs.codegen.emitters.value.EntityPropertiesEmitter<T>
- All Implemented Interfaces:
CodeEmitter<T>
- Direct Known Subclasses:
AnyNotificationRecipientEmitter
,AnyNotificationTypeEmitter
,AnyVcsRepositoryViewerEmitter
,ArtifactItemEmitter
,BaseVcsTaskEmitter
,BranchCleanupEmitter
,BuildWarningParserTaskEmitter
,CheckoutSpecEmitter
,DockerBuildImageEmitter
,DockerRegistryEmitter
,DockerRunContainerEmitter
,PermissionPropertiesEmitter
,PlanIdentifierEmitter
,ScheduledTriggerEmitter
,ScpTaskEmitter
,SharedCredentialsIdentifierEmitter
,SshTaskEmitter
public class EntityPropertiesEmitter<T extends EntityProperties>
extends Object
implements CodeEmitter<T>
Default code generator for any
EntityProperties
This class can be extended to implement more specialised generators.
Note that the implementation is stateful.-
Field Summary
Modifier and TypeFieldDescriptionprotected Class<?>
Builder class associated with given properties type.Fields that should be skipped inemitFields(CodeGenerationContext, EntityProperties)
. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected EntityProperties
createDefaultObject
(EntityProperties rootObject) Creates instance of theEntityProperties
that contains default values.@NotNull String
emitCode
(@NotNull CodeGenerationContext context, T entity) Generates code for properties class.protected String
emitConstructorInvocation
(@NotNull CodeGenerationContext context, T entity) Generates constructor invocation of the builder class.protected String
emitFields
(@NotNull CodeGenerationContext context, @NotNull EntityProperties entity) Generate code for all fields of the class that are not already covered byemitConstructorInvocation(CodeGenerationContext, EntityProperties)
not contained infieldsToSkip
and not annotated withSkipCodeGen
.protected String
emitFieldValue
(CodeGenerationContext context, EntityProperties entity, Field field) Generates value of a field.protected @Nullable Field
protected boolean
hasPublicConstructor
(Class<?> builderClass, Class<?>... argTypes) protected void
initBuilderClass
(T entity) Default method of findingbuilderClass
.
-
Field Details
-
builderClass
Builder class associated with given properties type. -
fieldsToSkip
Fields that should be skipped inemitFields(CodeGenerationContext, EntityProperties)
. Extending classes can use this field to be able to add specialised handling for some fields, while still being able to delegate handling for the rest of the class to default implementation.
-
-
Constructor Details
-
EntityPropertiesEmitter
public EntityPropertiesEmitter()
-
-
Method Details
-
findField
-
hasPublicConstructor
-
emitConstructorInvocation
protected String emitConstructorInvocation(@NotNull @NotNull CodeGenerationContext context, @NotNull T entity) throws CodeGenerationException Generates constructor invocation of the builder class.- Throws:
CodeGenerationException
-
emitFieldValue
protected String emitFieldValue(CodeGenerationContext context, EntityProperties entity, Field field) throws CodeGenerationException Generates value of a field. Used to generate constructor invocation.- Throws:
CodeGenerationException
-
createDefaultObject
Creates instance of theEntityProperties
that contains default values. The values are then compared to the actual field values of the instance the code is generated for. If the values match it is assumed that invocation of the respective setter is not necessary. The object is generated by trying the following:- static method annotated with
DefaultFieldValues
- a parameterless constructor
- static method annotated with
-
emitFields
protected String emitFields(@NotNull @NotNull CodeGenerationContext context, @NotNull @NotNull EntityProperties entity) throws CodeGenerationException Generate code for all fields of the class that are not already covered byemitConstructorInvocation(CodeGenerationContext, EntityProperties)
not contained infieldsToSkip
and not annotated withSkipCodeGen
. This involves finding a matching setter method, determining the appropriate code generator and generating method invocation and its arguments.- Throws:
CodeGenerationException
-
initBuilderClass
Default method of findingbuilderClass
. Extending class can set the field explicitly to skip the default search algorithm.- Throws:
CodeGenerationException
-
emitCode
@NotNull public @NotNull String emitCode(@NotNull @NotNull CodeGenerationContext context, @NotNull T entity) throws CodeGenerationException Generates code for properties class. This includes generating invocation of the constructor of the appropriate builder followed by invocations of its setters.- Specified by:
emitCode
in interfaceCodeEmitter<T extends EntityProperties>
- Throws:
CodeGenerationException
-