Skip to content

Commit fe4313a

Browse files
Apply extensions for setters also to static meta classes
1 parent 04903e7 commit fe4313a

File tree

13 files changed

+227
-57
lines changed

13 files changed

+227
-57
lines changed

core/esmf-aspect-model-java-generator/src/main/resources/java-pojo-setter-lib.vm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#else
3232
#set( $propertyType = $util.getPropertyType( $property, false, $codeGenerationConfig ) )
3333
#if( $property.getExtends().isPresent() )@Override #end
34-
public $returnType $methodName( final $propertyType $property.getPayloadName() ) {
34+
public $returnType $methodName( final $propertyType $property.getPayloadName() ) {
3535
this.$property.getPayloadName() = $property.getPayloadName();
3636
#if( !$codeGenerationConfig.setterStyle().name().equals( "STANDARD" ) )
3737
return this;

core/esmf-aspect-model-java-generator/src/main/resources/java-static-class-property-lib.vm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ public Class<$propertyType> getPropertyType() {
192192
return object.$getterName();
193193
}
194194

195+
#if ( $codeGenerationConfig.enableSetters() )
196+
#set( $setterName = $util.setterName( $property, $codeGenerationConfig ) )
197+
@Override
198+
public void setValue( ${element.getName()} object, $propertyType value ) {
199+
object.$setterName( value );
200+
}
201+
#end
202+
195203
#if( $util.hasUnit( $property.getCharacteristic().get() ) )
196204
$codeGenerationConfig.importTracker().importExplicit( $Unit )
197205
$codeGenerationConfig.importTracker().importExplicit( $Units )

core/esmf-aspect-model-java-generator/src/test/java/org/eclipse/esmf/aspectmodel/java/ExtendedStaticMetaModelFunctionalityTest.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public class ExtendedStaticMetaModelFunctionalityTest extends StaticMetaModelGen
3535
@Test
3636
void testComputedProperties() throws IOException, ReflectiveOperationException {
3737
final TestAspect aspect = TestAspect.ASPECT_WITH_EXTENDED_ENUMS;
38-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
38+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
39+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
3940

4041
final Class<?> aspectClass = findGeneratedClass( result, "AspectWithExtendedEnums" );
4142
final Class<?> metaAspectClass = findGeneratedClass( result, "MetaAspectWithExtendedEnums" );
@@ -67,7 +68,8 @@ void testComputedProperties() throws IOException, ReflectiveOperationException {
6768
@Test
6869
void testPropertyChain() throws IOException, ReflectiveOperationException {
6970
final TestAspect aspect = TestAspect.ASPECT_WITH_NESTED_ENTITY;
70-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
71+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
72+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
7173

7274
final Class<?> aspectClass = findGeneratedClass( result, "AspectWithNestedEntity" );
7375
final Class<?> entityClass = findGeneratedClass( result, "Entity" );
@@ -114,7 +116,8 @@ void testPropertyChain() throws IOException, ReflectiveOperationException {
114116
@Test
115117
void testCollectionPropertyChain() throws IOException, ReflectiveOperationException {
116118
final TestAspect aspect = TestAspect.ASPECT_WITH_ENTITY_WITH_NESTED_ENTITY_LIST_PROPERTY;
117-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
119+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
120+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
118121

119122
final Class<?> aspectClass = findGeneratedClass( result, "AspectWithEntityWithNestedEntityListProperty" );
120123
final Class<?> entityClass = findGeneratedClass( result, "Entity" );
@@ -154,7 +157,8 @@ void testCollectionPropertyChain() throws IOException, ReflectiveOperationExcept
154157
@Test
155158
void testCollectionPropertyChainWithNullCollectionInBetween() throws IOException, ReflectiveOperationException {
156159
final TestAspect aspect = TestAspect.ASPECT_WITH_NESTED_ENTITY_LIST;
157-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
160+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
161+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
158162

159163
final Class<?> aspectClass = findGeneratedClass( result, "AspectWithNestedEntityList" );
160164
final Class<?> entityClass = findGeneratedClass( result, "TestFirstEntity" );
@@ -189,7 +193,8 @@ void testCollectionPropertyChainWithNullCollectionInBetween() throws IOException
189193
@Test
190194
void testSinglePropertyPredicates() throws IOException, ReflectiveOperationException {
191195
final TestAspect aspect = TestAspect.ASPECT_WITH_NESTED_ENTITY_LIST;
192-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
196+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
197+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
193198

194199
final Class<?> aspectClass = findGeneratedClass( result, "AspectWithNestedEntityList" );
195200
final Class<?> entityClass = findGeneratedClass( result, "TestFirstEntity" );
@@ -245,7 +250,8 @@ void testSinglePropertyPredicates() throws IOException, ReflectiveOperationExcep
245250
@Test
246251
void testCollectionPropertyPredicates() throws IOException, ReflectiveOperationException {
247252
final TestAspect aspect = TestAspect.ASPECT_WITH_NESTED_ENTITY_LIST;
248-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
253+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
254+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
249255

250256
final Class<?> aspectClass = findGeneratedClass( result, "AspectWithNestedEntityList" );
251257
final Class<?> entityClass = findGeneratedClass( result, "TestFirstEntity" );

core/esmf-aspect-model-java-generator/src/test/java/org/eclipse/esmf/aspectmodel/java/StaticClassGenerationResult.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.util.List;
2121
import java.util.Map;
22+
import java.util.Optional;
2223
import java.util.Set;
2324
import java.util.stream.Collectors;
2425

@@ -32,6 +33,7 @@
3233
import com.github.javaparser.ast.body.MethodDeclaration;
3334
import com.github.javaparser.ast.body.VariableDeclarator;
3435
import com.github.javaparser.ast.expr.Expression;
36+
import com.github.javaparser.ast.expr.ObjectCreationExpr;
3537
import com.github.javaparser.ast.stmt.Statement;
3638

3739
public class StaticClassGenerationResult extends GenerationResult {
@@ -143,4 +145,44 @@ public void assertMethods( final String className, final Map<String, String> exp
143145
assertThat( actualBody ).isEqualTo( expectedBody );
144146
} );
145147
}
148+
149+
/**
150+
* Allows the assertion of method bodies for static meta properties in a generated meta class.
151+
*
152+
* Method bodies are asserted in a relaxed way:
153+
* <ul>
154+
* <li>all whitespace is trimmed before comparing</li>
155+
* <li>the given method body may also be just a part of the full method body, i.e. the check is performed using .contains()</li>
156+
* </ul>
157+
*
158+
* @param className the name of the meta class
159+
* @param propertyName the name of the property (given in CONSTANT_CASE)
160+
* @param expectedMethodBodies the expected (partial) contents of the static meta property methods, where the key is the method name
161+
*/
162+
public void assertStaticMetaPropertyMethods( final String className, final String propertyName,
163+
final Map<String, String> expectedMethodBodies ) {
164+
assertThat( compilationUnits ).containsKey( className );
165+
166+
final List<FieldDeclaration> fields = compilationUnits.get( className ).findAll( FieldDeclaration.class );
167+
for ( final FieldDeclaration field : fields ) {
168+
final String fieldName = field.resolve().getName();
169+
if ( !propertyName.equals( fieldName ) ) {
170+
continue;
171+
}
172+
173+
assertThat( field.getVariables()
174+
.stream()
175+
.map( VariableDeclarator::getInitializer )
176+
.flatMap( Optional::stream )
177+
.filter( exp -> exp instanceof ObjectCreationExpr )
178+
.map( ObjectCreationExpr.class::cast )
179+
.flatMap(
180+
oc -> oc.getChildNodes().stream().filter( n -> n instanceof MethodDeclaration ).map( MethodDeclaration.class::cast ) )
181+
.anyMatch( md -> md.getBody()
182+
.map( b -> b.getStatements().stream().anyMatch(
183+
s -> expectedMethodBodies.containsKey( md.getName().toString() ) && s.toString().trim()
184+
.contains( expectedMethodBodies.get( md.getName().toString() ).trim() ) ) )
185+
.orElse( false ) ) ).isTrue();
186+
}
187+
}
146188
}

core/esmf-aspect-model-java-generator/src/test/java/org/eclipse/esmf/aspectmodel/java/StaticMetaModelBaseAttributesTest.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ class StaticMetaModelBaseAttributesTest extends StaticMetaModelGeneratorTest {
2727
@Test
2828
void testMetaModelBaseAttributesOfGeneratedProperty() throws IOException {
2929
final TestAspect aspect = TestAspect.ASPECT_WITH_BOOLEAN;
30-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
30+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
31+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
3132
result.assertNumberOfFiles( 2 );
3233

3334
final ImmutableSet<String> expectedArguments = ImmutableSet.<String> builder()
@@ -42,7 +43,8 @@ void testMetaModelBaseAttributesOfGeneratedProperty() throws IOException {
4243
@Test
4344
void testMetaModelBaseAttributesOfGeneratedPropertyWithAllAttributes() throws IOException {
4445
final TestAspect aspect = TestAspect.ASPECT_WITH_PROPERTY_WITH_ALL_BASE_ATTRIBUTES;
45-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
46+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
47+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
4648
result.assertNumberOfFiles( 2 );
4749

4850
final String expectedMetaModelBaseAttributeBuilderCall = "MetaModelBaseAttributes.builder()"
@@ -62,7 +64,8 @@ void testMetaModelBaseAttributesOfGeneratedPropertyWithAllAttributes() throws IO
6264
@Test
6365
void testMetaModelBaseAttributesOfGeneratedPropertyWithPreferredNames() throws IOException {
6466
final TestAspect aspect = TestAspect.ASPECT_WITH_PROPERTY_WITH_PREFERRED_NAMES;
65-
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect ) );
67+
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode().apply( getGenerators( aspect, false,
68+
JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
6669
result.assertNumberOfFiles( 2 );
6770

6871
final String expectedMetaModelBaseAttributeBuilderCall = "MetaModelBaseAttributes.builder()"
@@ -79,7 +82,7 @@ void testMetaModelBaseAttributesOfGeneratedPropertyWithPreferredNames() throws I
7982
void testMetaModelBaseAttributesOfGeneratedPropertyWithDescriptions() throws IOException {
8083
final TestAspect aspect = TestAspect.ASPECT_WITH_PROPERTY_WITH_DESCRIPTIONS;
8184
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
82-
.apply( getGenerators( aspect ) );
85+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
8386
result.assertNumberOfFiles( 2 );
8487

8588
final String expectedMetaModelBaseAttributeBuilderCall = "MetaModelBaseAttributes.builder()"
@@ -96,7 +99,7 @@ void testMetaModelBaseAttributesOfGeneratedPropertyWithDescriptions() throws IOE
9699
void testMetaModelBaseAttributesOfGeneratedPropertyWithSee() throws IOException {
97100
final TestAspect aspect = TestAspect.ASPECT_WITH_PROPERTY_WITH_SEE;
98101
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
99-
.apply( getGenerators( aspect ) );
102+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
100103
result.assertNumberOfFiles( 2 );
101104

102105
final String expectedMetaModelBaseAttributeBuilderCall = "MetaModelBaseAttributes.builder()"
@@ -113,7 +116,7 @@ void testMetaModelBaseAttributesOfGeneratedPropertyWithSee() throws IOException
113116
void testGeneratedMetaModelContainsRequiredMethods() throws IOException {
114117
final TestAspect aspect = TestAspect.ASPECT_WITH_BOOLEAN;
115118
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
116-
.apply( getGenerators( aspect ) );
119+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
117120
result.assertNumberOfFiles( 2 );
118121

119122
final ImmutableMap<String, String> expectedMethodBodies = ImmutableMap.<String, String> builder()
@@ -135,7 +138,7 @@ void testGeneratedMetaModelContainsRequiredMethods() throws IOException {
135138
void testGeneratedMetaModelContainsOptionalMethods() throws IOException {
136139
final TestAspect aspect = TestAspect.ASPECT_WITH_ALL_BASE_ATTRIBUTES;
137140
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
138-
.apply( getGenerators( aspect ) );
141+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
139142
result.assertNumberOfFiles( 2 );
140143

141144
final String getPreferredNamesBody = "return new HashSet<>() {\n"
@@ -176,7 +179,7 @@ void testGeneratedMetaModelContainsOptionalMethods() throws IOException {
176179
void testGeneratedMetaModelContainsGetPreferredNamesMethod() throws IOException {
177180
final TestAspect aspect = TestAspect.ASPECT_WITH_PREFERRED_NAMES;
178181
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
179-
.apply( getGenerators( aspect ) );
182+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
180183
result.assertNumberOfFiles( 2 );
181184

182185
final String getPreferredNamesBody = "return new HashSet<>() {\n"
@@ -207,7 +210,7 @@ void testGeneratedMetaModelContainsGetPreferredNamesMethod() throws IOException
207210
void testGeneratedMetaModelContainsGetDescriptionsMethod() throws IOException {
208211
final TestAspect aspect = TestAspect.ASPECT_WITH_DESCRIPTIONS;
209212
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
210-
.apply( getGenerators( aspect ) );
213+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
211214
result.assertNumberOfFiles( 2 );
212215

213216
final String getDescriptionsBody = "return new HashSet<>() {\n"
@@ -238,7 +241,7 @@ void testGeneratedMetaModelContainsGetDescriptionsMethod() throws IOException {
238241
void testGeneratedMetaModelContainsGetSeeMethod() throws IOException {
239242
final TestAspect aspect = TestAspect.ASPECT_WITH_PROPERTY_WITH_SEE;
240243
final StaticClassGenerationResult result = TestContext.generateStaticAspectCode()
241-
.apply( getGenerators( aspect ) );
244+
.apply( getGenerators( aspect, false, JavaCodeGenerationConfig.SetterStyle.STANDARD ) );
242245
result.assertNumberOfFiles( 2 );
243246

244247
final ImmutableMap<String, String> expectedMethodBodies = ImmutableMap.<String, String> builder()

core/esmf-aspect-model-java-generator/src/test/java/org/eclipse/esmf/aspectmodel/java/StaticMetaModelGeneratorTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,16 @@ Collection<JavaGenerator> getGenerators( final TestAspect testAspect, final bool
5353
return List.of( pojoGenerator, staticGenerator );
5454
}
5555

56-
Collection<JavaGenerator> getGenerators( final TestAspect testAspect ) {
56+
Collection<JavaGenerator> getGenerators( final TestAspect testAspect, final boolean enableSetters,
57+
final JavaCodeGenerationConfig.SetterStyle setterStyle ) {
5758
final AspectModel aspectModel = TestResources.load( testAspect );
5859
final Aspect aspect = aspectModel.aspect();
5960
final JavaCodeGenerationConfig config = JavaCodeGenerationConfigBuilder.builder()
6061
.enableJacksonAnnotations( false )
6162
.executeLibraryMacros( false )
6263
.packageName( aspect.urn().getNamespaceMainPart() )
64+
.enableSetters( enableSetters )
65+
.setterStyle( setterStyle )
6366
.build();
6467
final JavaGenerator pojoGenerator = new AspectModelJavaGenerator( aspect, config );
6568
final JavaGenerator staticGenerator = new StaticMetaModelJavaGenerator( aspect, config );

0 commit comments

Comments
 (0)