@Override public IStrategoTerm invoke(Context context, IStrategoTerm current, IStrategoTerm projectName) { if (!isTermString(current) || !isTermString(projectName)) return null; String filename = ((IStrategoString) current).stringValue(); ISourceProject project = findProject(((IStrategoString) projectName).stringValue()); if (project == null) return null; File file = new File(filename); Descriptor descriptor = Environment.getDescriptor(LanguageRegistry.findLanguage("SugarTest")); IStrategoTerm result = null; try { IParseController ip = descriptor.createParseController(); if (ip instanceof DynamicParseController) ip = ((DynamicParseController) ip).getWrapped(); if (ip instanceof SGLRParseController) { SGLRParseController sglrController = (SGLRParseController) ip; sglrController.initialize(new Path(filename), project, null); // Must lock the parse lock of this controller // or hit the assertion in AbstractSGLRI.parse sglrController.getParseLock().lock(); try { JSGLRI parser = sglrController.getParser(); parser.setUseRecovery(false); result = parser.parse(new FileInputStream(file), file.getAbsolutePath()); } finally { sglrController.getParseLock().unlock(); } } } catch (Exception e) { Environment.logException("Could not parse testing string", e); } return result; }
public ParseControllerBase(String languageID) { fLanguage = LanguageRegistry.findLanguage(languageID); }