Skip to content

Commit 730a2b5

Browse files
committed
refactor(model-api-gen): extract FileGenerator
1 parent a1940fe commit 730a2b5

File tree

7 files changed

+58
-39
lines changed

7 files changed

+58
-39
lines changed

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/internal/ConceptFileGenerator.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,34 +36,34 @@ import java.nio.file.Path
3636

3737
internal class ConceptFileGenerator(
3838
private val concept: ProcessedConcept,
39-
private val outputDir: Path,
39+
override val outputDir: Path,
4040
override val nameConfig: NameConfig,
41-
private val conceptPropertiesInferfaceName: String?,
41+
private val conceptPropertiesInterfaceName: String?,
4242
private val alwaysUseNonNullableProperties: Boolean,
43-
) : NameConfigBasedGenerator(nameConfig) {
43+
) : NameConfigBasedGenerator(nameConfig), FileGenerator {
4444

45-
fun generateFile() {
45+
override fun generateFileSpec(): FileSpec {
4646
val conceptObject = ConceptObjectGenerator(concept, nameConfig).generate()
4747
val conceptWrapperInterface = ConceptWrapperInterfaceGenerator(
4848
concept,
4949
nameConfig,
50-
conceptPropertiesInferfaceName,
50+
conceptPropertiesInterfaceName,
5151
alwaysUseNonNullableProperties,
5252
).generate()
5353
val nodeWrapperInterface = NodeWrapperInterfaceGenerator(concept, nameConfig, alwaysUseNonNullableProperties).generate()
5454
val nodeWrapperImpl = NodeWrapperImplGenerator(concept, nameConfig, alwaysUseNonNullableProperties).generate()
5555

5656
val typeAliasSpec = TypeAliasSpec.builder(concept.conceptTypeAliasName(), concept.conceptWrapperInterfaceType()).build()
5757

58-
FileSpec.builder(concept.language.name, concept.name).runBuild {
58+
return FileSpec.builder(concept.language.name, concept.name).runBuild {
5959
addFileComment(MetaModelGenerator.HEADER_COMMENT)
6060
addType(conceptObject)
6161
addTypeAlias(typeAliasSpec)
6262
addType(conceptWrapperInterface)
6363
addType(nodeWrapperInterface)
6464
addType(nodeWrapperImpl)
6565
addConceptFeatureShortcuts()
66-
}.writeTo(outputDir)
66+
}
6767
}
6868

6969
private fun FileSpec.Builder.addConceptFeatureShortcuts() {

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/internal/EnumFileGenerator.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,14 @@ import org.modelix.metamodel.generator.addDeprecationIfNecessary
3232
import org.modelix.metamodel.generator.runBuild
3333
import java.nio.file.Path
3434

35-
internal class EnumFileGenerator(private val enum: ProcessedEnum, private val outputDir: Path) {
35+
internal class EnumFileGenerator(
36+
private val enum: ProcessedEnum,
37+
override val outputDir: Path,
38+
) : FileGenerator {
3639

3740
private val enumType = ClassName(enum.language.name, enum.name)
3841

39-
fun generateFile() {
40-
buildEnumFileSpec().writeTo(outputDir)
41-
}
42-
43-
private fun buildEnumFileSpec(): FileSpec {
42+
override fun generateFileSpec(): FileSpec {
4443
val generatedEnum = TypeSpec.enumBuilder(enum.name).runBuild {
4544
addDeprecationIfNecessary(enum)
4645
addPrimaryConstructor()
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) 2024.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.modelix.metamodel.generator.internal
18+
19+
import com.squareup.kotlinpoet.FileSpec
20+
import java.nio.file.Path
21+
22+
internal interface FileGenerator {
23+
val outputDir: Path
24+
25+
fun generateFile() {
26+
generateFileSpec().writeTo(outputDir)
27+
}
28+
29+
fun generateFileSpec(): FileSpec
30+
}

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/internal/LanguageFileGenerator.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,18 @@ import java.nio.file.Path
3535

3636
internal class LanguageFileGenerator(
3737
private val language: ProcessedLanguage,
38-
private val outputDir: Path,
38+
override val outputDir: Path,
3939
override val nameConfig: NameConfig,
40-
) : NameConfigBasedGenerator(nameConfig) {
40+
) : NameConfigBasedGenerator(nameConfig), FileGenerator {
4141

42-
fun generateFile() {
43-
val fileSpec = FileSpec.builder(language.generatedClassName().packageName, language.generatedClassName().simpleName).runBuild {
42+
override fun generateFileSpec(): FileSpec {
43+
return FileSpec.builder(
44+
packageName = language.generatedClassName().packageName,
45+
fileName = language.generatedClassName().simpleName,
46+
).runBuild {
4447
addFileComment(MetaModelGenerator.HEADER_COMMENT)
4548
addType(generateLanguage())
4649
}
47-
fileSpec.writeTo(outputDir)
4850
}
4951

5052
private fun generateLanguage(): TypeSpec {

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/internal/MetaPropertiesInterfaceGenerator.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,11 @@ import java.nio.file.Path
2929

3030
internal class MetaPropertiesInterfaceGenerator(
3131
private val languages: ProcessedLanguageSet,
32-
private val outputDir: Path,
32+
override val outputDir: Path,
3333
private val fqInterfaceName: String,
34-
) {
34+
) : FileGenerator {
3535

36-
fun generateFile() {
37-
generateConceptMetaPropertiesInterface().writeTo(outputDir)
38-
}
39-
40-
private fun generateConceptMetaPropertiesInterface(): FileSpec {
36+
override fun generateFileSpec(): FileSpec {
4137
require(fqInterfaceName.contains(".")) { "The name of the concept properties interface does not contain a dot. Use a fully qualified name." }
4238
val interfaceName = ClassName(fqInterfaceName.substringBeforeLast("."), fqInterfaceName.substringAfterLast("."))
4339

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/internal/ModelQLFileGenerator.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,16 @@ import java.nio.file.Path
4343

4444
internal class ModelQLFileGenerator(
4545
private val concept: ProcessedConcept,
46-
private val outputDir: Path,
46+
override val outputDir: Path,
4747
override val nameConfig: NameConfig,
4848
private val alwaysUseNonNullableProperties: Boolean,
49-
) : NameConfigBasedGenerator(nameConfig) {
49+
) : NameConfigBasedGenerator(nameConfig), FileGenerator {
5050

5151
companion object {
5252
private const val PACKAGE_PREFIX = "org.modelix.modelql.gen."
5353
}
5454

55-
fun generateFile() {
56-
buildModelQLFileSpec().writeTo(outputDir)
57-
}
58-
59-
private fun buildModelQLFileSpec(): FileSpec {
55+
override fun generateFileSpec(): FileSpec {
6056
return FileSpec.builder(PACKAGE_PREFIX + concept.language.name, concept.name).runBuild {
6157
addFileComment(MetaModelGenerator.HEADER_COMMENT)
6258
for (feature in concept.getOwnRoles()) {

model-api-gen/src/main/kotlin/org/modelix/metamodel/generator/internal/RegistrationHelperGenerator.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,11 @@ import java.nio.file.Path
3232
internal class RegistrationHelperGenerator(
3333
private val classFqName: String,
3434
private val languages: ProcessedLanguageSet,
35-
private val outputDir: Path,
35+
override val outputDir: Path,
3636
override val nameConfig: NameConfig,
37-
) : NameConfigBasedGenerator(nameConfig) {
37+
) : NameConfigBasedGenerator(nameConfig), FileGenerator {
3838

39-
fun generateFile() {
40-
generateSpec().writeTo(outputDir)
41-
}
42-
43-
private fun generateSpec(): FileSpec {
39+
override fun generateFileSpec(): FileSpec {
4440
require(classFqName.contains(".")) { "The name of the registrationHelper does not contain a dot. Use a fully qualified name." }
4541
val typeName = ClassName(classFqName.substringBeforeLast("."), classFqName.substringAfterLast("."))
4642

0 commit comments

Comments
 (0)