Как создать org.eclipse.jdt.core.ICompilationUnit или org.eclipse.core.internal.resources.Workspace? - PullRequest
1 голос
/ 07 мая 2019

Что я пытаюсь сделать

Я использую Eclipse JDT API для создания AST какого-либо Java-проекта и манипулирования им, однако мое программное обеспечение не является подключаемым модулем Eclipse, но оно должно быть автономным настольным приложением.

Прямо сейчас, чтобы использовать определенный метод API, мне нужен экземпляр org.eclipse.jdt.core.ICompilationUnit. Насколько я понял, этот фрагмент кода сделает это:

IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
IPath path = Path.fromOSString(stringPath);
IFile file = workspace.getRoot().getFileForLocation(path);
ICompilationUnit compilationUnit =(ICompilationUnit)JavaCore.create(file);

Проблема в том, что ResourcesPlugin.getWorkspace() не будет работать, я думаю , потому что мое приложение не является Eclipse Plug-in. Возникает конкретное исключение:

Caused by: java.lang.IllegalStateException: Workspace is closed.
    at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:432)

Что мне нужно

Решение, которое я хотел бы реализовать, включает создание папки, в которой исходный код содержится в рабочей области Eclipse (предварительно).

Поэтому мне нужен способ получить экземпляр org.eclipse.core.internal.resources.Workspace с указанием пути к папке, в которой содержится исходный код, в основном:

String path = "./folder/with/source/code";
Workspace workspace = pathToWorkspace(path);

N.B. Кстати, если есть способ получить экземпляр ICompilationUnit без использования рабочего пространства, это также решило бы мою проблему.

Что я пробовал

Я пытался создать экземпляр ResourcesPlugin и начать его с надеждой, что через BundleContext я смогу указать путь. К сожалению, org.osgi.framework.BundleContext - это указанный интерфейс, который не должен быть реализован потребителями , и я не смог найти конкретный класс, реализующий этот интерфейс.

ResourcesPlugin plugin = new ResourcesPlugin();
plugin.start(boundleContext);
...