RDL-Editor/com.minres.rdl.parent/com.minres.rdl/src/com/minres/rdl/generator/RDLGenerator.xtend

48 lines
1.8 KiB
Plaintext
Raw Normal View History

2017-09-12 12:48:21 +02:00
/*
* generated by Xtext 2.12.0
*/
package com.minres.rdl.generator
import com.minres.rdl.rdl.ComponentDefinition
import com.minres.rdl.rdl.ComponentDefinitionType
2017-09-12 12:48:21 +02:00
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.AbstractGenerator
import org.eclipse.xtext.generator.IFileSystemAccess2
import org.eclipse.xtext.generator.IGeneratorContext
2018-06-04 20:55:10 +02:00
import static extension com.minres.rdl.RdlUtil.*
2017-09-12 12:48:21 +02:00
/**
* Generates code from your model files on save.
*
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation
*/
class RDLGenerator extends AbstractGenerator {
override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
resource.resourceSet.allContents.filter[ it instanceof ComponentDefinition].map[it as ComponentDefinition].forEach[
val gen = it.fileGenerator
if(gen!==null){
val header = gen.generateHeader
2018-06-04 20:55:10 +02:00
if(header!==null && header.length>0) fsa.generateFile(it.effectiveName+'.h', fsa.outputConfig('incl-out'), header)
val source = gen.generateSource
2018-06-04 20:55:10 +02:00
if(source!==null && source.length>0) fsa.generateFile(it.effectiveName+'.cpp', fsa.outputConfig('src-out'), source)
}
]
}
2018-06-04 20:55:10 +02:00
def RdlBaseGenerator fileGenerator(ComponentDefinition definition){
switch(definition.type){
case ComponentDefinitionType.REGFILE: new RegfileGenerator(definition)
case ComponentDefinitionType.ADDRMAP: new AddrmapGenerator(definition)
default: null
}
}
def String outputConfig(IFileSystemAccess2 fsa, String string){
var output_config = string
try {fsa.getURI("", output_config)} catch (Exception e) {output_config ='DEFAULT_OUTPUT'}
return output_config
}
}