====== Access Wideners ======
Access Wideners 〔アクセスワイドナー〕は、クラス、メソッド、またはフィールドのアクセス制限を緩和する方法を提供します。 Access Wideners は、一般的に知られているアクセストランスフォーマーに似ています。
アクセサーミックスインの代わりに Access Wideners を使用することができます。現在、ミックスインによって提供される機能が十分でない場合が 2 つあります:
* 特にミックスイン内のフィールドまたはメソッドをシャドーイングまたはアクセスする目的で、(パッケージの)プライベートクラスにアクセスする必要があります。
* final メソッドをオーバーライドしたり、 final クラスを継承したりできる。
* (パッケージの)プライベートコンストラクターのみを使用してクラスをサブクラス化したい場合は、 Access Wideners が適しています。
逆コンパイルされたソースにアクセス範囲の広い変更が表示されるようにするには、 ''genSources'' gradle タスクを実行します。
===== 要件 =====
* Fabric-loader 0.8.0 以降
* Loom 0.2.7 以降
===== ファイル形式 =====
Mod に含まれるアクセスの変更を定義するために、特定のファイル形式が使用されます。 IDE を支援するには、 ''.accesswidener'' ファイル拡張子を使用する必要があります。
ファイルは次のヘッダーで開始する必要があります。 ''namespace'' は通常、常に ''named'' である必要があります。 Loom は、 Mod とともに Access widener ファイルを ''intermediary'' に再マップします。 カスタムの ''RemapJarTask'' を使用する場合は、''remapAccessWidener'' プロパティを ''true'' に設定して、これが確実に行われるようにします。
accessWidener v1
**繰り返しになりますが、すべての場合ではないにしても、ほとんどの場合、名前空間に__名前を付ける__必要があります**
Access Widener ファイルには、# で始まる空白行とコメントを含めることができます
# このようなコメントは、行末までサポートされています
Access Widener ファイルでは、任意の空白を使用して区切ることができます。タブを使用することをお勧めします。
クラス名は、 ''.'' ではなく ''/'' で区切ります。
内部クラスの場合、 ''/'' の代わりに ''$'' を使用する必要があります
== クラス ==
クラスアクセスは、ヘッダーで定義されたマッピング名前空間に指定されたアクセスとクラス名を指定することで変更できます。
class
- access は //accessible// 〔アクセス可能〕または //extendable// 〔拡張可能〕にすることができます
== メソッド ==
メソッドアクセスは、ヘッダーで定義されたマッピング名前空間に指定されているように、アクセス、クラス名、メソッド名、およびメソッド記述子を指定することによって変更できます。
method
- access は //accessible// 〔アクセス可能〕または //extendable// 〔拡張可能〕にすることができます
- className はクラスです
- methodName はメソッド名です
- methodDesc はメソッド記述子です
== フィールド ==
フィールドアクセスは、ヘッダーで定義されたマッピング名前空間に指定されているように、アクセス、クラス名、フィールド名、およびフィールド記述子を指定することによって変更できます。
field
- access は //accessible// 〔アクセス可能〕または //extendable// 〔拡張可能〕にすることができます
- className はクラスです
- fieldName はフィールド名です
- fieldDesc はフィールド記述子です
===== アクセスの変更 =====
=== 拡張可能 ===
クラスを拡張したり、メソッドをオーバーライドしたい場合は、 extendable 〔拡張可能〕を使用する必要があります。
* クラスが public になり final でなくなります
* メソッドが protected になり final でなくなります
メソッドを拡張可能にすると、クラスも拡張可能になります。
=== アクセス可能 ===
別のクラスからクラス、フィールド、またはメソッドにアクセスする場合は、 accessible 〔アクセス可能〕を使用する必要があります。
* クラスが public になります
* メソッドが public になり、 private なら final になります
* フィールドが public になります
メソッドまたはフィールドをアクセス可能にすると、クラスもアクセス可能になります。
=== ミュータブル ===
final フィールドを変更する場合は Mutable を使用する必要があります
* フィールドが final でなくなります
===== ファイルの場所の指定 =====
Access Widener ファイルの場所は、 build.gradle と fabric.mod.json ファイルで指定する必要があります。エクスポートされた jar ファイルに含める必要があるため、リソースに保存する必要があります。
Loom 0.9 以降:
loom {
accessWidenerPath = file("src/main/resources/modid.accesswidener")
}
Loom 0.8 以前:
loom {
accessWidener = file("src/main/resources/modid.accesswidener")
}
fabric.mod.json:
...
"accessWidener" : "modid.accesswidener",
...
===== ファイルの検証 =====
デフォルトでは、存在しない accesswidener エントリは無視されます。
最近のバージョンの Loom では、''gradlew validateAccessWidener'' を実行して、accesswidener ファイルで指定されたすべてのクラス、フィールド、およびメソッドが存在することを確認できます。