1

Java ファイルのエラーをスキャンするプログラムがあります。Eclipse からコンパイラーを呼び出し、Java ファイルをスキャンして、行番号、開始位置、および終了位置を出力として取得します。ファイルからエラーを抽出するプログラムを作成しました。

私がやりたいことは、Eclipse でクイックフィックス コンポーネントにアクセスし、問題の可能な修正のリストを取得して、そのリストをコンソールに出力することです。

以下は、コンパイラを呼び出して詳細をコンソールに出力したプログラムの一部です。

Iterable fileObjects = fileManager.getJavaFileObjectsFromStrings(
        Arrays.asList(fileToCompile));  
CompilationTask task = compiler.getTask(null, fileManager, listener, null,
        null, fileObjects); 
Boolean result = task.call();
if(result == true) {
    System.out.println("Compilation has succeeded");
}
myerrors = listener.getlistofErrors();
for (CaptureErrors e : myerrors) {
    System.out.println("Code: " + e.getCode());
    System.out.println("Kind: " + e.getKind());
    System.out.println("Line Number: " + e.getLinenumber());
//  System.out.println("Message: "+ e.getMessage(Locale.ENGLISH));
//  System.out.println("Source: " + diagnostic.getSource());
    System.out.println("End position"+ e.getEndposition());
    System.out.println("Position: "+ e.getPosition());
    System.out.println("\n");
}

class MyDiagnosticListener implements DiagnosticListener {
    List<CaptureErrors> errors = new ArrayList<CaptureErrors>();
    public void report(Diagnostic diagnostic) {
        CaptureErrors single_error = new CaptureErrors(diagnostic.getCode(),
                diagnostic.getKind(), diagnostic.getLineNumber(),
                diagnostic.getMessage(Locale.ENGLISH), diagnostic.getPosition(),
                diagnostic.getEndPosition());
        errors.add(single_error);  
    }

    public List<CaptureErrors> getlistofErrors() {
        return errors;
    }
}

行番号に移動し、特定の位置でテキスト(エラー)を抽出するプログラムもあります。

見つかった特定のエラーに対して Eclipse クイックフィックス ソリューションを呼び出すにはどうすればよいですか?

4

1 に答える 1

1

はい、可能です。正確な詳細は、StackOverflow の回答に簡単に含めることができるよりも少し大きいです。

Eclipse は、プラグインを使用して拡張されます。「Hello World」プラグインの詳細については、こちらを参照してください。最初の学習曲線が完成したら、他のプラグインをダウンロードして、Eclipse が内部でどのように機能するかを理解することができます。

eclipse の現在のコード ハイライト機能を調べて、それらのプラグインのソース コードをガイドとして読むのは良いことだと思いますが、それはプラグイン開発がどのように機能するかについてある程度理解した後でのみです。

于 2013-01-30T17:21:40.933 に答える