Eclipse/プラグイン開発のTIPS集/Javaプロジェクトを操作する
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
[[Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパ...
Javaソースは、何とかっていう名前のJavaプロジェクトに属し...
パッケージ・エクスプローラを見てもわかるとおり、Javaプロ...
**org.eclipse.jdt.core.IJavaElement [#ge8dcc8a]
全ての要素が拡張しているインタフェースですね。定数を見る...
int JAVA_MODEL = 1;
int JAVA_PROJECT = 2;
int PACKAGE_FRAGMENT_ROOT = 3;
int PACKAGE_FRAGMENT = 4;
int COMPILATION_UNIT = 5;
int CLASS_FILE = 6;
int TYPE = 7;
int FIELD = 8;
int METHOD = 9;
int INITIALIZER = 10;
int PACKAGE_DECLARATION = 11;
int IMPORT_CONTAINER = 12;
int IMPORT_DECLARATION = 13;
int LOCAL_VARIABLE = 14;
int TYPE_PARAMETER = 15;
くらい種類があるようです。
**[[org.eclipse.jdt.core.IJavaModel>http://help.eclipse.o...
ワークスペース内のJavaモデル(?)のルートです。IJavaElemen...
IJavaProject[] getJavaProjects();
IJavaProject getJavaProject(String name);
IWorkspace getWorkspace();
などのメソッドを持っているようです。
**[[org.eclipse.jdt.core.IJavaProject>http://help.eclipse...
Javaプロジェクトです。 IJavaElement#getJavaProject() で取...
**[[org.eclipse.jdt.core.IPackageFragmentRoot>http://help...
Javaプロジェクト内のパッケージ階層のトップ要素です。ソー...
たとえば
IPackageFragmentRoot root = null;
try {
IJavaProject javaProject = element.getJavaProject();
IPackageFragmentRoot[] roots = javaProject
.getPackageFragmentRoots();
for (IPackageFragmentRoot rootTmp : roots) {
if (rootTmp.getKind() == IPackageFragmentRoot.K_SOUR...
root = rootTmp; ↑ソースディレクトリだったら
}
}
} catch (JavaModelException e) {
e.printStackTrace();
}
などとしてソースディレクトリを取得することができます。
***他にもいろいろ確認してみた [#l04367c0]
他にも以下のやり方でソースディレクトリが取得できそうです...
#ref(ICompilationUnit.png)
上のようなディレクトリ構成で、いろいろなメソッドを実行し...
System.out.println("Path: " + element.getPath());
System.out.println("Parent: " + element.getParent().getP...
System.out.println("PrimaryElement: "
+ element.getPrimaryElement().getPath());
System.out.println("Primary: " + element.getPrimary().ge...
IPackageFragmentRoot root = (IPackageFragmentRoot) element
.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
System.out.println("Ancestor: " + root.getPath());
elementはキャプチャ内のBL.javaを指しているICompilationUni...
実行結果は以下の通り:
Path: /HogeProject/src/nu/mine/kino/BL.java
Parent: /HogeProject/src/nu/mine/kino
PrimaryElement: /HogeProject/src/nu/mine/kino/BL.java
Primary: /HogeProject/src/nu/mine/kino/BL.java
Ancestor: /HogeProject/src
IJavaElement#getAncestor(int ancestorType) メソッドで、要...
IPackageFragmentRoot root = (IPackageFragmentRoot) element
.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
として、BL.javaが入っているディレクトリのトップ階層つまり...
他のメソッドについてですが IJavaElement#getParent() につ...
***パッケージを作る [#ta053d03]
上の方法でソースディレクトリのIPackageFragmentRootを取得...
IPackageFragment createPackageFragment(
String name,
boolean force,
IProgressMonitor monitor)
を呼び出すことで、パッケージを作成することができます。た...
String elementName = element.getParent().getElementName();
String sample = "sample";
String newPackage = "".equals(elementName) ? sample
: elementName + "." + sample;
IPackageFragment packageDir = root.createPackageFragment(
newPackage, true,new Nul...
とします。単純に文字列連結だと、elementがデフォルトパッケ...
**[[org.eclipse.jdt.core.IPackageFragment>http://help.ecl...
上の例の
IPackageFragment createPackageFragment(
String name,
boolean force,
IProgressMonitor monitor)
で返ってくるオブジェクトが IPackageFragment です。つまり...
ICompilationUnit createCompilationUnit(
String name, String contents,
boolean force, IProgressMonitor monitor)
というメソッドがあります。
ICompilationUnit hoge = packageDir.createCompilationUnit(
"Hoge.java", "public class Hoge{}", true,
new NullProgressMonitor());
IPackageDeclaration declaration = hoge.createPackageDecl...
newPackage, new NullProgressMonitor());
こんな感じでソースコードを生成することができるんですね。
**org.eclipse.jdt.core.ICompilationUnit [#r9ed8ac6]
Javaのソースコードですね。[[ソースコードを解析するパーサA...
logger.debug("ファイル名: " + element.getElementName());...
String sourceName = element.getElementName().substring(0,
element.getElementName().lastIndexOf("."));
logger.debug("クラス名: " + sourceName);
logger.debug("クラスの完全修飾クラス名: "
+ element.getType(sourceName).getFullyQualifiedName());
logger.debug("パッケージ名: " + element.getParent().getE...
String source = cu.getPath().toPortableString();
logger.debug("ソースへのパス: " + source);
実行結果は以下の通り。
ファイル名: BL.java
クラス名: BL
クラスの完全修飾クラス名: nu.mine.kino.BL
パッケージ名: nu.mine.kino
ソースへのパス: /Samples/source/nu/mine/kino/BL.java
ただ 完全修飾クラス名 を取得するメソッドは、そのファイル...
***ソースコードのIResourceインスタンスを取得する。 [#xe2f...
JDT周りをやってるとIResouce系を忘れてしまいそうですが、あ...
// ソースコードに対応するファイルのIResource
IResource resource = cu.getCorrespondingResource();
これでOKですね。
**関連リンク [#z06a92a2]
-Eclipse/プラグイン開発のTIPS集/org.eclipse.jdt.core.ICom...
-Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパ...
-[[Java Tool Smithing, Extending the Eclipse Java Develop...
-[[プラグインでリソースを扱う>http://www13.plala.or.jp/ob...
-[[Eclipseプラグイン開発/ファイルの作成>http://yoichiro.c...
-[[プロジェクト配下のリソースの取得方法2>http://hp.vector...
----
この記事は
#vote(おもしろかった[11],そうでもない[3])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
[[Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパ...
Javaソースは、何とかっていう名前のJavaプロジェクトに属し...
パッケージ・エクスプローラを見てもわかるとおり、Javaプロ...
**org.eclipse.jdt.core.IJavaElement [#ge8dcc8a]
全ての要素が拡張しているインタフェースですね。定数を見る...
int JAVA_MODEL = 1;
int JAVA_PROJECT = 2;
int PACKAGE_FRAGMENT_ROOT = 3;
int PACKAGE_FRAGMENT = 4;
int COMPILATION_UNIT = 5;
int CLASS_FILE = 6;
int TYPE = 7;
int FIELD = 8;
int METHOD = 9;
int INITIALIZER = 10;
int PACKAGE_DECLARATION = 11;
int IMPORT_CONTAINER = 12;
int IMPORT_DECLARATION = 13;
int LOCAL_VARIABLE = 14;
int TYPE_PARAMETER = 15;
くらい種類があるようです。
**[[org.eclipse.jdt.core.IJavaModel>http://help.eclipse.o...
ワークスペース内のJavaモデル(?)のルートです。IJavaElemen...
IJavaProject[] getJavaProjects();
IJavaProject getJavaProject(String name);
IWorkspace getWorkspace();
などのメソッドを持っているようです。
**[[org.eclipse.jdt.core.IJavaProject>http://help.eclipse...
Javaプロジェクトです。 IJavaElement#getJavaProject() で取...
**[[org.eclipse.jdt.core.IPackageFragmentRoot>http://help...
Javaプロジェクト内のパッケージ階層のトップ要素です。ソー...
たとえば
IPackageFragmentRoot root = null;
try {
IJavaProject javaProject = element.getJavaProject();
IPackageFragmentRoot[] roots = javaProject
.getPackageFragmentRoots();
for (IPackageFragmentRoot rootTmp : roots) {
if (rootTmp.getKind() == IPackageFragmentRoot.K_SOUR...
root = rootTmp; ↑ソースディレクトリだったら
}
}
} catch (JavaModelException e) {
e.printStackTrace();
}
などとしてソースディレクトリを取得することができます。
***他にもいろいろ確認してみた [#l04367c0]
他にも以下のやり方でソースディレクトリが取得できそうです...
#ref(ICompilationUnit.png)
上のようなディレクトリ構成で、いろいろなメソッドを実行し...
System.out.println("Path: " + element.getPath());
System.out.println("Parent: " + element.getParent().getP...
System.out.println("PrimaryElement: "
+ element.getPrimaryElement().getPath());
System.out.println("Primary: " + element.getPrimary().ge...
IPackageFragmentRoot root = (IPackageFragmentRoot) element
.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
System.out.println("Ancestor: " + root.getPath());
elementはキャプチャ内のBL.javaを指しているICompilationUni...
実行結果は以下の通り:
Path: /HogeProject/src/nu/mine/kino/BL.java
Parent: /HogeProject/src/nu/mine/kino
PrimaryElement: /HogeProject/src/nu/mine/kino/BL.java
Primary: /HogeProject/src/nu/mine/kino/BL.java
Ancestor: /HogeProject/src
IJavaElement#getAncestor(int ancestorType) メソッドで、要...
IPackageFragmentRoot root = (IPackageFragmentRoot) element
.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
として、BL.javaが入っているディレクトリのトップ階層つまり...
他のメソッドについてですが IJavaElement#getParent() につ...
***パッケージを作る [#ta053d03]
上の方法でソースディレクトリのIPackageFragmentRootを取得...
IPackageFragment createPackageFragment(
String name,
boolean force,
IProgressMonitor monitor)
を呼び出すことで、パッケージを作成することができます。た...
String elementName = element.getParent().getElementName();
String sample = "sample";
String newPackage = "".equals(elementName) ? sample
: elementName + "." + sample;
IPackageFragment packageDir = root.createPackageFragment(
newPackage, true,new Nul...
とします。単純に文字列連結だと、elementがデフォルトパッケ...
**[[org.eclipse.jdt.core.IPackageFragment>http://help.ecl...
上の例の
IPackageFragment createPackageFragment(
String name,
boolean force,
IProgressMonitor monitor)
で返ってくるオブジェクトが IPackageFragment です。つまり...
ICompilationUnit createCompilationUnit(
String name, String contents,
boolean force, IProgressMonitor monitor)
というメソッドがあります。
ICompilationUnit hoge = packageDir.createCompilationUnit(
"Hoge.java", "public class Hoge{}", true,
new NullProgressMonitor());
IPackageDeclaration declaration = hoge.createPackageDecl...
newPackage, new NullProgressMonitor());
こんな感じでソースコードを生成することができるんですね。
**org.eclipse.jdt.core.ICompilationUnit [#r9ed8ac6]
Javaのソースコードですね。[[ソースコードを解析するパーサA...
logger.debug("ファイル名: " + element.getElementName());...
String sourceName = element.getElementName().substring(0,
element.getElementName().lastIndexOf("."));
logger.debug("クラス名: " + sourceName);
logger.debug("クラスの完全修飾クラス名: "
+ element.getType(sourceName).getFullyQualifiedName());
logger.debug("パッケージ名: " + element.getParent().getE...
String source = cu.getPath().toPortableString();
logger.debug("ソースへのパス: " + source);
実行結果は以下の通り。
ファイル名: BL.java
クラス名: BL
クラスの完全修飾クラス名: nu.mine.kino.BL
パッケージ名: nu.mine.kino
ソースへのパス: /Samples/source/nu/mine/kino/BL.java
ただ 完全修飾クラス名 を取得するメソッドは、そのファイル...
***ソースコードのIResourceインスタンスを取得する。 [#xe2f...
JDT周りをやってるとIResouce系を忘れてしまいそうですが、あ...
// ソースコードに対応するファイルのIResource
IResource resource = cu.getCorrespondingResource();
これでOKですね。
**関連リンク [#z06a92a2]
-Eclipse/プラグイン開発のTIPS集/org.eclipse.jdt.core.ICom...
-Eclipse/プラグイン開発のTIPS集/ソースコードを解析するパ...
-[[Java Tool Smithing, Extending the Eclipse Java Develop...
-[[プラグインでリソースを扱う>http://www13.plala.or.jp/ob...
-[[Eclipseプラグイン開発/ファイルの作成>http://yoichiro.c...
-[[プロジェクト配下のリソースの取得方法2>http://hp.vector...
----
この記事は
#vote(おもしろかった[11],そうでもない[3])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: