package org.rascalmpl.eclipse.editor.highlight; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.rascalmpl.eclipse.Activator; import org.rascalmpl.eclipse.editor.commands.AbstractEditorAction; import org.rascalmpl.eclipse.nature.ProjectEvaluatorFactory; import org.rascalmpl.interpreter.Evaluator; import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IString; import io.usethesource.impulse.editor.UniversalEditor; import io.usethesource.impulse.parser.IParseController; abstract class HighlightAction extends AbstractEditorAction { private String function; private String ext; public HighlightAction(UniversalEditor editor, String label, String function, String ext) { super(editor, label); this.function = function; this.ext = ext; } @Override public void run() { IConstructor tree = (IConstructor) ((IParseController) editor .getParseController()).getCurrentAst(); if (tree != null) { Evaluator eval = ProjectEvaluatorFactory.getInstance() .getEvaluator(project); eval.doImport(null, "util::Highlight"); IString s = (IString) eval.call(function, tree); IWorkbenchPage page = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); try { page.openEditor(new StringInput(new StringStorage(editor, project, s.getValue(), ext)), "org.eclipse.ui.DefaultTextEditor"); } catch (PartInitException e) { Activator.getInstance().logException("could not open editor for " + ext, e); } } } }