亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

擴展Eclipse的Java開發工具(四)

2019-11-18 13:01:15
字體:
來源:轉載
供稿:網友

  怎樣分析 java 代碼以進行修改?
  
  JDT 提供了幾個工具來幫助您分析代碼。本文有意選擇了最簡單的 IScanner 接口進行演示,它的作用域也最有限。這個接口屬于 JDT 工具箱,可以通過 JDT 的 ToolFactory 類訪問它。其 createScanner 方法返回一個掃描程序,該掃描程序會簡化對一串 Java 代碼作標記的工作。它不處理任何非凡困難的操作,只是對所返回的標記進行簡單的解析和分類。例如,它指出下一個標記是 public 要害字,其后的標記是一個標識符,再后面的標記是左圓括號,等等。隨后,只有當您希望分析一小段代碼(您明確理解想要在這段代碼中得到什么)時,這個掃描程序才是合適的。您決不會使用掃描程序分析整個 Java 源代碼;因為您會轉而使用一些對編譯器迷而言十分熟悉的工具:JDT 的抽象語法樹(Abstract Syntax Tree,AST)框架。
  
  與簡單的掃描程序不同,AST 理解語言元素(它們不再只是“標記”)之間的關系。它可以識別象局部變量、實例變量、表達式以及 if 語句等六十多種不同的語言元素。它將幫助您進行涉及范圍廣泛的重構,或難以滿足對標記進行一對一分類的模糊程度非凡高的重構。要更清楚地了解何時使用掃描程序與何時使用 AST 之間的差別,請考慮清單 10 中的代碼。
  
  清單 10. 模糊的變量引用
  
  public class Foo {
  int foo = 1;
  
  public int foo(int foo) {
  return foo + this.foo;
  }
  
  public int getFoo() {
  return foo;
  }
  }
  
  假如作為重構的一部分,您希望查找對實例變量 foo 的引用,那么就會明白一個單純的解析會使區分本地引用和實例變量引用成為一個難題。AST 創建了完整的分析樹,其中表示了 Java 源代碼的每個元素并對這些元素進行了區分。在這個特例中,不同的類會考慮“foo”引用的上下文,將“foo”引用表示成 AST 的節點(如 FieldDeclaration、SimpleName 和 ThisEXPRession),因此您會很輕松地識別它們。
  
  正如前面提到的,本文將只討論我們所選擇的簡單例子。對于比較復雜的修改和分析示例,請參閱參考資料一節?,F在,讓我們回到我們前面跳過的用省略號表示的代碼。這個代碼將使用 IScanner 的實例以確定并替換源代碼中確定成員可視性的要害字。我們將處理的可視性修飾符是 public、private、protected 和 final。通過采用“蠻力”方法,我們可以簡化這個解決方案,即,采用兩個步驟就可以完成。首先刪除方法特征符中所有的可視性修飾符(或至少掃描查找它們,假如找到,就刪除),然后插入所希望的修飾符。非凡地:
  
  假如在方法特征符中找到 public、private 或 protected,就刪除它們。
  
  插入所請求的可視性修飾符(對于包可視性的情況,不作任何操作,因為這是缺省操作;即沒有任何修飾符)。
  
  final 修飾符很簡單。因為所希望的行為就是插入和除去這個修飾符,所以假如它存在,我們除去它;否則就插入它。清單 11 中的代碼只顯示了一個例子,它無條件地將成員的可視性從 pubilc 改成 private。在與本文相關的解決方案中,您將看到每個操作的公共代碼都被移到了抽象超類中。它基本上與下面的代碼相同,只不過稍作了整理以避免冗余。
  
  清單 11. 掃描是否有 pubilc 要害字
  
  ICompilationUnit cu = member.getCompilationUnit();
  
  if (cu.isWorkingCopy()) {
  IBuffer buffer = cu.getBuffer();
  
  IScanner scanner =
  ToolFactory.createScanner(false, false, false, false);
  scanner.setSource(buffer.getCharacters());
  ISourceRange sr = member.getSourceRange();
  scanner.resetTo(
  sr.getOffset(),
  sr.getOffset() + sr.getLength() - 1);
  
  int token = scanner.getNextToken();
  while (token != ITerminalSymbols.TokenNameEOF
  && token != ITerminalSymbols.TokenNameLPAREN)
  token = scanner.getNextToken();
  
  if (token == ITerminalSymbols.TokenNamePUBLIC) {
  buffer.replace(
  scanner.getCurrentTokenStartPosition(),
  scanner.getCurrentTokenEndPosition(),
  scanner.getCurrentTokenStartPosition() + 1,
  "private");
  break;
  }
  }
  cu.reconcile();
  }
  
  注:ITerminalSymbols 定義了掃描程序可以返回的標記名稱,它們對應于 Java 語法的標準標記。您可以進一步查詢掃描程序以詢問當前標記在緩沖區中開始和結束的具體位置,它出現在哪一行上,當然還有標記本身(非凡是象 ITerminalSymbols.TokenNameStringLiteral 和 ITerminalSymbols.TokenNameIdentifier 這樣的例子,它們不是保留的要害字)。
  
  上述代碼片段中,向 scanner.setSource 方法提供了編譯單元的完整源代碼,即 Java 源文件中的所有內容。正如前面提到的,掃描程序并不非常適合于大型分析,所以我們必須將它限制用于只有以目標方法的第一個字符開始,一直到調用 setSourceRange 方法作為結束的那部分源代碼。IMember 接口繼續了 ISourceReference,ISourceReference 是一個答應您查詢包含編譯單元內的源代碼字符串和源代碼位置的接口。這使我們不必確定目標方法在 Java 源代碼內開始和結束的位置。原本可以用 AST 實現這一點,而 ISourceReference 接口使 AST 成了多余的工具。由于 Java 方法特征符易于解析,所以 IScanner 接口的解析能力和它很匹配。我們必須做的就是查找 public 要害字,它出現在方法聲明的前一個字符之后,參數聲明的左圓括號之前,用 private 要害字替換它。當然,在該解決方案中,這個接口將處理所有的可能情況,不管該方法最初是 public、private、protected 還是 package(缺?。?。
  
  下一步是什么?
  
  本文設定的目標是向您提供一個對 Eclipse 的 Java 開發環境頗具價值的擴展,這樣的擴展增強了這個開發環境的生產率。坦率地說,出于簡潔性考慮,我多次跳過了一些細節。該解決方案本身就作了一些簡化假設,象只答應在編輯器中對已打開的 Java 源代碼進行修改。您可能希望在更完整的實現中取消這個限制。
  
  雖然如此,但我還是希望您能感受到什么是可能的,并確信這樣做不是非凡困難。本文中我們討論的是 The Java Developer's Guide to Eclipse 一書某一高級章節的部分內容。該書中有十一個比較淺顯的章節討論了插件開發的基礎。象本文一樣,大多數章節都包含了一個已文檔化的工作解決方案,它可以強化您所學到的知識,大多數內容是以本文中您已看到的相同風格編寫的(不過可能沒有以這么快的節奏進行討論?。?。
  
  重要:您可能需要向工作空間添加必要的插件,這樣解決方案才能編譯和運行。選擇 Window > Preferences > Plug-in Development > Target Platform,然后選擇 Not in Workspace。這將確保解決方案所依靠的基礎插件在導入和重新編譯過程中可用。
  
  一旦導入完成,您可能需要切換至 Plug-in Development 透視圖,在 com.ibm.lab.soln.jdt.excerpt 項目中選擇 plugin.xml,然后選擇 Update Classpath。這將修改由于 Eclipse 安裝路徑和解決方案的安裝路徑不同所引起的編譯錯誤。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久视频这里只有精品| 日韩中文视频免费在线观看| 性欧美办公室18xxxxhd| 欧美激情乱人伦一区| 欧美性生交xxxxx久久久| 久久久www成人免费精品| 欧美人成在线视频| 4438全国亚洲精品在线观看视频| 午夜精品久久久久久久99热| 精品毛片网大全| 7m第一福利500精品视频| 成人欧美一区二区三区黑人孕妇| 日韩美女在线播放| 久久久精品2019中文字幕神马| 一本色道久久88综合亚洲精品ⅰ| 亚洲电影天堂av| 国产精品欧美激情| 亚洲欧美另类国产| 一区二区亚洲欧洲国产日韩| 亚洲高清一区二| 欧美激情一区二区久久久| 日韩在线视频线视频免费网站| 这里只有精品在线播放| 欧美亚洲第一区| 日韩国产精品亚洲а∨天堂免| 亚洲欧洲第一视频| 亚洲国产97在线精品一区| 韩国一区二区电影| 日韩av在线精品| 国产在线999| 欧美亚洲视频一区二区| 国产成人avxxxxx在线看| 亚洲国产精品一区二区久| 欧美性生活大片免费观看网址| 日韩av免费网站| 亚洲a区在线视频| 成人美女av在线直播| 日韩av高清不卡| 亚洲精品一区二区三区不| 国产视频精品一区二区三区| 国产精品久久久久久久午夜| 久久偷看各类女兵18女厕嘘嘘| 欧美性色视频在线| 日韩在线欧美在线国产在线| 2019中文字幕全在线观看| 国产精品精品视频一区二区三区| 亚洲午夜久久久久久久| 亚洲综合第一页| 日韩视频―中文字幕| 亚洲精品免费网站| 欧美老女人性生活| 亚洲国产成人精品久久| xvideos国产精品| 欧美大人香蕉在线| 亚洲精品国产电影| 136fldh精品导航福利| 亚洲第一天堂无码专区| 日韩美女免费视频| 日本中文字幕成人| 国产精品专区一| 欧美亚洲国产视频小说| 一区二区亚洲欧洲国产日韩| 国产欧美中文字幕| 久久久人成影片一区二区三区| 7m精品福利视频导航| 欧美日韩免费在线观看| 国产精品久久久久高潮| 欧美日韩国产丝袜另类| 精品久久久久久久久久ntr影视| 性日韩欧美在线视频| 国产成人免费av电影| 国产精品大片wwwwww| 国产欧美在线播放| 亚洲国产黄色片| 久久精品99久久久久久久久| 欧美成人免费一级人片100| 欧美成人精品一区二区| 亚洲欧洲偷拍精品| 91精品国产91| 黑人狂躁日本妞一区二区三区| 亚洲老司机av| 成人美女免费网站视频| 久久精品视频在线观看| 最近2019中文字幕mv免费看| 国产精品视频男人的天堂| 欧美高清无遮挡| 在线观看日韩专区| 欧美激情精品久久久久久大尺度| 成人a在线视频| 亚洲色图校园春色| 97欧美精品一区二区三区| 国产美女精品视频免费观看| 亚洲国产天堂久久综合网| 日韩电影中文字幕| 成人免费xxxxx在线观看| 日韩欧美高清在线视频| 少妇高潮久久久久久潘金莲| 亚洲毛片在线免费观看| 亚洲国产精品嫩草影院久久| 欧美日本亚洲视频| 97欧美精品一区二区三区| 欧美精品少妇videofree| 国产精品免费看久久久香蕉| 欧美日韩电影在线观看| 欧美国产第一页| 国产有码在线一区二区视频| 国产在线视频一区| 91中文字幕在线| zzijzzij亚洲日本成熟少妇| 欧美精品videos性欧美| www高清在线视频日韩欧美| 欧美黄色三级网站| 日日骚av一区| 欧美亚洲午夜视频在线观看| 黑丝美女久久久| 久久久久免费视频| 亚洲在线观看视频| 欧美黑人一区二区三区| 欧美日韩国产精品一区二区不卡中文| 亚洲欧洲成视频免费观看| 欧美xxxx做受欧美.88| 精品视频中文字幕| 久久精品一偷一偷国产| 国产一区二区三区久久精品| 中文字幕亚洲情99在线| 亚洲第一网站免费视频| 91国语精品自产拍在线观看性色| 国产亚洲xxx| 亚洲另类xxxx| 精品国产乱码久久久久酒店| 色综合久久精品亚洲国产| 亚洲成人999| 日韩视频精品在线| 亚洲字幕在线观看| 97av在线视频免费播放| 日韩欧美精品网站| 久久久日本电影| 欧美日韩成人精品| 欧美成人在线网站| 国产精品久久久久久影视| 亚洲国产欧美一区二区三区久久| 欧美大人香蕉在线| 92国产精品视频| 欧美黄色免费网站| 欧美精品激情在线观看| 国产成人av网址| 91九色单男在线观看| 日本午夜精品理论片a级appf发布| 亚洲精品第一页| 久久这里只有精品99| 国产精品视频区1| 日韩美女在线观看一区| 人人爽久久涩噜噜噜网站| 亚洲欧美中文日韩在线v日本| 神马久久桃色视频| 久久视频在线看| 美女黄色丝袜一区| 日韩视频在线免费观看| 亚洲综合在线中文字幕| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美性xxxx极品高清hd直播| 亚洲人线精品午夜| 亚洲天堂第二页| 久久久国产一区二区|