0
저는 DSL을 정의하고 M2M과 M2T (코드 생성)를 수행하여 모델 중심 개발을 달성하고자합니다. 코드 생성을 위해 필자는 XPand 및 템플릿 정의로 작업하기로했습니다. Java 코드에서 템플릿 확장을 호출하는 방법을 설명하는 샘플 코드 또는 링크를 제공 할 수 있습니까?프로그래밍 방식으로 Java 클래스에서 Xpand 코드 생성기를 실행할 수 있습니까?
P. 필자는 이클립스 밖에서 독립 실행 형 모드로 이러한 것들을 실행하는 것이 매우 어렵 기 때문에 간단한 Java 유틸리티를 작성하여 시작했다.
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
Map<String, Object> factoryMap = reg.getExtensionToFactoryMap();
factoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
ResourceSet resourceSet = new ResourceSetImpl();
EPackage PSM_Pkg = MyDSLPackage.eINSTANCE;
resourceSet.getPackageRegistry().put(PSM_Pkg.getNsURI(), PSM_Pkg);
Resource resource = resourceSet.getResource(Constants.PSM_URI, true);
EList<EObject> inObjects = resource.getContents();
// Xpand
URI outURI = URI.createURI("file:///C:/Users/...");
Output out = new OutputImpl();
Outlet outlet = new Outlet(outURI.toFileString());
out.addOutlet(outlet);
XpandExecutionContextImpl executionContext = new XpandExecutionContextImpl(out, null);
// Configure the metamodels
EmfMetaModel emfMetaModel = new EmfMetaModel();
emfMetaModel.setMetaModelPackage(MyDSLlPackage.class.getName());
executionContext.registerMetaModel(emfMetaModel);
XpandFacade xpandFacade = XpandFacade.create(executionContext);
Object[] params = null;
System.out.println(inObjects.get(0));
xpandFacade.evaluate("template::Template::main", inObjects.get(0), params);
System.out.println("Code generated.");
무슨 패키지를 가져 않은 : 여기 – csadan