<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- -*- xhtml -*- -->
  <title>针对 NetBeans 6.0、6.1 和 6.5 平台的代码生成器集成教程</title>
  <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta name="AUDIENCE" content="NBUSER"/>
  <meta name="TYPE" content="ARTICLE"/>
  <meta name="EXPIRES" content="N"/>
  <meta name="developer" content="gwielenga@netbeans.org"/>
  <meta name="indexed" content="y"/>
  <meta name="description"
 content="A short guide to using the Code Generator API."/>
<!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
<!--     Use is subject to license terms.-->
</head>
<body>
	<h1>代码生成器集成教程</h1>

<p>本教程介绍如何编写在 NetBeans 代码生成功能中集成新项目的模块，您可以通过在编辑器中按 Alt-Insert 组合键来调用该模块。</p>

   <p><b>目录</b></p>
   
   <p><img  src="../../images/articles/69/netbeans-stamp7-8-9.png" class="stamp" width="114" height="114" alt="本页上的内容适用于 NetBeans IDE 6.5、6.7、6.8" title="本页上的内容适用于 NetBeans IDE 6.5、6.7、6.8" /></p>
      <ul class="toc">
  <li><a href="#intro">代码生成器集成简介</a></li>
  <li><a href="#creating">创建模块项目</a></li>
  <li><a href="#use">使用“代码生成器提供器”向导</a></li>
  <li><a href="#code">实现代码生成器集成</a></li>
  <li><a href="#install">安装并试用功能</a></li>
  <li><a href="#share">创建可共享的二进制文件</a></li>
       </ul>
         
<p><b>要学习本教程，您需要具备下表中列出的软件和资源。</b></p>

      <table>
        <tbody>
            <tr>
                <th class="tblheader" scope="col">软件或资源</th>
                <th class="tblheader" scope="col">要求的版本</th>
            </tr> 
           <tr>
                <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
                <td class="tbltd1">6.7 或更高版本</td>
            </tr>
            <tr>
                <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
                <td class="tbltd1">版本 6 或<br/>版本 5</td>
            </tr>
        </tbody>
    </table>
    
 <p class="tips">（可选）要解决疑难问题，可以<a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=11179"> 下载完整的样例 </a>并查看其源代码。</p>
    


<h2 class="tutorial"><a name="intro"></a>代码生成器集成简介</h2>

<p>NetBeans IDE 6.5 中引入的代码生成器功能由一系列项目组成，您可以按 Alt-Insert 组合键来调用它们。每个项目都会将代码生成到编辑器中。</p>

<p><img src="../../images/tutorials/code-generator/code-generator-5.png" alt="部署后的结果" /></p>


<!-- ===================================================================================== -->

<h2 class="tutorial"><a name="creating"></a>创建模块项目</h2>
      
<p>在此部分，我们将利用向导创建每个 NetBeans 模块所需的源代码结构。源代码结构包含位于特定位置的某些文件夹以及一组始终需要的文件。例如，每个 NetBeans 模块都需要一个 <tt>nbproject</tt> 文件夹和一个 <tt>layer.xml</tt> 文件，前者用于存放项目的 meta 数据，后者用于工具栏按钮和窗口等项的声明性注册。</p>

<ol>
          
	      <li>选择“文件”&gt;“新建项目”(Ctrl-Shift-N)。在“类别”下选择“NetBeans 模块”。在“项目”下面，选择“模块”并单击“下一步”。</li>
	<li>在“名称和位置”面板的“项目名称”中键入 <tt>DemoCodeGenerator</tt>。将项目位置更改为计算机上的任意目录，例如 <tt>c:\mymodules</tt>。将“独立模块”单选按钮保留为选中状态。此面板现在应如下所示：

<p><img src="../../images/tutorials/code-generator/code-generator-1.png" alt="“新建项目”向导的第 1 步。" /></p>
<p>单击“下一步”。</p></li>

<li>在“基本模块配置”面板中，键入 <tt>org.netbeans.modules.demo</tt> 作为代码名称基。选中“生成 XML 层”复选框，并保留本地化绑定和 XML 层的位置不变，这样它们将存储在名称为 <tt>org/netbeans/modules/demo</tt> 的包中。此面板现在应如下所示：

 <p><img src="../../images/tutorials/code-generator/code-generator-2.png" alt="“新建项目”向导的第 2 步。" /></p></li>

<li>单击“完成”。</li></ol>

<p> IDE 将创建 <tt>DemoCodeGenerator</tt> 项目。此项目包含所有源代码和项目 meta 数据，例如项目的 Ant 生成脚本。此项目在 IDE 中打开。您可以在“项目”窗口 (Ctrl-1) 中查看其逻辑结构，在“文件”窗口 (Ctrl-2) 中查看其文件结构。 </p>



<!-- ===================================================================================== -->
<h2><a name="use">使用“代码生成器提供器”向导</a></h2>

<p>在此部分，我们将通过向导来创建实现生成器功能集成所需的桩模块类和层条目。</p>

  
 <ol>
	
	 <li>右键单击项目节点，然后选择“新建”&gt;“其他”。在“新建文件”对话框中，选择“模块开发”&gt;“代码生成器”，如下所示：
              <p><img src="../../images/tutorials/code-generator/code-generator-3.png" alt="代码生成器向导。" /></p>
              </li>
	      <li>在“新建代码生成器”面板中，设置以下内容：
        <ul>
            <li><b>类名。</b>指定向导将生成的桩模块的类名。在该字段中键入 &quot;DemoCodeGenerator&quot;。</li>
            <li><b>包。</b>指定将在其中生成桩模块类的包。从下拉列表中选择 &quot;org.netbeans.modules.demo&quot;。</li>
            <li><b>Mime 类型。</b>指定代码生成器集成将应用的 Mime 类型。在该字段中键入 &quot;x-java&quot;。</li>
            <li><b>生成代码生成器上下文提供器。</b>在代码生成器的查找中添加一些额外的对象。将此复选框保留为取消选中状态。</li>
          </ul>
                  <p>您现在应该看到下面的屏幕：</p>
                  <p><img src="../../images/tutorials/code-generator/code-generator-4.png" alt="快速搜索模板" /></p>
              </li>
<li>单击“完成”。

    <p>“项目”窗口现在应如下所示：</p>

<p><img src="../../images/tutorials/code-generator/code-generator-6.png" alt="最终的“项目”窗口。" /></p></li></ol>

<p>在 <tt>layer.xml</tt> 文件中，您应该能看到以下内容：</p>
      
<pre>&lt;filesystem&gt;
    &lt;folder name=&quot;Editors&quot;&gt;
        &lt;folder name=&quot;text&quot;&gt;
            &lt;folder name=&quot;x-java&quot;&gt;
                &lt;folder name=&quot;CodeGenerators&quot;&gt;
                    &lt;file name=&quot;org-netbeans-modules-demo-DemoCodeGenerator$Factory.instance&quot;/&gt;
                &lt;/folder&gt;
            &lt;/folder&gt;
        &lt;/folder&gt;
    &lt;/folder&gt;
&lt;/filesystem&gt;</pre>      

<p>生成的类应如下所示：</p>

<pre>public class DemoCodeGenerator implements CodeGenerator {

    JTextComponent textComp;

    /**
     * 
     * @param context containing JTextComponent and possibly other items 
     * registered by {@link CodeGeneratorContextProvider}
     */
    private DemoCodeGenerator(Lookup context) { 
    // Good practice is not to save Lookup outside ctor
        textComp = context.lookup(JTextComponent.class);
    }

    public static class Factory implements CodeGenerator.Factory {

        public List<? extends CodeGenerator> create(Lookup context) {
            return Collections.singletonList(new DemoCodeGenerator(context));
        }
    }

    /**
     * The name which will be inserted inside Insert Code dialog
     */
    public String getDisplayName() {
        return &quot;Sample Generator&quot;;
    }

    /**
     * This will be invoked when user chooses this Generator from Insert Code
     * dialog
     */
    public void invoke() {
    }
    
}</pre>

    <!-- ======================================================================================= -->
      
      <h2><a name="code">实现代码生成器集成</a></h2>
