<!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 Nodes 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><b>目录</b></p>
   
   <img  src="../images/articles/68/netbeans-stamp-65-67-68.gif" 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.5 或更高版本</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>并查看其源代码。
    


<h2 class="tutorial"><a name="intro"></a>代码生成器集成简介</h2>

<p>NetBeans IDE 6.5 中引入的代码生成器功能由一系列项目组成，您可以按 Alt-Insert 组合键来调用它们。每个项目都会将代码生成到编辑器中。

<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-5.png" alt="部署后的结果">


<!-- ===================================================================================== -->

<h2 class="tutorial"><a name="creating"></a>创建模块项目</h2>
      
<p>在本节中，我们将利用向导创建每个 NetBeans 模块所需的源代码结构。源代码结构包含位于特定位置的某些文件夹以及一组始终需要的文件。例如，每个 NetBeans 模块都需要一个 <tt>nbproject</tt> 文件夹和一个 <tt>layer.xml</tt> 文件，前者用于存放项目的 meta 数据，后者用于工具栏按钮和窗口等项的声明性注册。

<ol>
          
	      <li>选择“文件”&gt;“新建项目”(Ctrl-Shift-N)。在“类别”下选择“NetBeans 模块”。在“项目”下面，选择“模块”并单击“下一步”。</li>
	<li>在“名称和位置”面板的“项目名称”中键入 <tt>DemoCodeGenerator</tt>。将项目位置更改为计算机上的任意目录，例如 <tt>c:\mymodules</tt>。将“独立模块”单选按钮保留为选中状态。此面板现在应如下所示：

<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-1.png" alt="“新建项目”向导的第 1 步。">
 <p>单击“下一步”。

<li>在“基本模块配置”面板中，键入 <tt>org.netbeans.modules.demo</tt> 作为代码名称基。选中“生成 XML 层”复选框，并保留本地化绑定和 XML 层的位置不变，这样它们将存储在名称为 <tt>org/netbeans/modules/demo</tt> 的包中。此面板现在应如下所示：

<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-2.png" alt="“新建项目”向导的第 2 步。">

<li>单击“完成”。</ol>

<p> IDE 将创建 <tt>DemoCodeGenerator</tt> 项目。此项目包含所有源代码和项目 meta 数据，例如项目的 Ant 生成脚本。此项目将会在 IDE 中打开。您可以在“项目”窗口 (Ctrl-1) 中查看其逻辑结构，在“文件”窗口 (Ctrl-2) 中查看其文件结构。 


      <br />

<!-- ===================================================================================== -->
<h2><a name="use">使用“代码生成器提供器”向导</a></h2>

<p>在本节中，我们将通过向导来创建实现生成器功能集成所需的桩模块类和层条目。

  
 <ol>
	
	 <li>右键单击项目节点，然后选择“新建”&gt;“其他”。在“新建文件”对话框中，选择“模块开发”&gt;“代码生成器”，如下所示：
<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-3.png" alt="代码生成器向导。">
              </li>
	      <li>在“新建代码生成器”面板中，设置以下内容：
        <p><ul>
            <li><b>类名。</b>指定向导将生成的桩模块的类名。在该字段中键入 &quot;DemoCodeGenerator&quot;。
            <li><b>包。</b>指定将在其中生成桩模块类的包。从下拉列表中选择 &quot;org.netbeans.modules.demo&quot;。
            <li><b>Mime 类型。</b>指定代码生成器集成将应用的 Mime 类型。在该字段中键入 &quot;x-java&quot;。
            <li><b>生成代码生成器上下文提供器。</b>在代码生成器的查找中添加一些额外的对象。保留此复选框为未选中状态。
          </ul>
          <p>您现在应该看到下面的屏幕：
<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-4.png" alt="快速搜索模板">
          
<li>单击“完成”。

<p><p>“项目”窗口现在应如下所示：

<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-6.png" alt="最终的“项目”窗口。"></ol>

      <p>在 <tt>layer.xml</tt> 文件中，您应该能看到以下内容：
      
<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>生成的类应如下所示：

<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>


      <br />
    
    <!-- ======================================================================================= -->
      
      <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><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-7.png" alt="设置依赖关系。" />
        
        <p><b>注意：</b>您会注意到，“代码生成器”向导已经自动设置了“编辑器库 2”和“实用程序 API”。另外两个依赖关系是“Javac API 包装器”和“Java 源代码”，您需要能够通过新的代码生成器集成生成新 Java 代码片段。
        
        <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>确保声明了以下导入数据：
 
<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> 
 
 </ol>
    </div>

      
    <!-- ======================================================================================= -->

<h2><a name="install"></a>安装并试用功能</h2>
<p>现在，安装模块并使用代码生成器功能集成。IDE 使用 Ant 生成脚本来生成和安装模块。此生成脚本是在创建项目时创建的。</p>
<div class="indent">


      <ol>
	      <li>在“项目”窗口中，右键单击项目并选择“运行”。
	      <p><p>此时将启动一个新的 IDE 实例，并安装代码生成器集成模块。 
               <li>按 Alt-Insert 组合键，您将看到其中包括的新项目：
<p><p align="left"><img border="1" src="../images/tutorials/code-generator/code-generator-5.png" alt="部署后的结果">
		 <li>单击某个项目，其中将插入代码。
       </ol>          
   </div>
      <br />
    
<!-- ======================================================================================= -->

<h2><a name="share"></a>创建可共享的模块二进制文件</h2>

<p>该模块现已完成，您可以将其交给其他用户使用了。为此，您需要创建一个 &quot;NBM&quot;（NetBeans 模块）二进制文件并分发它。 

<div class="indent">
  
      <ol>
	      <li>在“项目”窗口中，右键单击项目，然后选择“创建 NBM”。

	      <p><p>此时将创建 NBM 文件，您可以在“文件”窗口 (Ctrl-2) 中查看它：
	      <li>将它分发给其他人，比如说通过 <a href="http://plugins.netbeans.org/PluginPortal/">NetBeans 插件门户</a>。接收者应使用插件管理器（“工具”&gt;“插件”）来安装它。
       </ol>
 
    </div>


<!-- ======================================================================================== -->


  <br>
<div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Quick%20Search%20Integration%20Tutorial">请将您的意见和建议发送给我们</a></div>
<br style="clear:both;" />
  
  
<!-- ======================================================================================== -->

<h2><a name="nextsteps"></a>后续步骤</h2>

<p>有关创建和开发 NetBeans 模块的详细信息，请参见以下资源： 
  <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>
  </p>
  
  <hr><p><p>
<!-- ======================================================================================== -->
<!-- 
<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>
