Что я пытаюсь сделать
Я использую 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);