私は現在、javacコンパイラを変更して、特定の方法で独自のプログラミング言語を生成するように取り組んでいます。
Javaのデフォルトのアクセス修飾子を取り除き、アクセス修飾子を持たないものはすべてパブリックにします。
しかし、これまでのところ、Javaコンパイルコードのどこにこれが実装されているかを見つけることに成功していません。宣言フェーズの1つに簡単に追加できますが、これは私たちが望んでいない不十分なソリューションです。
これについて何か洞察はありますか?
ファイル形式、特にセクション4.5フィールドと4.6メソッドを見ると、次の定数が定義されていることがわかります。class
ACC_PUBLIC 0x0001
ACC_PRIVATE 0x0002
ACC_PROTECTED 0x0004
ただし、クラスの特定のメソッド(フィールド)には、最大でACC_PRIVATE、ACC_PROTECTED、およびACC_PUBLICフラグのいずれかが設定されている場合があります(JLS§8.3.1)。
フラグはなくACC_DEFAULT
、ドキュメントには多くても1つ(正確には1つではない)と記載されているため、フラグがまったくないということはデフォルトのアクセスを意味すると思います。