2011-02-08 10 views
1

私はHeliosを使用しています。Eclipseプラグイン:非エディタIEditorInputを持つJSエディタ

我々はFormEditorが含まれているプラ​​グインを書いています。このエディタのタブの1つに、ネストされたJSエディタがあります。そのJSエディタ内で、オブジェクトモデルをオートコンプリートで表示します。

私は(この動作は無効にすることができます)私たちのいずれかのファイルを開いたときに自動的に現在のプロジェクトのJSのビルド・パスにJS自然と私たちのライブラリを追加する方法を考え出しました。

私たちはJSDocスタブa、IJsGlobalScopeContainerInitializerSystemLibraryLocationなどを持っています。

public class LibInitializer extends JsGlobalScopeContainerInitializer implements IJsGlobalScopeContainerInitializer { 
    //... 

    public int getKind() { 
    return IJsGlobalScopeContainer.K_SYSTEM; 
    } 

    public boolean canUpdateJsGlobalScopeContainer(IPath containerPath, IJavaScriptProject project) { 
    return true; 
    } 

    static class LibLocation extends SystemLibraryLocation { 
    //... 
    LibLocation() { 
     super(); 
    } 

    public char[][] getLibraryFileNames() { 
     // what's plural of "chars"? 
     return LibInitializer.LIBRARY_FILE_CHARSES; 
    } 

    public IPath getWorkingLibPath() { 
     // stash our libraries in our state location for Easy Access. 
     return WebFormsUIPlugin.getDefault().getStateLocation().append("jsLib"); //$NON-NLS-1$ 
    } 

JSエディタが初期化されるときにコードが呼び出されます。返されるすべてのパスは有効です。

しかし、私たちのオブジェクトはオートコンプリートやJSDocのか何かには表示されませんなぜ私は私の人生のために把握することはできません。 JS Editorのデバッグオプションはあまり役に立ちません。ログやコンソールの出力に例外はありません(私が見つけることができます)。

ライブラリファイルが正しく解析されているかどうかを確認するにはどうすればよいですか?使用可能なすべてのJSクラスをダンプする方法はありますか?


EDITさらなる詳細:

JSエディタではなく、通常のFileEditorInputよりも、(私たちが書いた)ByteArrayStorageEditorInputに作用しています。このプロジェクトで

(JS自然とJSは、パスを含め、プロジェクトレベルの設定です)、私はJSファイルを作成する場合、すべてのコード補完情報は我々を含めインクルードパス内の任意およびすべてのライブラリから存在しています、。しかし私たちのエディタでは、コード補完情報は表示されません。私たちの図書館ではありません。他の標準ライブラリからのものではありません。 ECMAScript組み込みライブラリでもありません。

この作業を行うには、ファイルを使用する唯一の方法のように見えます。これにより、エディタ内で問題マーカーが使用されます。ファイルがないと、問題タブにリストが表示されません。

だから、これはむしろJSライブラリの問題よりも、IEditorInputの問題のように見えます。

答えて

0

は、私は、ファイルの中に私のスクリプトを入れて、正常な動作を得るためにそれを使用する必要がありますするつもりのように見えます。

イエップ。それはうまくいった。私は以下のようなものをファイル作成:IResource.HIDDENを使用することにより

private FileEditorInput buildJSInput() throws CoreException { 
    FileEditorInput ourInput = (FileEditorInput)getEditorInput().getAdapter(FileEditorInput.class); 
    IFile ourFile = ourInput.getFile(); 
    // keep our temp file in the same directory as the DFD to avoid collisions 
    IContainer parent = ourFile.getParent(); 

    IPath tmpPath = new Path(ourFile.getName() + "_tmpServerSideJS.js"); //$NON-NLS-1$ 
    jsFile = parent.getFile(tmpPath); 

    byte jsBytes[] = model.getModel().getServerScript().getBytes(); 
    InputStream jsIn = new ByteArrayInputStream(jsBytes); 
    if (!jsFile.exists()) { 
     jsFile.create(jsIn, IResource.HIDDEN, null); 
    } else { 
     jsFile.setContents(jsIn, 0, null); 
    } 


    return new FileEditorInput(jsFile); 
} 

を、ファイルがリソースビューに表示されることはありません。 OSから実際のフォルダにはまだかなり見えますが、私はあまり心配していません。

関連する問題