Skip to content
Snippets Groups Projects
Commit ed3015bd authored by Andreas Fehn's avatar Andreas Fehn
Browse files

Implement standalone code-only generation

parent 38ed7eea
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,16 @@ repositories {
dependencies {
implementation(kotlin("stdlib-jdk8"))
mapOf(
"common" to "2.12.0",
"ecore" to "2.12.0",
"ecore.xmi" to "2.12.0",
"codegen" to "2.11.0",
"codegen.ecore" to "2.11.0"
).forEach { artifact, version ->
implementation("org.eclipse.emf:org.eclipse.emf.$artifact:$version")
}
}
tasks.withType<KotlinCompile> {
......
package fehnomenal.ecore2java
import org.eclipse.emf.codegen.ecore.generator.Generator
import org.eclipse.emf.codegen.ecore.genmodel.GenModel
import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage
import org.eclipse.emf.codegen.ecore.genmodel.generator.GenBaseGeneratorAdapter
import org.eclipse.emf.codegen.merge.java.JControlModel
import org.eclipse.emf.common.util.BasicMonitor
import org.eclipse.emf.common.util.URI
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
import java.io.File
fun main(args: Array<String>) {
GenModelPackage.eINSTANCE
Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.let {
it["genmodel"] = XMIResourceFactoryImpl()
it["ecore"] = XMIResourceFactoryImpl()
}
generate(File(args[0]), File(args[1]))
}
private fun generate(genModelFile: File, targetFolder: File) {
val genModel = ResourceSetImpl().run {
uriConverter.uriMap[URI.createURI("platform:/resource/")] = URI.createFileURI(targetFolder.absolutePath + File.separator)
val rs = getResource(URI.createFileURI(genModelFile.absolutePath), true)
(rs.contents[0] as GenModel).apply {
modelDirectory = "."
setCanGenerate(true)
}
}
val generator = object : Generator() {
override fun getJControlModel() = JControlModel()
}
generator.adapterFactoryDescriptorRegistry.addDescriptor(GenModelPackage.eNS_URI, OnlyCodeGenModelGeneratorAdapterFactory.Descriptor)
generator.input = genModel
generator.generate(genModel, GenBaseGeneratorAdapter.MODEL_PROJECT_TYPE, BasicMonitor.Printing(System.out))
}
package fehnomenal.ecore2java
import org.eclipse.emf.codegen.ecore.generator.GeneratorAdapterFactory
import org.eclipse.emf.codegen.ecore.genmodel.GenModel
import org.eclipse.emf.codegen.ecore.genmodel.generator.GenModelGeneratorAdapter
import org.eclipse.emf.codegen.ecore.genmodel.generator.GenModelGeneratorAdapterFactory
import org.eclipse.emf.common.util.Monitor
class OnlyCodeGenModelGeneratorAdapterFactory : GenModelGeneratorAdapterFactory() {
object Descriptor : GeneratorAdapterFactory.Descriptor {
override fun createAdapterFactory() = OnlyCodeGenModelGeneratorAdapterFactory()
}
private val onlyCodeGenModelGeneratorAdapter = object : GenModelGeneratorAdapter(this) {
override fun generateModelBuildProperties(genModel: GenModel?, monitor: Monitor?) = Unit
override fun generateModelManifest(genModel: GenModel?, monitor: Monitor?) = Unit
override fun generateModelModule(genModel: GenModel?, monitor: Monitor?) = Unit
override fun generateModelPluginClass(genModel: GenModel?, monitor: Monitor?) = Unit
override fun generateModelPluginProperties(genModel: GenModel?, monitor: Monitor?) = Unit
}
override fun createGenModelAdapter() = onlyCodeGenModelGeneratorAdapter
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment