Я пытаюсь написать плагин для Papyrus, который преобразует код Alf.
Я попытался использовать Alf-парсер, который уже включен в Papyrus (org.eclipse.papyrus.uml.alf.*). Поэтому я попытался создать экземпляр синтаксического анализатора, как написано здесь:
public class Activator extends Plugin {
// default Activator code here ...
public String ConvertAlfToSpecSharp(String alf)
{
new org.eclipse.emf.mwe.utils.StandaloneSetup().setPlatformUri("../");
Injector injector = new AlfStandaloneSetup().createInjectorAndDoEMFRegistration();
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
// ...
}
}
Но первая строка (new org.eclipse.emf.mwe.utils.StandaloneSetup().setPlatformUri("../");
) выдает следующее исключение:
com.google.inject.CreationException: Guice creation errors:
1) Error injecting method, java.lang.IllegalStateException: No EPackages were registered for the validator org.eclipse.papyrus.uml.alf.validation.CommonJavaValidator please override and implement getEPackages().
at org.eclipse.xtext.validation.AbstractInjectableValidator.register(Unknown Source)
at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:55)
while locating org.eclipse.papyrus.uml.alf.validation.CommonJavaValidator
1 error
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:183)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.eclipse.papyrus.uml.alf.CommonStandaloneSetupGenerated.createInjector(CommonStandaloneSetupGenerated.java:28)
at org.eclipse.papyrus.uml.alf.CommonStandaloneSetupGenerated.createInjectorAndDoEMFRegistration(CommonStandaloneSetupGenerated.java:22)
at org.eclipse.papyrus.uml.alf.CommonStandaloneSetup.doSetup(CommonStandaloneSetup.java:23)
at org.eclipse.papyrus.uml.alf.AlfStandaloneSetupGenerated.createInjectorAndDoEMFRegistration(AlfStandaloneSetupGenerated.java:20)
at <packagenamehere>.Activator.ConvertAlfToSpecSharp(Activator.java:113)
Я понятия не имею, как это решить, тем более что мне очень сложно отлаживать приложения eclipse...
Обновление: вот ссылки на некоторые соответствующие классы (все из плагина org.eclipse.papyrus.uml.alf.common плагинов Papyrus (ссылка)):