2017-12-18 12 views
0

カスタムJVM言語用の静的コード解析ツールを実装する必要があります。getDeclaredMethods(): Method[]のように、Java Class<?>クラスでアクセス可能なほとんどのメソッドを使用したいと考えています。 私は2つのアプローチを考え出しました:カスタムJVM言語のスタティックコード解析ツールのタイプ情報を実装する方法は?

1)すべてのクラスをコンパイルして、javapと呼ぶことができる.classファイルを作成してから、javapの結果をJavaソースファイルに保存し、Javaタイプ情報を使用します。

2)antlr4を使用して、Javaでアクセス可能なものと同じクラス構造を作成します。 他の方法がありますか?

オプション2がホイールを再発明しているような気がしますか、それとも有効なアプローチですか? 私はオプション番号1が良いと思うが、天気がまったく問題ないとは確信していない。そして私のカスタム言語のすべてのファイルをコンパイルする必要があるので、静的なコード分析ではない。

私を助けてくれますか、少なくとも正しい方向に向けるのを助けてください。

+0

「カスタムJVM言語」という用語は、JVM上で動作するものを意味するため、java.lang.Classを介してすでにアクセスおよび検査できるクラスとして表現する必要があります。あなたの2つの代替迂回路がいくつかのツールを介して、それぞれが最初に既に持っていたことに終わっているものが、追加しなければならないことははっきりしていません。あなたは実際に何を達成したいのかについてもっと多く説明しなければなりません。 – Holger

+0

この言語は、例えばScalaです(しかし、それは結果的にJVMの* .classファイルが生成される別の言語ではありません)。言語の構文はJavaとは少し異なります。私のカスタム言語のソースコードファイルをコンパイルしていないのに、何とかしてそのファイル(ファイル)を読んで、その後に最小限の労力でJava.ClassのようなAPIを用意したいと思っています。これがもっと明確になることを願っていますか? – BlueLettuce16

+0

実際にはありません。 "*カスタム言語のソースコードファイルをコンパイルしていない*"とはどういう意味ですか?あなたの言語用のコンパイラがない場合は、 "jvm-language"がありません。あなたの変種1の最初のステップは、ソースをコンパイルすることです。そしてあなたはすでにReflectionが使っているものを持っています。後で "* javapを呼び出して、javapの結果をJavaソースファイル*に保存するというあなたの考えは、コンパイルされた' .class'ファイルにはないものがありますか?それは明らかに組み込みのReflectionではない "*とJavaのタイプ情報*"を使用していますか? – Holger

答えて

0

バイトコードを扱うためにjavassistと[cglib]があります。 Googleのerrorproneは、代わりにプロセス/コンパイラをビルドするために自分自身をフックします。コンパイラの一部としてスタティックコード解析を行うことは悪い考えではありません。たとえば、Javaコンパイラが到達不能なコードをチェックするなどです。

+0

スタティックコード解析をコンパイラの一部にしたくありません。私は、カスタムJVM言語用の静的コード解析ツールを作成しています。これは現在、ソースファイル上で動作します。 – BlueLettuce16

関連する問題