xtext 프로젝트에서 작업 중이며 .xtext 파일을 통해 오브젝트를 생성 중입니다. 생성 된 개체 중 하나에 새 특성을 추가하려고합니다. http://christiandietrich.wordpress.com/2011/07/22/customizing-xtext-metamodel-inference-using-xtend2/ 다음 코드는 ObjectValue 에 임시 변수를 생성하지만 temp는 MyObject 유형이어야합니다.xtend 프로젝트에서 xtend로 코드 생성
어떻게 그렇게합니까? 그것에 대해 읽을 수있는 곳은 어디입니까? 우선
import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage
import org.eclipse.emf.common.util.BasicEMap$Entry
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.EcoreFactory
import org.eclipse.emf.ecore.EcorePackage
import org.eclipse.xtext.GeneratedMetamodel
import org.eclipse.xtext.xtext.ecoreInference.IXtext2EcorePostProcessor
class CodeGeneratorClass implements IXtext2EcorePostProcessor {
override process(GeneratedMetamodel metamodel) {
metamodel.EPackage.process
}
def process(EPackage p) {
for (c : p.EClassifiers.filter(typeof(EClass))) {
if (c.name == "ObjectValue") {
c.handle
}
}
}
def handle (EClass c) {
val attr = EcoreFactory::eINSTANCE.createEAttribute
attr.name = "temp"
attr.EType = EcorePackage::eINSTANCE.EString
c.EStructuralFeatures += attr
}
}
위대한! 고맙습니다! 내 객체를 EDataType으로 어떻게 만들 수 있습니까? –
@DanaKlein : 흠. 'EDataType'을 정의하는 몇 가지 방법이 있습니다. 그리고'EDataType'이 실제로 옳은지 아닌지는 또 하나의 질문입니다. 쉽고 간단한 것들을 위해서'EcorePackage'에서 미리 정의 된 것을 사용할 수 있습니다 -'EDataType'을 반환하는 모든'getXyz' 메소드. 자신의 EDataType을 실제로 정의하려면 먼저 EMF에 대한 책을 참조해야합니다. –
고마워요! Iterator 객체를 반환 할 수 있습니까? s.t. 생성 된 코드는 다음과 같을 것입니다 : public Iterator getIterator() {} –