package org.rascalmpl.library.experiments.Compiler.RascalExtraction; import java.io.IOException; import java.util.Map; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.OverloadedFunction; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.RVMCore; import org.rascalmpl.library.util.PathConfig; import org.rascalmpl.value.ISourceLocation; import org.rascalmpl.value.IString; import org.rascalmpl.value.ITuple; import org.rascalmpl.value.IValue; import org.rascalmpl.value.IValueFactory; public class RascalExtraction { IValueFactory vf; private OverloadedFunction extractDoc; private RVMCore rvm; public RascalExtraction(IValueFactory vf, PathConfig pcfg) throws IOException{ // this.vf = vf; // if(rvm == null){ // RascalExecutionContext rex = // RascalExecutionContextBuilder.normalContext(vf, pcfg.getBoot() /* TODO needs a kernel location */, System.out, System.err) // .setJVM(true) // options for complete repl // .setTrace(false) // .build(); // rvm = ExecutionTools.initializedRVM(rex.getRascalExtraction(), rex); // } // try { // extractDoc = rvm.getOverloadedFunction("tuple[str moduleDoc, list[DeclarationInfo] declarationInfo] extractDoc(str parent, loc moduleLoc)"); // } catch (NoSuchRascalFunction e) { // e.printStackTrace(); // } } /** * Extract concepts from a "remote" Rascal files, i.e. outside a documentation hierarchy * @param moduleLoc Location of the Rascal source file * @param kwArgs Keyword arguments * @return A tuple consisting of 1. string with extracted documentation, 2. a list of extracted declaration info */ public ITuple extractDoc(IString parent, ISourceLocation moduleLoc, Map<String,IValue> kwArgs){ try { return (ITuple) rvm.executeRVMFunction(extractDoc, new IValue[] { parent, moduleLoc }, kwArgs); } catch (Exception e){ e.printStackTrace(System.err); } return vf.tuple(vf.string(""), vf.list()); } }