<p>接下来，我们将实现 API。API 的类如下所示：</p>


      <table>
        <tbody>
            <tr>
                <th class="tblheader" scope="col">类</th>
                <th class="tblheader" scope="col">描述</th>
            </tr>
            <tr>
                <td class="tbltd1">JavaSource</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">CancellableTask</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">WorkingCopy</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">CompilationUnitTree</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">TreeMaker</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">ClassTree</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">ModifiersTree</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">VariableTree</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">TypeElement</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">ExpressionTree</td>
                <td class="tbltd1">待完成</td>
            </tr>
            <tr>
                <td class="tbltd1">MethodTree</td>
                <td class="tbltd1">待完成</td>
            </tr>
            
        </tbody>
    </table>
    
<p>下面，我们将设置所需模块的依赖关系，然后在我们自己的模块中实现它们。</p>

<div class="indent">
    
    <ol>
        
        <li> 右键单击项目，选择“属性”，在“库”面板中设置以下 4 个依赖关系。
        
        <p><img src="../../images/tutorials/code-generator/code-generator-7.png" alt="设置依赖关系。" /></p>
        
        <p><b>注意：</b>您会注意到，“代码生成器”向导已经自动设置了“编辑器库 2”和“实用程序 API”。另外两个依赖关系是“Javac API 包装器”和“Java 源代码”，您需要能够通过新的代码生成器集成生成新 Java 代码片段。</p></li>
        
        <li>打开生成的类，然后按如下所示修改 <tt>invoke()</tt> 方法：
    
<pre>public void invoke() {
    try {
        Document doc = textComp.getDocument();
        JavaSource javaSource = JavaSource.forDocument(doc);
        CancellableTask task = new CancellableTask&lt;WorkingCopy&gt;() {
            public void run(WorkingCopy workingCopy) throws IOException {
                workingCopy.toPhase(Phase.RESOLVED);
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
                TreeMaker make = workingCopy.getTreeMaker();
                for (Tree typeDecl : cut.getTypeDecls()) {
                    if (Tree.Kind.CLASS == typeDecl.getKind()) {
                        ClassTree clazz = (ClassTree) typeDecl;
                        ModifiersTree methodModifiers = 
                                make.Modifiers(Collections.&lt;Modifier&gt;singleton(Modifier.PUBLIC), 
                                Collections.&lt;AnnotationTree&gt;emptyList());
                        VariableTree parameter = 
                                make.Variable(make.Modifiers(Collections.&lt;Modifier&gt;singleton(Modifier.FINAL), 
                                Collections.&lt;AnnotationTree&gt;emptyList()), 
                                &quot;arg0&quot;, 
                                make.Identifier(&quot;Object&quot;), 
                                null);
                        TypeElement element = workingCopy.getElements().getTypeElement(&quot;java.io.IOException&quot;);
                        ExpressionTree throwsClause = make.QualIdent(element);
                        MethodTree newMethod = 
                                make.Method(methodModifiers, 
                                &quot;writeExternal&quot;, 
                                make.PrimitiveType(TypeKind.VOID), 
                                Collections.&lt;TypeParameterTree&gt;emptyList(), 
                                Collections.singletonList(parameter), 
                                Collections.&lt;ExpressionTree&gt;singletonList(throwsClause), 
                                &quot;{ throw new UnsupportedOperationException(\&quot;Not supported yet.\&quot;) }&quot;, 
                                null);
                        ClassTree modifiedClazz = make.addClassMember(clazz, newMethod);
                        workingCopy.rewrite(clazz, modifiedClazz);
                    }
                }
            }
            public void cancel() {
            }
        };
        ModificationResult result = javaSource.runModificationTask(task);
        result.commit();
    } catch (Exception ex) {
        Exceptions.printStackTrace(ex);
    }
}</pre></li>
 
 <li>确保声明了以下导入数据：
 
