eclipse插件開發(fā)-JDT_第1頁
eclipse插件開發(fā)-JDT_第2頁
eclipse插件開發(fā)-JDT_第3頁
eclipse插件開發(fā)-JDT_第4頁
eclipse插件開發(fā)-JDT_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、JDT核心JDT 核心JDT 核心(org.eclipse.jdt.core)是用于定義 Java 核心元素和 API 的插件。在開發(fā)特定于 Java 的功能部件時,總是應該將此插件列示為先決條件。JDT 核心包使您能夠訪問 Java 模型對象和無外設 Java IDE 基礎結(jié)構(gòu)。JDT 核心包包括:  · org.eclipse.jdt.core 定義用于描述 Java 模型的類。 · piler 定義編譯器基礎結(jié)構(gòu)的 API。 · org.eclipse.jdt.core.dom 支持可用于檢查編譯單元的結(jié)構(gòu)直到語句級別的“抽象語法樹”(AST)。

2、· org.eclipse.jdt.core.eval 支持對代碼片段編輯測試窗或調(diào)試器中的代碼段進行評估。 · org.eclipse.jdt.core.jdom 支持 Java“文檔對象模型”(DOM),它可用于表示 Java 編譯單元的結(jié)構(gòu)。 · org.eclipse.jdt.core.search 支持在工作空間的 Java 模型中搜索與特定描述相匹配的 Java 元素。   · org.eclipse.jdt.core.util 提供用于處理 .class 文件和 Java 模型元素的實用程序類。 從版本 3.0 起,建議

3、不要使用 org.eclipse.jdt.core.jdom。應使用 org.eclipse.jdt.core.dom 來完成對編譯單元的結(jié)構(gòu)的處理。Java 模型Java 模型是用來對與創(chuàng)建、編輯和構(gòu)建 Java 程序相關聯(lián)的對象進行建模的一些類。Java 模型類是在 org.eclipse.jdt.core 中定義的。這些類實現(xiàn)資源的特定于 Java 的行為,并進一步將 Java 資源分解成模型元素。Java 元素包 org.eclipse.jdt.core 定義了用來對組成 Java 程序的元素建模的一些類。JDT 使用內(nèi)存中的對象模型來表示 Java 程序的結(jié)構(gòu)。此結(jié)構(gòu)是從項目的類路徑

4、派生的。模型是分層的??梢詫⒊绦虻脑胤纸獬勺釉?。處理 Java 元素與處理資源對象相似。當使用 Java 元素時,實際上是在使用某些底層的模型對象的句柄。必須使用 exists() 協(xié)議來確定元素是否真正存在于工作空間中。 下表總結(jié)了不同種類的 Java 元素。元素描述IJavaModel表示根 Java 元素,對應于工作空間。所有具有 Java 性質(zhì)的項目的父代。它還允許訪問不具有 java 性質(zhì)的項目。IJavaProject表示工作空間中的 Java 項目。(IJavaModel 的子代)IPackageFragmentRoot表示一組包段,并將各段映射至底層資源,它可以是

5、文件夾、JAR 或 ZIP 文件。(IJavaProject 的子代)IPackageFragment表示工作空間中的一個部分,對應于整個包或者包的一部分。(IPackageFragmentRoot 的子代)ICompilationUnit表示 Java 源(.java)文件。(IPackageFragment 的子代)IPackageDeclaration表示編譯單元中的軟件包聲明。(ICompilationUnit 的子代)IImportContainer表示編譯單元中的包導入聲明的集合。(ICompilationUnit 的子代)IImportDeclaration表示單個包導入聲明。(

6、IImportContainer 的子代)IType表示編譯單元內(nèi)的源類型,或者是類文件中的二進制類型。IField表示類型中的字段。(IType 的子代)IMethod表示類型中的方法或構(gòu)造函數(shù)。(IType 的子代)IInitializer表示類型中的靜態(tài)或?qū)嵗跏蓟椒?。(IType 的子代)IClassFile表示已編譯(二進制)類型。(IPackageFragment 的子代)ITypeParameter 表示類型參數(shù)。(不是任何 Java 元素的子元素,可使用 IType.getTypeParameter(String) 或 IMethod.getTypeParameter(Str

7、ing) 獲得)ILocalVariable 表示方法或初始化方法中的局部變量。(不是任何 Java 元素的子元素,可使用 ICodeAssist.codeSelect(int, int) 獲得)所有 Java 元素都支持 IJavaElement 接口。某些元素顯示在“包”視圖中。這些元素實現(xiàn) IOpenable 接口,原因是必須在打開它們之后才能瀏覽它們。下圖說明這些元素在“包”視圖中是如何表示的。實現(xiàn) IOpenable 的 Java 元素基本上是根據(jù)在底層資源文件中找到的信息創(chuàng)建的。相同的元素是在資源導航器視圖中按類別表示的。   其他元素對應于組成 Java 編譯單元的項。

