/* * 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.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.antlr.netbeans.editor.parsing.SyntaxError; import org.antlr.runtime.CommonToken; import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.Lexer; import org.antlr.runtime.Token; import org.antlr.v4.tool.Grammar; import org.antlr.v4.tool.ast.GrammarRootAST; import org.netbeans.api.annotations.common.CheckForNull; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.api.annotations.common.NullAllowed; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.util.Parameters; /** * * @author Sam Harwell */ public class CompiledFileModelV4 extends CompiledFileModel { private final Grammar grammar; private final GrammarRootAST result; private final List<? extends SyntaxError> syntaxErrors; private final List<CompiledFileModelV4> importedResults; public CompiledFileModelV4(FileObject fileObject) { super(fileObject, null); this.grammar = null; this.result = null; this.syntaxErrors = null; this.importedResults = null; } public CompiledFileModelV4(@NullAllowed Grammar grammar, @NullAllowed GrammarRootAST result, @NonNull List<? extends SyntaxError> syntaxErrors, @NonNull FileObject fileObject, @NullAllowed CommonToken[] tokens) { super(fileObject, tokens); Parameters.notNull("syntaxErrors", syntaxErrors); this.grammar = grammar; this.result = result; this.syntaxErrors = syntaxErrors; this.importedResults = new ArrayList<>(); if (grammar != null && grammar.importedGrammars != null) { for (Grammar imported : grammar.importedGrammars) { CommonTokenStream importedTokenStream = (CommonTokenStream)imported.ast.tokenStream; String fileName = ((Lexer)importedTokenStream.getTokenSource()).getCharStream().getSourceName(); FileObject importedFileObject = FileUtil.toFileObject(new File(fileName)); List<? extends Token> importedTokensList = importedTokenStream.getTokens(); CommonToken[] importedTokens = importedTokensList.toArray(new CommonToken[0]); importedResults.add(new CompiledFileModelV4(imported, imported.ast, Collections.<SyntaxError>emptyList(), importedFileObject, importedTokens)); } } } @CheckForNull public Grammar getGrammar() { return grammar; } @CheckForNull public GrammarRootAST getResult() { return result; } @NonNull public List<CompiledFileModelV4> getImportedGrammarResults() { return importedResults; } @Override public List<? extends SyntaxError> getSyntaxErrors() { return syntaxErrors; } }