<pre>import com.sun.source.tree.AnnotationTree;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.ExpressionTree;
import com.sun.source.tree.MethodTree;
import com.sun.source.tree.ModifiersTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.TypeParameterTree;
import com.sun.source.tree.VariableTree;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeKind;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import org.netbeans.api.java.source.CancellableTask;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.JavaSource.Phase;
import org.netbeans.api.java.source.ModificationResult;
import org.netbeans.api.java.source.TreeMaker;
import org.netbeans.api.java.source.WorkingCopy;
import org.netbeans.spi.editor.codegen.CodeGenerator;
import org.netbeans.spi.editor.codegen.CodeGeneratorContextProvider;
import org.openide.util.Exceptions;
import org.openide.util.Lookup;</pre> </li>
 
 </ol>
    </div>

      
    <!-- ======================================================================================= -->

<h2><a name="install"></a>安装并试用功能</h2>
<p>现在，安装模块并使用代码生成器功能集成。IDE 使用 Ant 生成脚本来生成和安装模块。此生成脚本是在创建项目时创建的。</p>
<div class="indent">


      <ol>
	      <li>在“项目”窗口中，右键单击项目并选择“运行”。
	      <p>此时将启动一个新的 IDE 实例，并安装代码生成器集成模块。 </p></li>
               <li>按 Alt-Insert 组合键，您将看到其中包括的新项目：
                   <p><img src="../../images/tutorials/code-generator/code-generator-5.png" alt="部署后的结果" /></p></li>
                   <li>单击某个项目，其中将插入代码。</li>
       </ol>          
   </div>
    
<!-- ======================================================================================= -->

<h2><a name="share"></a>创建可共享的模块二进制文件</h2>

<p>该模块现已完成，您可以将其交给其他用户使用了。为此，您需要创建一个 &quot;NBM&quot;（NetBeans 模块）二进制文件并分发它。 </p>

<div class="indent">
  
      <ol>
	      <li>在“项目”窗口中，右键单击项目，然后选择“创建 NBM”。

                  <p>此时将创建 NBM 文件，您可以在“文件”窗口 (Ctrl-2) 中查看它：</p></li>
	      <li>将它分发给其他人，比如说通过 <a href="http://plugins.netbeans.org/PluginPortal/">NetBeans 插件门户</a>。接收者应使用插件管理器（“工具”&gt;“插件”）来安装它。</li>
       </ol>
 
    </div>


<!-- ======================================================================================== -->


<p><br/></p>
<div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Quick%20Search%20Integration%20Tutorial">请将您的意见和建议发送给我们</a></div>
<p><br style="clear:both;" /></p>
  
  
<!-- ======================================================================================== -->

<h2><a name="nextsteps"></a>后续步骤</h2>

<p>有关创建和开发 NetBeans 模块的详细信息，请参见以下资源： </p>
  <ul>
	  <li><a href="https://platform.netbeans.org/index.html">NetBeans 平台主页</a></li>
	  <li><a href="https://netbeans.org/download/dev/javadoc/">NetBeans API 列表（当前开发版本）</a></li>
  <li><a href="https://netbeans.org/kb/trails/platform_zh_CN.html">其他相关教程</a></li></ul>
  
<!-- ======================================================================================== -->
<!-- 
<h2><a name="version"></a>Versioning </h2>
<p>
<table width="76%" border="1">
 <tbody>
   <tr>
      <td>
        <div align="left"><b>Version</b></div>
      </td>
      <td>
	<div align="left"><b>Date</b></div>
      </td>
      <td>
	<div align="left"><b>Changes</b></div>
      </td>
  </tr>
  <tr>
      <td>
         1
      </td>
      <td>
         19 July 2008
      </td>
      <td>
      Initial version.
      </td>
  </tr>
 </tbody>
</table>
-->
</body>
</html>