8、下圖顯示 Java 編譯單元和內(nèi)容大綱窗口(它顯示編譯單元中的源元素)。 因為這些元素可以提供相應的源代碼,所以它們實現(xiàn)了 ISourceReference 接口。(當在內(nèi)容大綱窗口中選擇了這些元素時,就會在 Java 編輯器中顯示它們相應的源代碼)。Java 元素及其資源許多 Java 元素對應于工作空間中的通用資源。當您想根據(jù)通用資源來創(chuàng)建 Java 元素時,最好是從類 JavaCore 開始。以下代碼段說明如何從 Java 元素的相應資源中獲取 Java 元素。 private void createJavaElementsFrom(IProject myProject, IFolder

9、 myFolder, IFile myFile) IJavaProject myJavaProject = JavaCore.create(myProject); if (myJavaProject = null) / the project is not configured for Java (has no Java nature) return; / get a package fragment or package fragment root IJavaElement myPackageFragment = JavaCore.create(myFolder); / get a .jav

10、a (compilation unit), .class (class file), or / .jar (package fragment root) IJavaElement myJavaFile = JavaCore.create(myFile); 一旦有了 Java 元素,就可以使用 JDT API 來遍歷和查詢模型。還可以查詢包含在 Java 元素內(nèi)的非 Java 資源。    private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) . / ge

11、t the non Java resources contained in my project. Object nonJavaChildren = myJavaProject.getNonJavaResources(); . Java 項目當根據(jù)簡單項目來創(chuàng)建 Java 項目時,JavaCore 將檢查項目是否是用 Java 性質(zhì)來配置的。JDT 插件使用項目性質(zhì)來將項目指定為具有 Java 行為。當“新建 Java 項目”向?qū)?chuàng)建項目時,將為項目指定此性質(zhì)(org.eclipse.jdt.core.JavaCore#NATURE_ID)。如果未對項目配置 Java 性質(zhì),則在要求創(chuàng)建項目時

12、,JavaCore 將返回 null。JavaCore 還用來維護 Java 類路徑,包括用于查找源代碼和庫的位置以及用于生成輸出二進制(.class)文件的位置。什么是 Java 項目的唯一特征?Java 項目將它們的類路徑記錄在“.classpath”文件中,并將 Java 增量項目構(gòu)建器添加到項目的構(gòu)建規(guī)范中。否則,它們只是常規(guī)項目,并且可以由插件利用其他性質(zhì)(和其他增量構(gòu)建器)來配置。對于那些想要利用除了它們自己的行為之外的 Java 行為來配置項目的插件,它們通常使用 NewJavaProjectWizardPage 來為項目指定除了它們自己的定制性質(zhì)或行為之外的 Java 性質(zhì)。I

13、JavaModel 可以認為是工作空間中具有 Java 項目性質(zhì)的所有項目的父代(因此,可以當作 IJavaProject)。處理 Java 代碼插件可以使用 JDT API 來創(chuàng)建類或接口、將方法添加到現(xiàn)有類型中或者改變方法的類型。改變 Java 對象最簡單的方法就是使用 Java 元素 API。可以使用更常見的技術來處理 Java 元素的初始源代碼。使用 Java 元素來修改代碼生成編譯單元 通過程序來生成編譯單元最簡單的方法是使用 IPackageFragment.createCompilationUnit。指定編譯單元的名稱和內(nèi)容。于是在包中創(chuàng)建了編譯單元,并返回新的 ICompila

14、tionUnit。通常,可以通過在對應包目錄的相應文件夾中創(chuàng)建擴展名為“.java”的文件資源來按類別創(chuàng)建編譯單元。使用類屬資源 API 對于 Java 工具是一種旁門左道,因此,在通知類屬資源更改偵聽器以及 JDT 偵聽器將 Java 模型更新為新編譯單元之前,Java 模型不會更新。修改編譯單元 大部分對 Java 源代碼的簡單修改可以使用 Java 元素 API 來完成。例如,可以通過編譯單元查詢類型。一旦您具有 IType,就可以使用諸如 createField、createInitializer、createMethod 或 createType 的協(xié)議來將源代碼成員添加至類型。在這

15、些方法中提供了源代碼以及關于成員的位置的信息。ISourceManipulation 接口定義 Java 元素的常見源代碼處理。這包括用于重命名、移動、復制或刪除類型的成員的方法。工作副本 可以通過處理編譯單元來修改代碼(于是修改了底層 IFile)或人們可以修改編譯單元的內(nèi)存副本(稱為工作副本)。工作副本是使用 getWorkingCopy 方法從編譯單元中獲取的。(注意,要創(chuàng)建工作副本,編譯單元不需要存在于 Java 模型中。)當不再需要這種工作副本時,創(chuàng)建這種工作副本的人員應負責使用 discardWorkingCopy 方法來廢棄它。工作副本修改內(nèi)存緩沖區(qū)。getWorkingCopy

16、() 方法創(chuàng)建缺省緩沖區(qū),但是客戶機可以使用 getWorkingCopy(WorkingCopyOwner, IProblemRequestor, IProgressMonitor) 方法提供它們自己的緩沖區(qū)實現(xiàn)??蛻魴C可以直接處理此緩沖區(qū)的文本。如果客戶機直接處理文本,則它們必須經(jīng)常使用 reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor) 方法來使工作副本與緩沖區(qū)同步。最后,可以使用 commitWorkingCopy 方法將工作副本保存至磁盤(用來替換原始的編譯單元)。   例如,下列代碼段使用定制工

