2013-03-15 66 views
1

我正在做一個項目,實質上是一個用戶爲很長/重複的代碼創建宏的方式,以便他們可以將這些宏放入其代碼中以提高可讀性並鼓勵可重用性。創建Java註釋以代碼替換令牌

該項目分爲兩個區域:一個RCP應用程序,其中用戶構建宏並將其保存到文件中,以及一個用戶可插入宏的eclipse插件。

RCP應用程序已經很好地發展了,但現在我已經到了想讓java看一段代碼的真正位置,並且在編譯時去'噢,那段代碼意味着這個'。

例如,用戶可能已經創建了一個代碼爲System.out.println("Hello World");的標識符爲macro1的宏。他們想用它在自己的foo類看起來像:

class foo{ 

    //lots of java.... 

    macro1 

    //lots more java 
} 

我希望用戶運行他們的階級,而當Java的編譯它取代macro1與它的價值。

我一直在研究這一段時間,並在JavaCC上稍微閱讀一些內容,然後看着螞蟻替換任務,但我覺得我想要創建自定義註釋以通知Java,該字符串在應該將註釋轉換成/替換爲位於特定文本文件中的一段Java代碼。希望結局如下:

@ExpandMacro 
macro1 

對我來說,它似乎是可能的,但我不知道如果我只是過於樂觀! :)

另外我的擔心之一是如何將其作爲插件可部署?如果我創建了一個自定義註釋,我將如何讓它可供用戶使用?

任何建議/見解將是非常有益的!

編輯:我也看過Project Lombok這看起來非常有趣。但由於Lombok項目所需的設置數量,我又擔心可部署性。

+0

你希望將java代碼(重複代碼,或稱爲macro1)插入到任意位置?或者更像是,在運行函數X之前/之後調用此宏?因爲我想知道AspectJ是否可以在這裏幫助... – user1766760 2013-03-15 22:47:57

+0

你可以在eclipse中使用代碼模板嗎? http://www.java-tips.org/other-api-tips/eclipse/how-to-add-your-own-code-template-in-eclipse.html – Rohit 2013-03-15 22:51:32

+0

@ user1766760是的我正在尋找插入這些宏放入任意位置以表示可以位於文本文件中的某些預定義代碼。 – SteWoo 2013-03-15 23:10:07

回答

0

這樣做的最好方法是註釋處理器(類似Lombokg)。使用JSR 269 Pluggable Annotation Processing API配置很容易,因爲帶處理器的jar是自動發現的。

看:http://www.slideshare.net/PolymathicCoder/the-art-of-metaprogramming-in-java第34頁

+0

您能否詳細說明您的意思,因爲我不完全明白?你的意思是我可以將Annotation Processor打包爲一個jar包,並且所有用戶都必須將其包含在類路徑中? – SteWoo 2013-03-16 07:44:25

+0

對不起,再次閱讀您的問題後,我認爲註釋處理器不適合您。 – MariuszS 2013-03-16 19:40:21

+0

但是,您可以創建註釋,如 @ExpandMacro,這也可以,但我認爲這不是最簡單的方法。 – MariuszS 2013-03-16 19:50:47

0

看這個不同。我認爲對你更好的是使用動態語言(例如groovy)。您可以使用Java編寫代碼並使用Groovy動態運行它(無需編譯) - 因爲java代碼與groovy兼容。所以你可以簡單地用你需要的代替macro1並運行這段代碼。隨着grovy可以

  • 比看起來像編寫Java代碼,
  • 與真正的代碼
  • 運行的代碼替換宏而不編譯

鏈接閱讀: http://groovy.codehaus.org/Embedding+Groovy http://groovy.codehaus.org/Differences+from+Java