アクセス制限

Eclipse 3.1 ランタイムによって、プラグインの開発者は、 プラグイン・コードのダウンストリーム・プラグインからの可視性をパッケージごとにコントロールするオプション が得られます。

パッケージは以下のいずれか 1 つに分類されます。

  1. アクセス可能
  2. 禁止
  3. 内部
  4. 内部およびフレンド

PDE は、コンパイル時に、これらのランタイムの可視性規則をコンパイラー・アクセス制限規則に変換します。 この結果、可視性規則の違反には、違反の重大度に応じて、コンパイラーによって警告またはエラーのフラグが立てられます。

コンパイル時のこのサポートの可用性によって、実行時の予期しないクラス・ロード・エラーはなくなり、 内部タイプをいつ参照しているのかを常に確認できます。

 

アクセス可能パッケージ

アクセス可能パッケージは、無条件にダウンストリーム・プラグインから可視になっています。   API パッケージは、この分野に明確に分類されている必要があります。 ただし、プラグインによってエクスポートされた他のどのパッケージにこの可視性レベルを与えるかは、開発者のみが決定します。

パッケージをアクセス可能として宣言するには、プラグインのマニフェスト・エディターの「ランタイム」上の「エクスポート済みパッケージ」セクションにリストし、デフォルトの可視性の設定を現状のままにしておく必要があります。

アクセス可能パッケージ

 

禁止パッケージ

パッケージは、プラグインのマニフェスト・エディターの「ランタイム」ページ上の「エクスポート済みパッケージ」セクションにあるリストから除外することによって、 いつでもダウンストリーム・プラグインから隠すことができます。

禁止パッケージからのタイプを参照すると、実行時にクラス・ロード・エラーになります。

 このような好ましくない状況を避けるには、次のようにします。

  1. コンパイラーは、禁止パッケージへの参照に ERROR. というフラグを立てます。
  2. 禁止パッケージからのタイプは、コンテンツ・アシスト内のプロポーザルとして使用できません

注:

  1. Eclipse SDK 内のすべてのプラグインは、「エクスポート済みパッケージ」セクション内のすべてのパッケージを列挙します。  このため、SDK 内のパッケージで、アクセスが禁止されているものはありません。
  2. 禁止参照の重大度レベルは、「Java」>「コンパイラー」>「エラー/警告 (Errors/Warnings)」>「使用すべきではない制限された API (Deprecated and restricted API)」 設定ページで設定されています。

    禁止参照の重大度は、ERROR にしておくことが強く推奨されています。

    禁止設定

内部パッケージ

内部パッケージは、ダウンストリーム・プラグインが使用するためのパッケージではありません。 これらのパッケージは、 デフォルトでダウンストリーム・プラグインに可視になっています

内部パッケージは、Eclipse が制約 モードで起動された場合 (すなわち、-Dosgi.resolverMode=strict VM 引数で起動した場合) のみ、ダウンストリーム・プラグインから隠されます。

内部パッケージは、プラグインのマニフェスト・エディターの「ランタイム」 ページ上の「エクスポート済みパッケージ」セクションに、「隠す (hidden)」オプションを選択して、リストされている必要があります。

推奨されないアクセス

ダウンストリーム・プラグインが内部パッケージを参照しないようにするには、次の 2 つの手段があります。

推奨されないアクセス

推奨されないコンテンツ・アシスト

推奨されない参照の重大度レベルは、「Java」>「コンパイラー」>「エラー/警告 (Errors/Warnings)」>「使用すべきではない制限された API (Deprecated and restricted API)」 設定ページで設定できます。

推奨されない設定

 

フレンド付き内部パッケージ

プラグインが、指定済み「フレンド」プラグインに、 その内部パッケージへの全アクセス権限を許可できるということは重要です。 例えば、PDE コードは、複数のプラグインに分割され、org.eclipse.pde.ui プラグインには、org.eclipse.pde.core の内部パッケージへの全アクセス権限が必要です。

以下の例では、フレンド (org.eclipse.pde および 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 ファイルが組み込まれていない場合には、 このファイルは次のように作成できます。

  1. プラグインのマニフェスト・エディターで、plugin.xml を開きます。
  2. 「概説」ページの「プラグイン・コンテンツ」セクションで、 「OSGi バンドル・マニフェストを作成 (create an OSGi bundle manifest)」リンクをクリックします。

manifest.mf への変換

 

アクセス規則のインスペクション

プラグイン・プロジェクトの「Java のビルド・パス (Java Build Path)」プロパティー・ページで、PDE によってそれぞれのクラスパス・エントリーに組み込まれたアクセス制限規則を検査できます。

Java のビルド・パス・プロパティー