アクセス規則
Eclipse 3.1 ランタイムによって、プラグインの開発者は、プラグイン・コードのダウンストリーム・プラグインからの可視性をパッケージごとに制御できます。
パッケージは以下のいずれか 1 つに分類されます。
PDE は、コンパイル時に、これらのランタイムの可視性規則をコンパイラー・アクセス制限規則に変換します。この結果、可視性規則の違反には、違反の重大度に応じて、コンパイラーによって警告またはエラーのフラグが立てられます。
コンパイル時のこのような支援によって、ランタイム・クラス・ロード・エラーが予期せず発生することはなくなり、内部の型参照をいつでも確認することができます。
アクセス可能パッケージ
アクセス可能パッケージは、無条件にダウンストリーム・プラグインから可視になっています。 API パッケージは、この分野に明確に分類されている必要があります。ただし、プラグインによってエクスポートされた他のどのパッケージにこの可視性レベルを与えるかは、開発者のみが決定します。
パッケージをアクセス可能として宣言するには、プラグインのマニフェスト・エディターの「ランタイム」上の「エクスポート済みパッケージ」セクションにリストし、デフォルトの可視性の設定を現状のままにしておく必要があります。
禁止パッケージ
パッケージは、プラグインのマニフェスト・エディターの「ランタイム」ページ上の「エクスポート済みパッケージ」セクションにあるリストから除外することによって、いつでもダウンストリーム・プラグインから隠すことができます。
禁止 パッケージのタイプを参照すると、実行時にクラス・ロード・エラーが発生します。
このような好ましくない状況を避けるには、次のようにします。
注:
禁止参照の重大度は、ERROR にしておくことが強く推奨されています。
内部パッケージ
内部パッケージは、ダウンストリーム・プラグインが使用するためのパッケージではありません。 これらのパッケージは、 デフォルトでダウンストリーム・プラグインに可視になっています。
内部パッケージは、Eclipse が制約 モードで起動された場合 (すなわち、-Dosgi.resolverMode=strict VM 引数で起動した場合) のみ、ダウンストリーム・プラグインから隠されます。
内部パッケージは、プラグインのマニフェスト・エディターの「ランタイム」 ページ上の「エクスポート済みパッケージ」セクションに、「隠す (hidden)」オプションを選択して、リストされている必要があります。
ダウンストリーム・プラグインが内部パッケージを参照しないようにするには、次の 2 つの手段があります。
推奨されない参照の重大度レベルは、
「Java」>「コンパイラー」>「エラー/警告」>「使用すべきではない制限された API」 設定ページで設定できます。
フレンド付き内部パッケージ
プラグインが、指定済み「フレンド」プラグインに、その内部パッケージへの全アクセス権限を許可できるということは重要です。例えば、PDE コードは、複数のプラグインに分割され、org.eclipse.pde.ui プラグインには、org.eclipse.pde.core の内部パッケージへの全アクセス権限が必要です。
以下の例では、フレンド・プラグイン org.eclipse.pde.ui には、org.eclipse.pde.core プラグインの org.eclipse.pde.internal.core.bundle パッケージへの全アクセス権限があります。
フレンドは、コンパイラーの承認で、org.eclipse.pde.internal.core.bundle パッケージからの任意型を自由に参照します。
一方、他の任意のプラグインが org.eclipse.pde.internal.core.bundle パッケージからのタイプを参照する場合、コンパイラーは、直前のセクションで説明している推奨されない参照として、参照にフラグを立てます。
アクセス制限を使用可能にする方法
PDE アクセス制限サポートを利用するための唯一の要件は、問題のプラグインに、OSGi バンドル MANIFEST.MF が組み込まれていることです。 PDE は、それ以外のこと (プラグイン・クラスパスの管理など) を担当します。
プラグインに MANIFEST.MF ファイルが組み込まれていない場合には、このファイルを次のように作成できます。
アクセス規則のインスペクション
プラグイン・プロジェクトの「Java のビルド・パス (Java Build Path)」プロパティー・ページで、PDE によってそれぞれのクラスパス・エントリーに組み込まれたアクセス制限規則を検査できます。