17、作副本擁有者在編譯單元上創(chuàng)建工作副本。該代碼段將修改緩沖區(qū)、協(xié)調(diào)更改、將更改落實到磁盤,最后廢棄工作副本。 / Get original compilation unit ICompilationUnit originalUnit = .; / Get working copy owner WorkingCopyOwner owner = .; / Create working copy ICompilationUnit workingCopy = originalUnit.getWorkingCopy(owner, null, null); / Modify buffer and recon

18、cile IBuffer buffer = (IOpenable)workingCopy).getBuffer(); buffer.append("class X "); workingCopy.reconcile(NO_AST, false, null, null); / Commit changes workingCmitWorkingCopy(false, null); / Destroy working copy workingCopy.discardWorkingCopy();工作副本還可以供若干使用工作副本擁有者的客戶機共享。稍后可以使用 findWorking

19、Copy 方法來檢索工作副本。因此,對于原始編譯單元和工作副本擁有者,共享工作副本很重要。下列內(nèi)容說明了客戶機 1 如何創(chuàng)建共享的工作副本、客戶機 2 如何檢索此工作副本、客戶機 1 如何廢棄此工作副本以及嘗試檢索共享的工作副本的客戶機 2 如何注意到該工作副本不再存在: / Client 1 & 2: Get original compilation unit ICompilationUnit originalUnit = .; / Client 1 & 2: Get working copy owner WorkingCopyOwner owner = .; / Clien

20、t 1: Create shared working copy ICompilationUnit workingCopyForClient1 = originalUnit.getWorkingCopy(owner, null, null); / Client 2: Retrieve shared working copy ICompilationUnit workingCopyForClient2 = originalUnit.findWorkingCopy(owner); / This is the same working copy assert workingCopyForClient1

21、 = workingCopyForClient2; / Client 1: Discard shared working copy workingCopyForClient1.discardWorkingCopy(); / Client 2: Attempt to retrieve shared working copy and find out it's null workingCopyForClient2 = originalUnit.findWorkingCopy(owner); assert workingCopyForClient2 = null;使用 DOM/AST API

22、 來修改代碼有三種方法來創(chuàng)建 CompilationUnit。第一種方法是使用 ASTParser。第二種方法是使用 ICompilationUnit#reconcile(.)。第三種方法是從頭開始對 AST(抽象語法樹)使用工廠方法。 從現(xiàn)有的源代碼創(chuàng)建 AST必須使用 ASTParser.newParser(int) 來創(chuàng)建 ASTParser 的實例。將使用下列其中一個方法將源代碼提供給 ASTParser: · setSource(char):從源代碼創(chuàng)建 AST · setSource(IClassFile):從類文件創(chuàng)建 AST · setSource

23、(ICompilationUnit):從編譯單元創(chuàng)建 AST 然后通過調(diào)用 createAST(IProgressMonitor) 來創(chuàng)建 AST。結(jié)果是每個節(jié)點都有一個具有正確源位置的 AST。在使用 setResolveBindings(boolean) 創(chuàng)建樹之前,必須請求綁定的解決方案。解決綁定是一個成本很高的操作,僅當需要時才執(zhí)行。一旦修改了樹,就會丟失所有位置和綁定。 通過協(xié)調(diào)工作副本來創(chuàng)建 AST 如果工作副本不一致(已修改),則可以通過調(diào)用方法 reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.

24、eclipse.core.runtime.IProgressMonitor) 來創(chuàng)建 AST。要請求 AST 創(chuàng)建,使用 AST.JLS2 作為第一個參數(shù)來調(diào)用 reconcile(.) 方法。僅當問題請求程序是活動或者當強制執(zhí)行問題檢測時,才會計算其綁定。解決綁定是一個成本很高的操作,僅當需要時才執(zhí)行。一旦修改了樹,就會丟失所有位置和綁定。 從頭開始 可以通過對 AST 使用工廠方法來從頭創(chuàng)建 CompilationUnit。這些方法名以 new. 開頭。以下是創(chuàng)建 HelloWorld 類的一個示例。第一個代碼段是生成的輸出: package example; import java.ut

25、il.*; public class HelloWorld public static void main(String args) System.out.println("Hello" + " world");下列代碼段是生成輸出的相應代碼。 AST ast = new AST();CompilationUnit unit = ast.newCompilationUnit();PackageDeclaration packageDeclaration = ast.newPackageDeclaration();packageDeclaration.se

