Плагин RCP, извлекающий путь к классам во время выполнения проекта - PullRequest
0 голосов
/ 02 июля 2019

Я хочу разработать редактор для eclipse, который работает с Java-проектами.

Плагину необходимо знать ресурсы в classpath проекта открытого файла.Поскольку вопрос довольно двусмысленный, я всегда нахожу темы о пути к классам пакета / плагина, а не проекта, отредактированного с помощью.Может кто-нибудь сказать мне правильное модное слово (проект времени выполнения) или поделиться кодом / ссылками на эту тему?

Чтобы было понятно.Этот редактор и его автозаполнение / проверка должны вести себя по-разному, когда запись пути к классу добавляется / удаляется так же, как стандартный редактор java-файлов.

1 Ответ

1 голос
/ 02 июля 2019

С полезной подсказкой @howgler я понял, как получить путь к классу IJavaProject и сканировать его с помощью отражений Google. Надеюсь, это поможет кому-нибудь в будущем.

@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
    INSTANCE = this;
    super.init(site, input);
    FileEditorInput fei = (FileEditorInput) input;
    IFile file = fei.getFile();
    IProject project = file.getProject();
    try {
        if (project.hasNature(JavaCore.NATURE_ID)) {
            IJavaProject targetProject = JavaCore.create(project);
            final IClasspathEntry[] resolvedClasspath = targetProject.getResolvedClasspath(true);
            ArrayList<URL> urls = new ArrayList<>();
            for (IClasspathEntry classpathEntry : resolvedClasspath) {

                if (classpathEntry.getPath().toFile().isAbsolute()) {
                    urls.add(classpathEntry.getPath().toFile().toURI().toURL());
                } else {
                    urls.add(new File(project.getWorkspace().getRoot().getLocation().toFile(),classpathEntry.getPath().toString()).toURI().toURL());
                }
            }
            URLClassLoader urlCl = new URLClassLoader(urls.toArray(new URL[urls.size()]));

            Reflections reflections = new Reflections(urlCl,new TypeAnnotationsScanner(),new SubTypesScanner(true));
            Set<Class<?>> classes = reflections.getTypesAnnotatedWith(<???>.class);
            System.out.println(classes);
        }
    } catch (CoreException | IOException e1) {
        e1.printStackTrace();
    }

}
...