Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2003-2007 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.codehaus.groovy.antlr.java;
 
 import java.io.File;
 import java.util.List;
 
 import  org.apache.commons.cli.CommandLine;
 import  org.apache.commons.cli.Options;
 import  org.apache.commons.cli.PosixParser;
 
 import  antlr.collections.AST;
 
 public class Java2GroovyMain {
 
 	public static void main(String[] args) {
 		try{
 			Options options = new Options();
 			PosixParser cliParser = new PosixParser();
 			CommandLine cli = cliParser.parse(optionsargs);
             String[] filenames = cli.getArgs();
             iffilenames.length == 0 ) {
             	..println("Needs at least one filename");
             }
             List filenameList = Arrays.asList(filenames);
             Iterator i = filenameList.iterator();
             while (i.hasNext()) {
             	String filename = (Stringi.next();
             	File f = new File(filename);
             	String text = DefaultGroovyMethods.getText(f);
             	..println(convert(filenametexttruetrue));
             }
 		} catch (Throwable t) {
 		}
 	}
 
 	public static String convert(String filenameString inputthrows Exception{
 		return convert(filenameinputfalsefalse);
 	}
 	
 	public static String convert(String filenameString input,boolean withHeaderboolean withNewLinesthrows Exception{
         JavaRecognizer parser = getJavaParser(input);
         String[] tokenNames = parser.getTokenNames();
         parser.compilationUnit();
         AST ast = parser.getAST();
         
         // output AST in format suitable for opening in http://freemind.sourceforge.net
         // which is a really nice way of seeing the AST, folding nodes etc
         if ("mindmap".equals(System.getProperty("antlr.ast"))) {
             try {
                 PrintStream out = new PrintStream(new FileOutputStream(filename + ".mm"));
                 Visitor visitor = new MindMapPrinter(out,tokenNames);
                 AntlrASTProcessor treewalker = new PreOrderTraversal(visitor);
                 treewalker.process(ast);
             } catch (FileNotFoundException e) {
                 ..println("Cannot create " + filename + ".mm");
             }
         }
         
         // modify the Java AST into a Groovy AST
         modifyJavaASTintoGroovyAST(tokenNamesast);
         String[] groovyTokenNames = getGroovyTokenNames(input);
         // groovify the fat Java-Like Groovy AST
         groovifyFatJavaLikeGroovyAST(astgroovyTokenNames);
 
         // now output        
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         Visitor visitor = new SourcePrinter(new PrintStream(baos),groovyTokenNameswithNewLines);
         AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
 
         traverser.process(ast);
        
        String header = "";
        if (withHeader) {
	        header = "/*\n" +
	        				"  Automatically Converted from Java Source \n" +
	        				"  \n" +
	        				"  by java2groovy v0.0.1   Copyright Jeremy Rayner 2007\n" +
	        				"  \n" +
	        				"  !! NOT FIT FOR ANY PURPOSE !! \n" +
	        				"  'java2groovy' cannot be used to convert one working program into another" +
	        				"  */\n\n";
        }
        return header + new String(baos.toByteArray());
    }

Parameters:
ast
groovyTokenNames
	private static void groovifyFatJavaLikeGroovyAST(AST astString[] groovyTokenNames) {
		Visitor groovifier = new Groovifier(groovyTokenNames);
        AntlrASTProcessor groovifierTraverser = new PreOrderTraversal(groovifier);
        groovifierTraverser.process(ast);
	}

Parameters:
tokenNames
ast
	private static void modifyJavaASTintoGroovyAST(String[] tokenNames, AST ast) {
		// mutate the tree when in Javaland
		Visitor preJava2groovyConverter = new PreJava2GroovyConverter(tokenNames);
		AntlrASTProcessor preJava2groovyTraverser = new PreOrderTraversal(preJava2groovyConverter);
		preJava2groovyTraverser.process(ast);
        // map the nodes to Groovy types
        Visitor java2groovyConverter = new Java2GroovyConverter(tokenNames);
        AntlrASTProcessor java2groovyTraverser = new PreOrderTraversal(java2groovyConverter);
        java2groovyTraverser.process(ast);
	}

Parameters:
input
Returns:
	private static JavaRecognizer getJavaParser(String input) {
		JavaRecognizer parser = null;
        SourceBuffer sourceBuffer = new SourceBuffer();
        UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(new StringReader(input),sourceBuffer);
        JavaLexer lexer = new JavaLexer(unicodeReader);
        unicodeReader.setLexer(lexer);
        parser = JavaRecognizer.make(lexer);
        parser.setSourceBuffer(sourceBuffer);
		return parser;
	}
	public static String mindmap(String inputthrows Exception{
        JavaRecognizer parser = getJavaParser(input);
        String[] tokenNames = parser.getTokenNames();
        parser.compilationUnit();
        AST ast = parser.getAST();
        // modify the Java AST into a Groovy AST
        modifyJavaASTintoGroovyAST(tokenNamesast);
        String[] groovyTokenNames = getGroovyTokenNames(input);
        // groovify the fat Java-Like Groovy AST
        groovifyFatJavaLikeGroovyAST(astgroovyTokenNames);
        // now output        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Visitor visitor = new MindMapPrinter(new PrintStream(baos),groovyTokenNames);
        AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
        traverser.process(ast);
        
        return new String(baos.toByteArray());
    }
	public static String nodePrinter(String inputthrows Exception{
        JavaRecognizer parser = getJavaParser(input);
        String[] tokenNames = parser.getTokenNames();
        parser.compilationUnit();
        AST ast = parser.getAST();
        // modify the Java AST into a Groovy AST
        modifyJavaASTintoGroovyAST(tokenNamesast);
        String[] groovyTokenNames = getGroovyTokenNames(input);
        // groovify the fat Java-Like Groovy AST
        groovifyFatJavaLikeGroovyAST(astgroovyTokenNames);
        // now output        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Visitor visitor = new NodePrinter(new PrintStream(baos),groovyTokenNames);
        AntlrASTProcessor traverser = new SourceCodeTraversal(visitor);
        traverser.process(ast);
        
        return new String(baos.toByteArray());
    }
	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();
	}
New to GrepCode? Check out our FAQ X