package com.sap.furcas.parser.tcs.impl; import org.antlr.runtime.Lexer; import com.sap.furcas.parser.tcs.TCSParserFacadeFactory; import com.sap.furcas.runtime.parser.ParserFacade; import com.sap.furcas.runtime.parser.exceptions.InvalidParserImplementationException; import com.sap.furcas.runtime.parser.impl.ObservableInjectingParser; public class TCSParserFacadeFactoryImpl implements TCSParserFacadeFactory { @Override public ParserFacade createTCSParserFacade() throws InvalidParserImplementationException { if (runUnstableBootstrappedVersion()) { return createBootstrappedFacade(); } else { return createStableFacade(); } } private boolean runUnstableBootstrappedVersion() { return "true".equals(System.getProperty("useBootstrappedTCSParser")); } private ParserFacade createBootstrappedFacade() throws InvalidParserImplementationException { try { return new ParserFacade(loadParserClass(), loadLexerClass(), /* language name */ "TCS"); } catch (ClassNotFoundException e) { throw new InvalidParserImplementationException(e); } } @SuppressWarnings("unchecked") private Class<? extends Lexer> loadLexerClass() throws ClassNotFoundException { return (Class<? extends Lexer>) Class.forName("generated.TCSLexer"); } @SuppressWarnings("unchecked") private Class<? extends ObservableInjectingParser> loadParserClass() throws ClassNotFoundException { return (Class<? extends ObservableInjectingParser>) Class.forName("generated.TCSParser"); } private ParserFacade createStableFacade() throws InvalidParserImplementationException { return new ParserFacade( com.sap.furcas.parser.tcs.stable.TCSParser.class, com.sap.furcas.parser.tcs.stable.TCSLexer.class, /* language name */ "TCS"); } }