有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在一个Eclipse插件中,获得。与所选java文件相对应的类文件?

我正在写一个Eclipse插件。我正在寻找一种正确的方法来获取一个选定的java文件,并找到它对应的文件。类文件

我现在的做法适用于标准的EclipseJava项目,但似乎不够优雅:我将IJavaProject#getOutputLocation称为getOutputLocation,并将其与所选文件的路径结合起来。那我就换衣服。java到。上课

下面是将传入选择转换为路径的方法的代码:

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文件没有相应的。类文件(编译错误,没有自动生成,等等)。我不在乎那些;我只是想知道如果有一个类文件,它的完整路径是什么


共 (1) 个答案

  1. # 1 楼答案

    没有方法可以直接找到相应的类文件资源。获取相应输出文件夹的正确方法是:

    • 将所选内容转换为IJavaElement,很可能是ICompilationUnit(.java文件)
    • 找到相应的IPackageFragmentRoot(源文件夹)
    • 找到已解决的IClasspathEntry
    • 根据类路径条目是否有单独的输出位置,使用IClasspathEntry.getOutputLocation()IJavaProject.getOutputLocation()方法查找输出位置
    • 基于ICompilationUnit的包构造类路径的路径

    该类文件可能存在,也可能不存在,这取决于项目是否已生成,是否存在生成路径错误等。因此,还需要使用其他试探法来确定上述算法的结果是否可用