快速业务通道

使用EMF进行元建模:生成具体、可重用的Java代码片段 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
StringBuffer(); > iname = null; > stm = (Statement)iterator.next(); > if (stm instanceof LiteralAssignment) {%> > <%= stm.getAssignment().getName()%> = <%=\ >((LiteralAssignment)stm).getValue()%>; > <%} else > // > if (stm instanceof FieldReferenceAssignment) { > Access ax = (Access)stm; > if (stm.getAssignment() != null) { > varString.append(stm.getAssignment().getName()); > varString.append(" = "); > } > if ( ax.getStaticType() != null) { > // STATIC > iname = ax.getStaticType().getInstanceClassName(); > } else { > // NON STATIC > iname = ax.getTarget().getName(); > } %> > <%=varString.toString()%><%=iname%>.<%=ax.getAccessName()%>; > <% } else > if (stm instanceof Invoke) { > // INVOKE > Invoke iv = ((Invoke)stm); > if (stm.getAssignment() != null) { > varString.append(stm.getAssignment().getName()); > varString.append(" = "); > } > for (int p = 0; p < iv.getArgs().size(); p++) {\ >paramsString.append(iv.getArgs().get(p).getName()); > if ( p + 1 < iv.getArgs().size() ) { > paramsString.append(" , "); > } > } > if (iv.getStaticType() != null) { > // STATIC > iname = iv.getStaticType().getInstanceClassName(); > } else { > // NON STATIC > iname = iv.getTarget().getName(); > } %> > <%=varString.toString()%><%=iname%>.<%=iv.getAccessName()\ >%>(<%=paramsString.toString()%>); > <% } >} // STATEMENTS > if (opx.getReturnRef() != null) { %> > return > <%=opx.getReturnRef().getName()%>; > <% } >} // EOPERATIONIMPL %>

使用EMF进行元建模:生成具体、可重用的Java代码片段(10)

时间:2010-11-03 IBM Ken McNeill

对 JET 的详细讨论超出了本文的范围。但是,因为 JET 模板对我们的操作过程至关重要,我们将在伪代码方面回顾一下模板的内容。请记住,在处理模板之前,第一个变量 genOperation 已经被 Ecore/JET 预初始化。

清单 4. genOperation 被 Ecore/JET 预初始化

Is this GenOperation is an EOperationImpl?    If false, emit default UnsupportedOperationException   STOP; Else, cast it to EOperationImpl;   continue; Find and declare all elements of type LocalVariable, initializing Java Objects to null; Iterate through all Statements;   Emit Java code according to the subtype; Does the implementation return something?    If yes, emit the return statement;

在构建具体模型之前,需要执行一些操作。首先,在 templates/model/Class.javajet 顶部,我们必须将以下内容添加到导入列表(标记为粗体的前两行):

<%@ jet package="org.eclipse.emf.codegen.ecore.templates.model" imports="ecorex.* org.eclipse.emf.common.util.* \ java.util.* org.eclipse.emf.codegen.ecore.genmodel.*"…

当然,EcoreX 包是经过扩展的元模型。接下来,我们需要为我们的具体模型(My.ecore,类型

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号