Xtext, запуск плагина из выбора

У меня есть DSLmyDsl, который я запускаю с этим кодом
Это в Xtend

class LaunchMydslShortcut implements ILaunchShortcut {
    @Inject
    private IResourceForEditorInputFactory resourceFactory;

    override launch(ISelection selection, String mode) {
        println("launch from selection")


    }

    override launch(IEditorPart editor, String mode) {
        val input = editor.editorInput

        if (editor instanceof XtextEditor && input instanceof FileEditorInput) {
            val resource = resourceFactory.createResource(input)
            resource.load(newHashMap())
            val program = resource.contents.head as Script
            new MyDslInterpreter().exec(program)
        }
    }

Я хочу запустить выполнение из метода launch(ISelection selection, String mode)
У меня есть ресурсы и вызов mydslinterpreter clas. как я могу это сделать?

1 ответ

  1. Вот код из обработчика, вызывающего Xtext IGenerator для файла. Вы должны быть в состоянии адаптировать его для вашего случая

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
    
        ISelection selection = HandlerUtil.getCurrentSelection(event);
        if (selection instanceof IStructuredSelection) {
            IStructuredSelection structuredSelection = (IStructuredSelection) selection;
            Object firstElement = structuredSelection.getFirstElement();
            if (firstElement instanceof IFile) {
                IFile file = (IFile) firstElement;
                IProject project = file.getProject();
                IFolder srcGenFolder = project.getFolder("src-gen");
                if (!srcGenFolder.exists()) {
                    try {
                        srcGenFolder.create(true, true,
                                new NullProgressMonitor());
                    } catch (CoreException e) {
                        return null;
                    }
                }
    
                final EclipseResourceFileSystemAccess fsa = fileAccessProvider.get();
                fsa.setOutputPath(srcGenFolder.getFullPath().toString());
    
                URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
                ResourceSet rs = resourceSetProvider.get(project);
                Resource r = rs.getResource(uri, true);
                generator.doGenerate(r, fsa);
    
            }
        }