Search in sources :

Example 11 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class GenericsUtils method parseClassNodesFromString.

public static ClassNode[] parseClassNodesFromString(final String option, final SourceUnit sourceUnit, final CompilationUnit compilationUnit, final MethodNode mn, final ASTNode usage) {
    GroovyLexer lexer = new GroovyLexer(new StringReader("DummyNode<" + option + ">"));
    final GroovyRecognizer rn = GroovyRecognizer.make(lexer);
    try {
        rn.classOrInterfaceType(true);
        final AtomicReference<ClassNode> ref = new AtomicReference<ClassNode>();
        AntlrParserPlugin plugin = new AntlrParserPlugin() {

            @Override
            public ModuleNode buildAST(final SourceUnit sourceUnit, final ClassLoader classLoader, final Reduction cst) throws ParserException {
                ref.set(makeTypeWithArguments(rn.getAST()));
                return null;
            }
        };
        plugin.buildAST(null, null, null);
        ClassNode parsedNode = ref.get();
        // the returned node is DummyNode<Param1, Param2, Param3, ...)
        GenericsType[] parsedNodeGenericsTypes = parsedNode.getGenericsTypes();
        if (parsedNodeGenericsTypes == null) {
            return null;
        }
        ClassNode[] signature = new ClassNode[parsedNodeGenericsTypes.length];
        for (int i = 0; i < parsedNodeGenericsTypes.length; i++) {
            final GenericsType genericsType = parsedNodeGenericsTypes[i];
            signature[i] = resolveClassNode(sourceUnit, compilationUnit, mn, usage, genericsType.getType());
        }
        return signature;
    } catch (RecognitionException e) {
        sourceUnit.addError(new IncorrectTypeHintException(mn, e, usage.getLineNumber(), usage.getColumnNumber()));
    } catch (TokenStreamException e) {
        sourceUnit.addError(new IncorrectTypeHintException(mn, e, usage.getLineNumber(), usage.getColumnNumber()));
    } catch (ParserException e) {
        sourceUnit.addError(new IncorrectTypeHintException(mn, e, usage.getLineNumber(), usage.getColumnNumber()));
    }
    return null;
}
Also used : ClassNode(org.codehaus.groovy.ast.ClassNode) ParserException(org.codehaus.groovy.syntax.ParserException) IncorrectTypeHintException(groovy.transform.stc.IncorrectTypeHintException) AtomicReference(java.util.concurrent.atomic.AtomicReference) SourceUnit(org.codehaus.groovy.control.SourceUnit) TokenStreamException(antlr.TokenStreamException) Reduction(org.codehaus.groovy.syntax.Reduction) AntlrParserPlugin(org.codehaus.groovy.antlr.AntlrParserPlugin) GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) StringReader(java.io.StringReader) GenericsType(org.codehaus.groovy.ast.GenericsType) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) RecognitionException(antlr.RecognitionException)

Example 12 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy by apache.

the class Main method parseFile.

// Here's where we do the real work...
public static void parseFile(String f, GroovyLexer l, SourceBuffer sourceBuffer) throws Exception {
    try {
        // Create a parser that reads from the scanner
        GroovyRecognizer parser = GroovyRecognizer.make(l);
        parser.setSourceBuffer(sourceBuffer);
        parser.setFilename(f);
        if (whitespaceIncluded) {
            GroovyLexer lexer = parser.getLexer();
            lexer.setWhitespaceIncluded(true);
            while (true) {
                Token t = lexer.nextToken();
                System.out.println(t);
                if (t == null || t.getType() == Token.EOF_TYPE)
                    break;
            }
            return;
        }
        // start parsing at the compilationUnit rule
        parser.compilationUnit();
        System.out.println("parseFile " + f + " => " + parser.getAST());
        // do something with the tree
        doTreeAction(f, parser.getAST(), parser.getTokenNames());
    } catch (Exception e) {
        System.err.println("parser exception: " + e);
        // so we can get stack trace        
        e.printStackTrace();
    }
}
Also used : GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) Token(antlr.Token) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer)

Example 13 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy-core by groovy.

the class LineColumnTest method doStuff.

