2011-09-24 36 views
2

我在寫一個Eclipse插件。我正在尋找正確的方式來獲取選定的java文件,並找到它的相應的.class文件。在Eclipse插件中,獲取與所選java文件對應的.class文件的正確方法是什麼?

我這樣做的方式現在適用於標準的Eclipse Java項目,但看起來不夠優雅:我調用IJavaProject#getOutputLocation並將其與選定文件的路徑結合使用。然後我只需將.java更改爲.class。

下面是從輸入選擇轉換爲路徑的方法的代碼:

 
def selection_to_path selection 
    path = selection.get_paths.first 

    output_location = path.get_first_segment.get_output_location 
    root = org.eclipse.core.resources::ResourcesPlugin.getWorkspace().get_root 
    folder = root.get_folder output_location 
    folder.get_location.to_s 

    path_to_file_as_string = path.get_last_segment.get_path.to_s 
    path_to_file_as_string[/\.java$/] = ".class" 
    path_elements_of_java_file = path_to_file_as_string.split("/")[3..-1] 

    all_elements = folder.get_location.to_s.split("/") + path_elements_of_java_file 

    File.join(all_elements) 
    end 

這工作,但我懷疑它失敗往往不夠,這是不應該做的事情。特別是,getOutputLocation的文檔說我對類文件位置的假設太簡單了。

那麼有什麼正確的方法來做到這一點?

我不需要這個工作,所有的時間。當然,在很多情況下.java文件沒有相應的.class文件(編譯錯誤,沒有自動編譯,不管)。我不在乎那些;我只想知道是否有類文件,它的完整路徑是什麼?

+0

只是好奇...是僞代碼上面的代碼,還是你用不同的語言編寫你的插件?如果是這樣,那是什麼? –

+0

這是jruby。我正在玩jruby插件 - 完整的東西在https://github.com/banshee/JrubyEclipsePlugin上的github上。有趣的部分是,您可以使用jruby隨時修改插件,無需爲簡單任務提供完整的插件開發環境。它仍然很粗糙,但它正在工作,我正在使用來完成任務。 –

+0

有趣...你有辦法爲JRuby插件做PDE構建嗎? –

回答

3

沒有辦法直接找到相應的類文件資源。正確的方法來得到相應的輸出文件夾是:

  • 轉換選擇到IJavaElement,最有可能ICompilationUnit(.java文件)
  • 找到相應IPackageFragmentRoot(源文件夾)
  • 找到解決IClasspathEntry
  • 使用IClasspathEntry.getOutputLocation()IJavaProject.getOutputLocation()方法查找輸出位置,具體取決於類路徑條目是否具有單獨的輸出位置。
  • 基礎上,ICompilationUnit的包

類文件可能會或可能不會取決於項目是否已經建立存在,是否有構建路徑錯誤構建路徑類路徑等,所以,還有其他啓發式,您需要使用它來確定上述算法的結果是否可用。

相關問題