26、tName(ast.newSimpleName("example");unit.setPackage(packageDeclaration);ImportDeclaration importDeclaration = ast.newImportDeclaration();QualifiedName name =ast.newQualifiedName(ast.newSimpleName("java"),ast.newSimpleName("util");importDeclaration.setName(name);importDec

27、laration.setOnDemand(true);unit.imports().add(importDeclaration);TypeDeclaration type = ast.newTypeDeclaration();type.setInterface(false);type.setModifiers(Modifier.PUBLIC);type.setName(ast.newSimpleName("HelloWorld");MethodDeclaration methodDeclaration = ast.newMethodDeclaration();methodD

28、eclaration.setConstructor(false);methodDeclaration.setModifiers(Modifier.PUBLIC | Modifier.STATIC);methodDeclaration.setName(ast.newSimpleName("main");methodDeclaration.setReturnType(ast.newPrimitiveType(PrimitiveType.VOID);SingleVariableDeclaration variableDeclaration = ast.newSingleVaria

29、bleDeclaration();variableDeclaration.setModifiers(Modifier.NONE);variableDeclaration.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("String");variableDeclaration.setName(ast.newSimpleName("args");methodDeclaration.parameters().add(variableDeclaration);org.eclipse.jd

30、t.core.dom.Block block = ast.newBlock();MethodInvocation methodInvocation = ast.newMethodInvocation();name = ast.newQualifiedName(ast.newSimpleName("System"),ast.newSimpleName("out");methodInvocation.setExpression(name);methodInvocation.setName(ast.newSimpleName("println&quo

31、t;);InfixExpression infixExpression = ast.newInfixExpression();infixExpression.setOperator(InfixExpression.Operator.PLUS);StringLiteral literal = ast.newStringLiteral();literal.setLiteralValue("Hello");infixExpression.setLeftOperand(literal);literal = ast.newStringLiteral();literal.setLite

32、ralValue(" world");infixExpression.setRightOperand(literal);methodInvocation.arguments().add(infixExpression);ExpressionStatement expressionStatement = ast.newExpressionStatement(methodInvocation);block.statements().add(expressionStatement);methodDeclaration.setBody(block);type.bodyDeclara

33、tions().add(methodDeclaration);unit.types().add(type);檢索額外的位置DOM/AST 節(jié)點只包含一對位置(起始位置和節(jié)點的長度)。這并不總是夠用。要檢索中間位置,應使用 IScanner API。例如,我們具有想要對其了解 instanceof 運算符的位置的 InstanceofExpression。可以編寫以下方法來實現(xiàn)此目的: private int getOperatorPosition(Expression expression, char source) if (expression instanceof InstanceofEx

34、pression) IScanner scanner = ToolFactory.createScanner(false, false, false, false);scanner.setSource(source);int start = expression.getStartPosition();int end = start + expression.getLength();scanner.resetTo(start, end);int token;try while (token = scanner.getNextToken() != ITerminalSymbols.TokenNam

35、eEOF) switch(token) case ITerminalSymbols.TokenNameinstanceof:return new int scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition(); catch (InvalidInputException e) return null;IScanner 用來將輸入源代碼分成多個標記。每個標記都具有特定值,這些特定值是在 ITerminalSymbols 接口中定義的。迭代和檢索正確的標記是非常簡單的。如果想要在 SuperMethod

36、Invocation 中查找 super 關鍵字的位置,則還建議您使用掃描程序。 源代碼修改某些源代碼修改不是通過 Java 元素 API 來提供的。編輯源代碼(例如,更改現(xiàn)有元素的源代碼)的較常見方法是使用編譯單元的初始源代碼和 DOM/AST 的重寫 API 來完成的。要執(zhí)行 DOM/AST 重寫,存在兩組 API:描述性重寫和修改重寫。 描述性 API 不修改 AST,而是使用 ASTRewrite API 來生成修改描述。AST 重寫程序收集對節(jié)點修改的描述并將這些描述轉(zhuǎn)換為可以適用于初始源代碼的文本編輯。 / creation of a Document ICompilationUn

37、it cu = . ; / content is "public class X n" String source = cu.getBuffer().getContents(); Document document= new Document(source); / creation of DOM/AST from a ICompilationUnit ASTParser parser = ASTParser.newParser(AST.JLS2); parser.setSource(cu); CompilationUnit astRoot = (CompilationUni

38、t) parser.createAST(null); / creation of ASTRewrite ASTRewrite rewrite = new ASTRewrite(astRoot.getAST(); / description of the change SimpleName oldName = (TypeDeclaration)astRoot.types().get(0).getName(); SimpleName newName = astRoot.getAST().newSimpleName("Y"); rewrite.replace(oldName, n

39、ewName, null); / computation of the text edits TextEdit edits = rewrite.rewriteAST(document, cu.getJavaProject().getOptions(true); / computation of the new source code edits.apply(document); String newSource = document.get(); / update of the compilation unit cu.getBuffer().setContents(newSource);修改

40、API 允許直接修改 AST: · 請求記錄修改(CompilationUnit.recordModifications())。 · 對 AST 節(jié)點執(zhí)行修改。 · 當完成修改時,生成可以適用于初始源代碼的文本編輯(CompilationUnit.rewrite(.))。 / creation of a Document ICompilationUnit cu = . ; / content is "public class X n" String source = cu.getBuffer().getContents(); Document

41、document= new Document(source); / creation of DOM/AST from a ICompilationUnit ASTParser parser = ASTParser.newParser(AST.JLS2); parser.setSource(cu); CompilationUnit astRoot = (CompilationUnit) parser.createAST(null); / start record of the modifications astRoot.recordModifications(); / modify the AS

42、T TypeDeclaration typeDeclaration = (TypeDeclaration)astRoot.types().get(0) SimpleName newName = astRoot.getAST().newSimpleName("Y"); typeDeclaration.setName(newName); / computation of the text edits TextEdit edits = astRoot.rewrite(document, cu.getJavaProject().getOptions(true); / computa

43、tion of the new source code edits.apply(document); String newSource = document.get(); / update of the compilation unit cu.getBuffer().setContents(newSource);對 Java 元素的更改作出響應如果事后插件需要知道對 Java 元素所作的更改,則可以向 JavaCore 注冊 Java IElementChangedListener。 JavaCore.addElementChangedListener(new MyJavaElementCha

44、ngeReporter();還可以更具體,并使用 addElementChangedListener(IElementChangedListener, int) 來指定您感興趣的事件的類型。例如,如果您只想在協(xié)調(diào)操作期間偵聽事件: JavaCore.addElementChangedListener(new MyJavaElementChangeReporter(), ElementChangedEvent.POST_RECONCILE);JavaCore 支持二種類型的事件: · POST_CHANGE:在相應的 POST_CHANGE 資源更改通知期間,將通知此事件類型的偵聽器。

45、 · POST_RECONCILE:在結(jié)束對工作副本的協(xié)調(diào)操作時,將通知此事件類型的偵聽器(請參閱 ICompilationUnit.reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor))。 Java 元素更改偵聽器在概念上類似于資源更改偵聽器(在跟蹤資源更改中進行了描述)。下列代碼段實現(xiàn) Java 元素更改指示器,它將元素變化打印到系統(tǒng)控制臺中。public class MyJavaElementChangeReporter implements IElementChangedListener public void

46、 elementChanged(ElementChangedEvent event) IJavaElementDelta delta= event.getDelta(); if (delta != null) System.out.println("delta received: "); System.out.print(delta); IJavaElementDelta 包括已更改的元素和描述所發(fā)生的更改類型的標志。在大多數(shù)時候,delta 樹的根位于“Java 模型”級別。然后,客戶機必須使用 getAffectedChildren 來瀏覽此 delta 以了解已經(jīng)更改

47、了哪些項目。以下示例方法遍歷 delta,并打印已添加、已除去和已更改的元素: void traverseAndPrint(IJavaElementDelta delta) switch (delta.getKind() case IJavaElementDelta.ADDED: System.out.println(delta.getElement() + " was added"); break; case IJavaElementDelta.REMOVED: System.out.println(delta.getElement() + " was remo

48、ved"); break; case IJavaElementDelta.CHANGED: System.out.println(delta.getElement() + " was changed"); if (delta.getFlags() & IJavaElementDelta.F_CHILDREN) != 0) System.out.println("The change was in its children"); if (delta.getFlags() & IJavaElementDelta.F_CONTENT)

49、 != 0) System.out.println("The change was in its content"); /* Others flags can also be checked */ break; IJavaElementDelta children = delta.getAffectedChildren(); for (int i = 0; i < children.length; i+) traverseAndPrint(childreni); 有多種操作可以觸發(fā) Java 元素更改通知。以下是一些示例: · 創(chuàng)建資源,例如 IPackag

50、eFragment.createCompilationUnit(delta 指示編譯單元的添加) · 修改資源,例如 ICompilationUnit.createType(delta 指示編譯單元已更改,并且已添加類型來作為此編譯單元的子代) · 修改項目的類路徑,例如 IJavaProject.setRawClasspath(delta 指示包段根目錄已添加至類路徑、已從類路徑中除去或在類路徑上已重新排序) · 修改類路徑變量值,例如 JavaCore.setClasspathVariable(delta 還指示包段根目錄已經(jīng)受到影響) · 更改 .

51、jar 文件的源代碼連接,例如 IPackageFragmentRoot.attachSource(delta 指示源已拆離,然后連接) · 使工作副本與它的緩沖區(qū)協(xié)調(diào),例如 IWorkingCopy.reconcile · 修改以“.java”結(jié)尾并且在項目的類路徑上的 IFile,例如,使用 IFile.setContents(delta 指示編譯單元已更改,但是未提供更詳細的信息,原因是這不是通過“Java 模型”操作來完成的) 與 IResourceDelta 相似,可以使用 IWorkspaceRunnable 來對 Java 元素 delta 進行批處理。立即就

52、會合并和報告在 IWorkspaceRunnable 中運行的若干“Java 模型”操作產(chǎn)生的 delta。   JavaCore 提供了 run 方法來對 Java 元素更改進行批處理。例如,以下代碼段將觸發(fā)兩個 Java 元素更改事件: / Get package IPackageFragment pkg = .; / Create 2 compilation units ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A ",

53、false, null); ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B ", false, null);而以下代碼段將觸發(fā) 1 個 Java 元素更改事件: / Get package IPackageFragment pkg = .; / Create 2 compilation units JavaCore.run( new IWorkspaceRunnable() public void run(IProgressMonitor monit

54、or) throws CoreException ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A ", false, null); ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B ", false, null); , null);設置 Java 構(gòu)建路徑本節(jié)描述如何設置 Java 構(gòu)建路徑。構(gòu)建路徑是用于構(gòu)

55、建 Java 項目(IJavaProject)的類路徑。類路徑只是一組用于描述可用類型的類路徑條目(IClassPathEntry)。類型能夠以源或二進制格式出現(xiàn),并且條目在路徑中的順序定義了用于在構(gòu)建期間解析類型的查找順序。Java 構(gòu)建路徑反映在 Java 項目元素的結(jié)構(gòu)中??梢圆樵冺椖康陌胃夸洠↖PackageFragmentRoot)。每個類路徑條目都映射至一個或多個包段根目錄,每個包段根目錄進一步包含一組包段。此處對構(gòu)建路徑的討論不涉及 Java 運行時路徑,Java 運行時路徑可以獨立于構(gòu)建路徑進行定義。(有關運行時類路徑的討論,請參閱運行 Java 代碼。)更改構(gòu)建路徑可以通過對相應項目的 Java 元素使用 setRawClasspath 來使用程序更改項目的構(gòu)建路徑。以下代碼設置項目資源的類路徑: IProject project = . / get some project resourceIJavaProject javaProjec

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論