You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jv...@apache.org on 2005/07/06 03:39:37 UTC

svn commit: r209381 - in /maven/components/trunk/maven-plugins/maven-antlr-plugin: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/maven/ src/main/java/org/apache/maven/plugin/ src/main/java/org/ap...

Author: jvanzyl
Date: Tue Jul  5 18:39:35 2005
New Revision: 209381

URL: http://svn.apache.org/viewcvs?rev=209381&view=rev
Log:
adding the antlr plugin

Added:
    maven/components/trunk/maven-plugins/maven-antlr-plugin/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/pom.xml
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/antlr/
    maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/antlr/AntlrPlugin.java

Added: maven/components/trunk/maven-plugins/maven-antlr-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-antlr-plugin/pom.xml?rev=209381&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-antlr-plugin/pom.xml (added)
+++ maven/components/trunk/maven-plugins/maven-antlr-plugin/pom.xml Tue Jul  5 18:39:35 2005
@@ -0,0 +1,25 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>mojo</artifactId>
+    <groupId>org.apache.maven.plugins</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>maven-antlr-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>maven-plugin</packaging>
+  <name>Maven ANTLR Plugin</name>
+  <inceptionYear>2001</inceptionYear>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0-beta-1-SNAPSHOT</version>
+    </dependency>      
+    <dependency>
+      <groupId>antlr</groupId>
+      <artifactId>antlrall</artifactId>
+      <version>2.7.4</version>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/antlr/AntlrPlugin.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/antlr/AntlrPlugin.java?rev=209381&view=auto
==============================================================================
--- maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/antlr/AntlrPlugin.java (added)
+++ maven/components/trunk/maven-plugins/maven-antlr-plugin/src/main/java/org/apache/maven/plugin/antlr/AntlrPlugin.java Tue Jul  5 18:39:35 2005
@@ -0,0 +1,203 @@
+package org.apache.maven.plugin.antlr;
+
+import antlr.Tool;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.security.Permission;
+import java.util.StringTokenizer;
+
+/**
+ * @goal genrerate
+ * @phase generate-sources
+ * @requiresDependencyResolution compile
+ * @description Antlr plugin
+ */
+public class AntlrPlugin
+    extends AbstractMojo
+{
+    /**
+     * @parameter expression="${grammars}"
+     * @required
+     */
+    private String grammars;
+
+    /**
+     * @parameter expression="${basedir}/src/antlr"
+     * @required
+     */
+    private String sourceDirectory;
+
+     /**
+     * @parameter expression="${project.build.directory}/generated-sources/antlr"
+     * @required
+     */
+    private String outputDirectory;
+
+    /**
+     * @parameter expression="${project}"
+     * @required
+     */
+    private MavenProject project;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        // ----------------------------------------------------------------------
+        //
+        // ----------------------------------------------------------------------
+
+        StringTokenizer st = new StringTokenizer( grammars, ", " );
+
+        while ( st.hasMoreTokens() )
+        {
+            String eachGrammar = st.nextToken().trim();
+
+            File grammar = new File( sourceDirectory, eachGrammar );
+
+            getLog().info( "grammar: " + grammar );
+
+            File generated = null;
+
+            try
+            {
+                generated = getGeneratedFile( grammar.getPath(), outputDirectory );
+            }
+            catch ( Exception e )
+            {
+                throw new MojoExecutionException( "Failed to get generated file", e );
+            }
+
+            if ( generated.exists() )
+            {
+                if ( generated.lastModified() > grammar.lastModified() )
+                {
+                    // it's more recent, skip.
+                    getLog().info( "The grammar is already generated" );
+                    continue;
+                }
+            }
+
+            if ( !generated.getParentFile().exists() )
+            {
+                generated.getParentFile().mkdirs();
+            }
+
+            String[] args = new String[]
+            {
+                "-o",
+                generated.getParentFile().getPath(),
+                grammar.getPath(),
+            };
+
+            SecurityManager oldSm = System.getSecurityManager();
+
+            System.setSecurityManager( NoExitSecurityManager.INSTANCE );
+
+            try
+            {
+                Tool.main( args );
+            }
+            catch ( SecurityException e )
+            {
+                if ( !e.getMessage().equals( "exitVM-0" ) )
+                {
+                    throw new MojoExecutionException( "Execution failed", e );
+                }
+            }
+            finally
+            {
+                System.setSecurityManager( oldSm );
+            }
+        }
+
+        if ( project != null )
+        {
+            project.addCompileSourceRoot( outputDirectory );
+        }
+    }
+
+    protected File getGeneratedFile( String grammar, String outputDirectory )
+        throws Exception
+    {
+        String generatedFileName = null;
+
+        String packageName = "";
+
+        try
+        {
+
+            BufferedReader in = new BufferedReader( new FileReader( grammar ) );
+
+            String line;
+
+            while ( ( line = in.readLine() ) != null )
+            {
+                line = line.trim();
+
+                int extendsIndex = line.indexOf( " extends " );
+
+                if ( line.startsWith( "class " ) && extendsIndex > -1 )
+                {
+                    generatedFileName = line.substring( 6, extendsIndex ).trim();
+
+                    break;
+                }
+                else if ( line.startsWith( "package" ) )
+                {
+                    packageName = line.substring( 8 ).trim();
+                }
+            }
+
+            in.close();
+        }
+        catch ( Exception e )
+        {
+            throw new Exception( "Unable to determine generated class", e );
+        }
+        if ( generatedFileName == null )
+        {
+            return null;
+        }
+
+        File genFile = null;
+
+        if ( "".equals( packageName ) )
+        {
+            genFile = new File( outputDirectory, generatedFileName + ".java" );
+        }
+        else
+        {
+            String packagePath = packageName.replace( '.', File.separatorChar );
+
+            packagePath = packagePath.replace( ';', File.separatorChar );
+
+            genFile = new File( new File( outputDirectory, packagePath ), generatedFileName + ".java" );
+        }
+
+        return genFile;
+    }
+
+}
+
+class NoExitSecurityManager extends SecurityManager
+{
+    static final NoExitSecurityManager INSTANCE = new NoExitSecurityManager();
+
+    private NoExitSecurityManager()
+    {
+    }
+
+    public void checkPermission( Permission permission )
+    {
+    }
+
+    public void checkExit( int status )
+    {
+        throw new SecurityException( "exitVM-" + status );
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org