public void doStuff(String input) throws Exception {
    GroovyRecognizer parser;
    SourceBuffer sourceBuffer = new SourceBuffer();
    UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(new StringReader(input), sourceBuffer);
    GroovyLexer lexer = new GroovyLexer(unicodeReader);
    unicodeReader.setLexer(lexer);
    parser = GroovyRecognizer.make(lexer);
    parser.setSourceBuffer(sourceBuffer);
    String[] tokenNames = parser.getTokenNames();
    parser.compilationUnit();
    AST ast = parser.getAST();
    AntlrASTProcessor snippets = new AntlrASTProcessSnippets();
    ast = snippets.process(ast);
    Visitor visitor = new LineColumnChecker(sourceBuffer, tokenNames);
    AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
    traverser.process(ast);
}
Also used : AST(antlr.collections.AST) SourceBuffer(org.codehaus.groovy.antlr.SourceBuffer) AntlrASTProcessor(org.codehaus.groovy.antlr.AntlrASTProcessor) UnicodeEscapingReader(org.codehaus.groovy.antlr.UnicodeEscapingReader) GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) AntlrASTProcessSnippets(org.codehaus.groovy.antlr.AntlrASTProcessSnippets) StringReader(java.io.StringReader) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer)

Example 14 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy-core by groovy.

the class GroovyRootDocBuilder method parseGroovy.

private Map<String, GroovyClassDoc> parseGroovy(String packagePath, String file, String src) throws RecognitionException, TokenStreamException {
    SourceBuffer sourceBuffer = new SourceBuffer();
    GroovyRecognizer parser = getGroovyParser(src, sourceBuffer);
    try {
        parser.compilationUnit();
    } catch (OutOfMemoryError e) {
        log.error("Out of memory while processing: " + packagePath + "/" + file);
        throw e;
    }
    AST ast = parser.getAST();
    // now do the business
    Visitor visitor = new SimpleGroovyClassDocAssembler(packagePath, file, sourceBuffer, links, properties, true);
    AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
    traverser.process(ast);
    return ((SimpleGroovyClassDocAssembler) visitor).getGroovyClassDocs();
}
Also used : AST(antlr.collections.AST) Visitor(org.codehaus.groovy.antlr.treewalker.Visitor) SourceBuffer(org.codehaus.groovy.antlr.SourceBuffer) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) AntlrASTProcessor(org.codehaus.groovy.antlr.AntlrASTProcessor) SourceCodeTraversal(org.codehaus.groovy.antlr.treewalker.SourceCodeTraversal)

Example 15 with GroovyRecognizer

use of org.codehaus.groovy.antlr.parser.GroovyRecognizer in project groovy-core by groovy.

the class Java2GroovyProcessor method getGroovyTokenNames.

private static String[] getGroovyTokenNames(String input) {
    GroovyRecognizer groovyParser = null;
    SourceBuffer groovySourceBuffer = new SourceBuffer();
    UnicodeEscapingReader groovyUnicodeReader = new UnicodeEscapingReader(new StringReader(input), groovySourceBuffer);
    GroovyLexer groovyLexer = new GroovyLexer(groovyUnicodeReader);
    groovyUnicodeReader.setLexer(groovyLexer);
    groovyParser = GroovyRecognizer.make(groovyLexer);
    return groovyParser.getTokenNames();
}
Also used : GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) StringReader(java.io.StringReader) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) SourceBuffer(org.codehaus.groovy.antlr.SourceBuffer) UnicodeEscapingReader(org.codehaus.groovy.antlr.UnicodeEscapingReader)

Aggregations

GroovyRecognizer (org.codehaus.groovy.antlr.parser.GroovyRecognizer)22 GroovyLexer (org.codehaus.groovy.antlr.parser.GroovyLexer)18 StringReader (java.io.StringReader)14 SourceBuffer (org.codehaus.groovy.antlr.SourceBuffer)10 UnicodeEscapingReader (org.codehaus.groovy.antlr.UnicodeEscapingReader)10 AST (antlr.collections.AST)8 AntlrASTProcessor (org.codehaus.groovy.antlr.AntlrASTProcessor)8 RecognitionException (antlr.RecognitionException)6 TokenStreamException (antlr.TokenStreamException)4 ByteArrayOutputStream (java.io.ByteArrayOutputStream)4 PrintStream (java.io.PrintStream)4 Token (antlr.Token)2 TokenStreamRecognitionException (antlr.TokenStreamRecognitionException)2 IncorrectTypeHintException (groovy.transform.stc.IncorrectTypeHintException)2 BufferedReader (java.io.BufferedReader)2 PrintWriter (java.io.PrintWriter)2 Reader (java.io.Reader)2 StringWriter (java.io.StringWriter)2 Constructor (java.lang.reflect.Constructor)2 ArrayList (java.util.ArrayList)2