/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.works.editor.grammar.parser; import java.util.Collection; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger; import org.antlr.netbeans.editor.text.DocumentSnapshot; import org.antlr.netbeans.parsing.spi.BaseParserData; import org.antlr.netbeans.parsing.spi.ParseContext; import org.antlr.netbeans.parsing.spi.ParserDataDefinition; import org.antlr.netbeans.parsing.spi.ParserResultHandler; import org.antlr.netbeans.parsing.spi.ParserTaskManager; import org.antlr.works.editor.grammar.GrammarParserDataDefinitions; import org.netbeans.api.annotations.common.NonNull; /** * * @author Sam Harwell */ public abstract class CompiledModelParser { // -J-Dorg.antlr.works.editor.grammar.parser.CompiledModelParser.level=FINE private static final Logger LOGGER = Logger.getLogger(CompiledModelParser.class.getName()); public void parse(ParserTaskManager taskManager, ParseContext context, DocumentSnapshot snapshot, Collection<? extends ParserDataDefinition<?>> requestedData, ParserResultHandler results) throws InterruptedException, ExecutionException { try { if (requestedData.contains(GrammarParserDataDefinitions.COMPILED_MODEL)) { CompiledModel result = parseImpl(taskManager, context, snapshot); BaseParserData<CompiledModel> data = new BaseParserData<>(context, GrammarParserDataDefinitions.COMPILED_MODEL, snapshot, result); results.addResult(data); } } catch (ExecutionException ex) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.log(Level.FINE, "An error occurred while parsing.", ex); } } } protected abstract CompiledModel parseImpl(@NonNull ParserTaskManager taskManager, @NonNull ParseContext context, @NonNull DocumentSnapshot snapshot) throws InterruptedException, ExecutionException; }