Search in sources :

Example 16 with GroovyRecognizer

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

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 17 with GroovyRecognizer

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

the class ClassicGroovyTestGeneratorHelper method parse.

/** run the JSR parser implementation over the supplied source text*/
public void parse(String theSrcText, String testName) throws Exception {
    System.out.println("-------------------------------");
    System.out.println("  " + testName);
    System.out.println("-------------------------------");
    try {
        Reader reader = new BufferedReader(new StringReader(theSrcText));
        GroovyRecognizer recognizer = GroovyRecognizer.make(reader);
        recognizer.compilationUnit();
        System.out.println(decorateWithLineNumbers(theSrcText));
    } catch (RecognitionException parseException) {
        System.out.println(decorateWithLineNumbersAndErrorMessage(theSrcText, parseException));
        throw parseException;
    }
    System.out.println("-------------------------------");
}
Also used : BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader) StringReader(java.io.StringReader) Reader(java.io.Reader) BufferedReader(java.io.BufferedReader) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) RecognitionException(antlr.RecognitionException)

Example 18 with GroovyRecognizer

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

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 19 with GroovyRecognizer

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

the class GroovyRootDocBuilder method getGroovyParser.

private static GroovyRecognizer getGroovyParser(String input, SourceBuffer sourceBuffer) {
    UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(new StringReader(input), sourceBuffer);
    GroovyLexer lexer = new GroovyLexer(unicodeReader);
    unicodeReader.setLexer(lexer);
    GroovyRecognizer parser = GroovyRecognizer.make(lexer);
    parser.setSourceBuffer(sourceBuffer);
    return parser;
}
Also used : GroovyLexer(org.codehaus.groovy.antlr.parser.GroovyLexer) StringReader(java.io.StringReader) GroovyRecognizer(org.codehaus.groovy.antlr.parser.GroovyRecognizer) UnicodeEscapingReader(org.codehaus.groovy.antlr.UnicodeEscapingReader)

Example 20 with GroovyRecognizer

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

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