簡體   English   中英

Java 代碼模板的 Eclipse 自定義變量

[英]Eclipse Custom Variable for Java Code Templates

如何添加要插入 Java 代碼模板的新變量。 如何將變量添加到 Window->Preferences->Java->Code Style->Code Templates->Code->New Java Files->Edit->Insert Variable... 的列表中?

目前我的新文件是通過以下方式創建的:

${filecomment}
${package_declaration}
${typecomment}
${type_declaration}

我希望他們用類似的東西來創建:

${begin_filecomment}
${package_declaration}
${typecomment}
${type_declaration}
${end_filecomment}

其中 begin_filecomment 和 end_filecomment 出現在插入變量列表中。

是的,您確實可以在此列表中添加一個變量。 查看名為的擴展點

org.eclipse.ui.editors.templates

你會知道怎么做的。

我很確定“變量”列表是由 Eclipse 生成的,並且無法添加新的模板變量。

您希望${begin_filecomment}${end_filecomment}是什么? 只需在編輯框中輸入內容 - 沒有任何內容表明您不能將靜態內容放入其中。

要貢獻一個新變量,您需要創建一個插件並實現 org.eclipse.ui.editors.templates 擴展點。

您必須提供一個 org.eclipse.jface.text.templates.TemplateVariableResolver 的子類,它將實現各種解析方法來將占位符解析為您想要的值。

有關擴展點的幫助和提供 ant 變量的示例,請參見此處

正如 matt b 所說,您通常只需要將文本定義為樣板文件,因此為此實現一個變量是多余的。

我沒試過,但也許你可以編輯 JDT jar 中的模板文件:

eclipse\plugins\org.eclipse.jdt.ui_*.jar\templates\

為了增加對話,我還想在模板中插入一個自定義變量。 我的問題是我想在模板中插入一個來自 jsp/jstl 定義的變量。

<c:set var="myVariable" value="${requestScope.variableName}" />

這顯然會導致一些問題,因為模板已經使用${}語法來幫助解析自己的變量。

如此簡單的解決方案,我在模板中的模式中添加了一個額外的$ 兩個$$符號將它解析為一個$符號,因此給了我我想要的東西。 希望這對發帖者或有類似情況的人有所幫助。

這是我的筆記。 我希望它對你有幫助。

我的 Eclipse 版本:2020-09 (4.17.0)

  • 添加 GlobalTemplateVariables

    罐子:org.eclipse.text.jar

    1. org.eclipse.jface.text.templates.GlobalTemplateVariables
     public static class MyID extends SimpleTemplateVariableResolver { private static String value = System.getProperty("myID"); public MyID() { super("myID", TextTemplateMessages.getString("GlobalVariables.variable.description.myID")); //$NON-NLS-1$ //$NON-NLS-2$ } @Override protected String resolve(TemplateContext context) { if (value == null) { return TextTemplateMessages.getString("GlobalVariables.variable.description.myID"); } return value; // $NON-NLS-1$ } }
    1. org.eclipse.jface.text.templates.TextTemplateMessageg.properties
     # global variables GlobalVariables.variable.description.myid=myID
  • 爪哇

    1. Java -> 代碼風格 -> 代碼模板

      罐子:org.eclipse.jdt.core.manipulation.jar

    • org.eclipse.jdt.internal.core.manipulation.CodeTemplateContextType.java
       public CodeTemplateContextType(String contextName) { super(contextName); fIsComment= false; // global addResolver(new GlobalTemplateVariables.Dollar()); addResolver(new GlobalTemplateVariables.Date()); addResolver(new GlobalTemplateVariables.Year()); addResolver(new GlobalTemplateVariables.Time()); addResolver(new GlobalTemplateVariables.User()); addResolver(new GlobalTemplateVariables.MyID()); addResolver(new Todo());
    1. Java -> 編輯器 -> 模板

      罐子:org.eclipse.jdt.core.manipulation.jar

      • org.eclipse.jdt.internal.coreext.template.java.AbstractJavaContextTypeCore.java
       public void initializeContextTypeResolvers() { addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Cursor()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.WordSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Selection("line_selection", JavaTemplateMessages.CompilationUnitContextType_variable_description_line_selection)); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID());
  • JSP

    1. Web -> JSP 文件 -> 編輯器 -> 模板

      罐子:org.eclipse.jst.jsp.ui.jar

      • org.eclipse.jst.jsp.ui.internal.templates.TemplateContextTypeJSP.java
       public TemplateContextTypeJSP() { addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Cursor()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.LineSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.WordSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID());
  • JavaScript

    1. Web -> 客戶端 JavaScript -> 代碼模板

      罐子:org.eclipse.wst.jsdt.ui.jar

      • org.eclipse.wst.jsdt.internal.coreext.template.java.CodeTemplateContextType.java
       public CodeTemplateContextType(String contextName) { super(contextName); this.fIsComment = false; addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID()); addResolver(new Todo());
    2. Web -> 客戶端 JavaScript -> 模板

      罐子:org.eclipse.wst.jsdt.ui.jar

      • org.eclipse.wst.jsdt.internal.coreext.template.java.JavaContextType.java
       public JavaContextType() { super("javaScript"); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Cursor()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.WordSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.LineSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID());
  • HTML

    1. Web -> HTML 文件 -> Ediotr -> 模板

      罐子:org.eclipse.wst.html.ui.jar

      • org.eclipse.wst.html.ui.internal.templates.TemplateContextTypeHTML.java
       public TemplateContextTypeHTML() { addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Cursor()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.LineSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.WordSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID()); addResolver((TemplateVariableResolver)new EncodingTemplateVariableResolverHTML());
  • CSS

    1. 網頁 -> CSS 文件 -> Ediotr -> 模板

      罐子:org.eclipse.wst.css.ui.jar

      • org.eclipse.wst.css.ui.internal.templates.TemplateContextTypeCSS.java
       public TemplateContextTypeCSS() { addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Cursor()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.LineSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.WordSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID()); addResolver((TemplateVariableResolver)new EncodingTemplateVariableResolverCSS());
  • XML

    1. XML -> XML 文件 -> Ediotr -> 模板

      罐子:org.eclipse.wst.xml.ui.jar

      • org.eclipse.wst.xml.ui.internal.templates.TemplateContextTypeXML.java
       public TemplateContextTypeXML() { addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Cursor()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Date()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Dollar()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.LineSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Time()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.User()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.WordSelection()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.Year()); addResolver((TemplateVariableResolver)new GlobalTemplateVariables.MyID()); addResolver((TemplateVariableResolver)new EncodingTemplateVariableResolverXML());

然后在 -vmargs 之后在 eclipse.ini 中添加自定義變量

-DmyID=7777

然后你可以在你的模板中使用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM