/*
* 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;
}