如果你有一個XMI,只是想從其生成的代碼,你並不需要的Xtext在所有。 與Java項目剛開始(我會使用一個插件項目,重用依賴關係管理),並開始編碼:
import org.eclipse.emf.common.util.URI
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.resource.Resource$Factory$Registry
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
class MyCodeGenerator {
def static void main(String[] args) {
new MyCodeGenerator().generate("mymodel.xmi")
}
def generate(String file) {
doEMFSetup
val resourceSet = new ResourceSetImpl
val resource = resourceSet.getResource(URI.createURI(file), true)
for (content : resource.contents) {
generateCode(content)
}
}
def dispatch generateCode(MySpecialType it) '''
public class «name» {
«FOR member : members»
«ENDFOR»
}
'''
def dispatch generateCode(MyMember it) '''
private «type» «name»;
...
'''
def doEMFSetup() {
// EPackage$Registry.INSTANCE.put(MyPackage.eINSTANCE.nsURI, MyPackage.eINSTANCE)
Resource$Factory.Registry.INSTANCE.extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl);
}
}
你需要添加到您的清單中的依存關係:
Require-Bundle: org.eclipse.xtend.lib,
com.google.guava,
org.eclipse.xtext.xbase.lib,
org.eclipse.emf.common,
org.eclipse.emf.ecore,
org.eclipse.emf.ecore.xmi
非常感謝! XMI是某個元模型的實例,你的代碼是否考慮過這個(即加載這個元模型?)。或者XMI格式足夠描述,並以某種方式指向元模型? –
所以我可能需要genmodel的東西是正確的,並添加該項目作爲這個新創建的插件項目的依賴項? –
很好,它的工作原理!哈。你認爲將這個例子放在XTend網站上可能有用嗎?對我來說,這聽起來像XTend的一個共同目的(即使用它作爲XP的替代品)。 –