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