ResourceException при создании IMarker на IFile (связанный ресурс) - PullRequest
1 голос
/ 12 июля 2011

У меня проблемы с обновлением "старого" плагина Eclipse. Вот что я хотел бы сделать и что сделал оригинальный плагин:

(разобрать вывод компилятора на консоли с именем файла и информацией об ошибке -> все еще работает)

-> установить ссылку на местоположение в файле -> установить маркер на место в файле

То, что я делал в прошлом, было получить IFile из строки пути файла и сгенерированной ссылки и маркера из него:

IFile ifile;
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = new Path(fileName);

IFiles[] files = workspace.getRoot().findFilesForLocation(path);
...
ifile = iFiles[0];

Map attributes = new HashMap();

attributes.put(IMarker.SEVERITY, new Integer (severity));

MarkerUtilities.setLineNumber(attributes, lineNumber);
MarkerUtilities.setMessage(attributes, message);
MarkerUtilities.createMarker(ifile, attributes,
        IMarker

Поскольку findFilesForLocation устарела, я попытался найти другой путь, но у меня ничего не получилось. Использование измененного кода для получения IFile всегда приводит к исключению: org.eclipse.core.internal.resources.ResourceException: Ресурс '/path/to/file.c' не существует. Возможно ли, что это связано с тем, что исходный файл связан только с проектом, а не физически внутри проекта?

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath location = new Path(fileName);
IFile ifile = workspace.getRoot().getFile(location);

Может кто-нибудь помочь?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 июля 2011

Для API ресурсов «Пути» обычно означает путь в рабочей области, а «Местоположение» обычно относится к месту в файловой системе или вне рабочей области. Если у вас уже есть путь к рабочему пространству для начала, просто спросите IWorkspaceRoot для IFile и продолжайте то, что вы делаете.

0 голосов
/ 12 июля 2011

Я предполагаю, что fileName - это полный путь к файлу, который вы хотите получить. Я также предполагаю, что файл, который вы ищете, уже находится в рабочей области, даже если он связан (если нет, то это не сработает. Сначала вам нужно добавить файл в проект, прежде чем получить IFile). за это).

Вам нужно сделать что-то вроде этого:

IFiles[] files = workspace.getRoot().findFilesForLocationURI("file:" + fileName);

Тогда будут найдены все файлы в рабочей области, которые соответствуют файлу в файловой системе.

Причина, по которой ваша попытка выше дает вам ResourceException, заключается в том, что вы пытаетесь передать путь файловой системы, чтобы получить объект IFile из рабочей области. Рабочая область Eclipse является абстракцией над базовой файловой системой и не может напрямую работать с абсолютными путями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...